Maaf untuk posting lama tapi saya ingin memasukkan semua yang saya pikir relevan pada langkah pertama.
Apa yang saya inginkan
Saya menerapkan versi paralel dari Metode Subruang Krylov untuk Matriks Padat.Terutama GMRES, QMR dan CG. Saya menyadari (setelah membuat profil) bahwa rutinitas DGEMV saya menyedihkan. Jadi saya memutuskan untuk berkonsentrasi pada hal itu dengan mengisolasinya. Saya telah mencoba menjalankannya pada mesin 12 inti tetapi hasilnya di bawah ini untuk Laptop 4 core Intel i3. Tidak ada banyak perbedaan dalam tren.
KMP_AFFINITY=VERBOSE
Output saya tersedia di sini .
Saya menulis kode kecil:
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
Saya percaya ini mensimulasikan perilaku CG untuk 50 iterasi.
Apa yang saya coba:
Terjemahan
Saya awalnya menulis kode di Fortran. Saya menerjemahkannya ke C, MATLAB dan Python (Numpy). Tak perlu dikatakan, MATLAB dan Python mengerikan.Anehnya, C lebih baik daripada FORTRAN dalam satu atau dua detik untuk nilai-nilai di atas. Secara konsisten.
Pembuatan profil
Saya memrofilkan kode saya untuk dijalankan dan berjalan selama beberapa 46.075
detik. Inilah saat MKL_DYNAMIC disetel keFALSE
dan semua core digunakan. Jika saya menggunakan MKL_DYNAMIC sebagai true, hanya (kurang-lebih) setengah dari jumlah core yang digunakan pada suatu titik waktu tertentu. Berikut ini beberapa detailnya:
Address Line Assembly CPU Time
0x5cb51c mulpd %xmm9, %xmm14 36.591s
Proses yang paling memakan waktu adalah:
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
Berikut beberapa foto:
Kesimpulan:
Saya benar-benar pemula dalam membuat profil tetapi saya menyadari bahwa kecepatannya masih belum baik. Kode sekuensial (1 Core) selesai dalam 53 detik. Itu adalah kecepatan kurang dari 1,1!
Pertanyaan Sungguhan: Apa yang harus saya lakukan untuk meningkatkan kecepatan saya?
Hal-hal yang saya pikir mungkin bisa membantu tetapi saya tidak yakin:
- Implementasi pthreads
- Implementasi MPI (ScaLapack)
- Penyesuaian Manual (Saya tidak tahu caranya. Mohon rekomendasikan sumber daya jika Anda menyarankan ini)
Jika ada yang membutuhkan lebih banyak (terutama mengenai memori) detail, beri tahu saya apa yang harus saya jalankan dan caranya. Saya tidak pernah mengingat memori sebelumnya.