Xin lỗi vì bài viết dài nhưng tôi muốn bao gồm mọi thứ mà tôi nghĩ là có liên quan trong lần đầu tiên.
Những gì tôi muốn
Tôi đang triển khai một phiên bản song song của Phương pháp không gian con Krylov cho ma trận dày đặc. Chủ yếu là GMRES, QMR và CG. Tôi nhận ra (sau khi định hình) rằng thói quen DGEMV của tôi thật thảm hại. Vì vậy, tôi quyết định tập trung vào đó bằng cách cô lập nó. Tôi đã thử chạy nó trên máy 12 lõi nhưng kết quả bên dưới là dành cho máy tính xách tay Intel i3 4 lõi. Không có nhiều sự khác biệt trong xu hướng.
KMP_AFFINITY=VERBOSE
Đầu ra của tôi có sẵn ở đây .
Tôi đã viết ra một mã nhỏ:
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
Tôi tin rằng điều này mô phỏng hành vi của CG trong 50 lần lặp.
Những gì tôi đã thử:
Dịch
Ban đầu tôi đã viết mã ở Fortran. Tôi đã dịch nó sang C, MATLAB và Python (Numpy). Không cần phải nói, MATLAB và Python thật kinh khủng. Đáng ngạc nhiên, C tốt hơn FORTRAN một hoặc hai giây cho các giá trị trên. Nhất quán.
Hồ sơ
Tôi lập hồ sơ mã của tôi để chạy và nó chạy trong 46.075
vài giây. Đó là khi MKL_DYNAMIC được đặt thànhFALSE
và tất cả các lõi đã được sử dụng. Nếu tôi sử dụng MKL_DYNAMIC là đúng, chỉ (khoảng) một nửa số lõi được sử dụng tại bất kỳ thời điểm nào. Dưới đây là một vài chi tiết:
Address Line Assembly CPU Time
0x5cb51c mulpd %xmm9, %xmm14 36.591s
Quá trình tốn thời gian nhất dường như là:
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
Dưới đây là một vài hình ảnh:
Kết luận:
Tôi là người mới bắt đầu thực sự về hồ sơ nhưng tôi nhận ra rằng tốc độ vẫn không tốt. Mã tuần tự (1 Lõi) kết thúc sau 53 giây. Đó là một tốc độ tăng ít hơn 1,1!
Câu hỏi thực tế: Tôi nên làm gì để cải thiện khả năng tăng tốc của mình?
Những thứ mà tôi nghĩ có thể giúp nhưng tôi không thể chắc chắn:
- Thực hiện Pthreads
- Triển khai Bộ KH & ĐT (ScaLapack)
- Điều chỉnh thủ công (Tôi không biết làm thế nào. Vui lòng giới thiệu tài nguyên nếu bạn đề xuất điều này)
Nếu bất cứ ai cần thêm chi tiết (đặc biệt là về bộ nhớ), xin vui lòng cho tôi biết tôi nên chạy gì và làm thế nào. Tôi chưa bao giờ bộ nhớ hồ sơ trước đây.