ขออภัยสำหรับโพสต์ที่ยาวนาน แต่ฉันต้องการรวมทุกอย่างที่ฉันคิดว่ามีความเกี่ยวข้องในครั้งแรก
สิ่งที่ฉันต้องการ
ฉันกำลังใช้ Krylov Subspace Method แบบขนานสำหรับเมทริกซ์หนาแน่น GMRES ส่วนใหญ่, QMR และ CG ฉันรู้ (หลังจากทำโปรไฟล์) ว่ารูทีน DGEMV ของฉันน่าสงสาร ดังนั้นฉันจึงตัดสินใจที่จะมีสมาธิกับมันโดยแยกมันออกมา ฉันได้ลองใช้งานด้วยเครื่อง 12 คอร์ แต่ผลลัพธ์ด้านล่างนี้สำหรับแล็ปท็อป Intel i3 แบบ 4 คอร์ แนวโน้มไม่แตกต่างกันมากนัก
ฉัน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 ครั้ง
สิ่งที่ฉันได้ลอง:
การแปล
ฉันเคยเขียนรหัสใน Fortran ฉันแปลมันเป็น C, MATLAB และ Python (Numpy) MATLAB และ Python นั้นแย่มาก น่าแปลกที่ C นั้นดีกว่า FORTRAN ในสองหรือสองวินาทีสำหรับค่าข้างต้น เสมอต้นเสมอปลาย
โปรไฟล์
ฉันทำโปรไฟล์รหัสของฉันให้ทำงานและมันวิ่งไปไม่46.075
กี่วินาที นี่คือเมื่อMKL_DYNAMIC ถูกตั้งค่าเป็นFALSE
และแกนทั้งหมดถูกใช้ หากฉันใช้ 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 คอร์) เสร็จสิ้นภายใน53 วินาที นั่นคือความเร็วที่น้อยกว่า 1.1!
คำถามจริง: ฉันควรทำอย่างไรเพื่อปรับปรุงการเร่งความเร็วของฉัน
สิ่งที่ฉันคิดว่าอาจช่วยได้ แต่ฉันก็ไม่แน่ใจ:
- การใช้ Pthreads
- การใช้งาน MPI (ScaLapack)
- การปรับด้วยตนเอง (ฉันไม่รู้ว่าอย่างไรโปรดแนะนำทรัพยากรหากคุณแนะนำสิ่งนี้)
หากใครต้องการรายละเอียดเพิ่มเติม (โดยเฉพาะอย่างยิ่งเกี่ยวกับหน่วยความจำ) โปรดแจ้งให้เราทราบว่าฉันควรรันอะไรและอย่างไร ฉันไม่เคยทำประวัติความจำมาก่อน