Вибачте за довгий пост, але я хотів включити все, що, на мою думку, було актуальним.
Що я хочу
Я реалізую паралельну версію методів підпростору Крилова для щільних матриць. В основному GMRES, QMR та CG. Я зрозумів (після профілювання), що мій режим DGEMV був жалюгідним. Тому я вирішив сконцентруватися на цьому, виділивши його. Я спробував запустити його на 12-ядерній машині, але наведені нижче результати призначені для 4-ядерного ноутбука Intel i3. Різниці в тренді мало.
Мій KMP_AFFINITY=VERBOSE
вихід доступний тут .
Я виписав невеликий код:
size_N = 15000
A = randomly_generated_dense_matrix(size_N,size_N); %Condition Number is not bad
b = randomly_generated_dense_vector(size_N);
for it=1:n_times %n_times I kept at 50
x = Matrix_Vector_Multi(A,b);
end
Я вважаю, що це імітує поведінку CG за 50 ітерацій.
Що я спробував:
Переклад
Я спочатку писав код у Фортран. Я переклав це на C, MATLAB та Python (Numpy). Само собою зрозуміло, що MATLAB і Python були жахливими. Дивно, але для вищезгаданих значень C виявився кращим за FORTRAN на секунду-дві. Послідовно.
Профілювання
Я профілював свій код для запуску, і він працював протягом 46.075
декількох секунд. Це було коли було встановлено MKL_DYNAMICFALSE
і були використані всі ядра. Якщо я використовував MKL_DYNAMIC як істинний, тільки (приблизно) половина кількості ядер використовувалася в будь-який момент часу. Ось кілька деталей:
Address Line Assembly CPU Time
0x5cb51c mulpd %xmm9, %xmm14 36.591s
Здається, найбільш трудомісткий процес:
Call Stack LAX16_N4_Loop_M16gas_1
CPU Time by Utilization 157.926s
CPU Time:Total by Utilization 94.1%
Overhead Time 0us
Overhead Time:Total 0.0%
Module libmkl_mc3.so
Ось кілька фотографій:
Висновки:
Я справжній початківець у профілюванні, але розумію, що швидкість все ще не є хорошою. Послідовний (1 Core) код закінчується за 53 секунди. Це швидкість, що перевищує 1,1!
Справжнє запитання: Що мені зробити, щоб покращити швидкість?
Те, що, на мою думку, може допомогти, але я не можу бути впевнений:
- Реалізація Pthreads
- Реалізація MPI (ScaLapack)
- Ручна настройка (не знаю як. Будь ласка, рекомендуйте ресурс, якщо ви запропонуєте це)
Якщо комусь потрібно більше (особливо щодо пам’яті) деталей, будь ласка, дайте мені знати, що мені слід запускати та як. Я ніколи раніше не пам'ятався з профілем пам'яті.