Chương trình tắnh toán hạt song song ựược thực hiện trên mô hình máy tắnh song song ựơn chỉ thị, ựa dữ liệu (single instruction multiple data - SIMD), là mô hình mà tại một thời ựiểm, các xử lý cùng thực hiện một chỉ thị, nhưng mỗi xử lý lại thực hiện chỉ thị này trên dữ liệu của riêng nó. Trong chương trình song song của chúng tôi, tại một thời ựiểm, chỉ thị chung của các xử lý chắnh là việc gọi và thực thi một trong các thủ tục ựã ựược liệt kê ở phần 2.4.1, trên các dữ liệu của riêng chúng là những hạt
mà các xử lý ựược chia ựều ngay khi chương trình bắt ựầu chạy. để mã tuần tự trở thành mã song song, một số thủ tục của nó cần ựược bổ sung các thủ tục của MPI, mà ựã ựược tóm tắt ở phần 2.3.2.2, như sau:
input_data.f90 : bổ sung thủ tục MPI_BCAST ựể truyền các tham số của mô
hình từ một xử lý nguồn (root) ựến tất cả các xử lý.
load_data.f90 : thủ tục MPI_BCAST ựược sử dụng ựể truyền các giá trị của
từ trường ngoài từ root ựến tất cả các xử lý. Nếu có tổng số hạt Npart và số xử lý
Nproc là bất kỳ thì phép chia Npart/Nproccó thể không hết, nên root thực hiện thủ
tục MPI_SCATTERV ựể phân tán số hạt ựến các xử lý. Khi ựó, tất cả các xử lý
ựược nhận số hạt bằng nhau ngoại trừ root. Tuy nhiên, root chỉ chênh lệch một vài hạt không ựáng kể so với các xử lý khác.
solve_file.f90 : thủ tục MPI_ALLREDUCE ựược gọi với toán tử kết hợp
MPI_SUM ựể tắnh tổng mật ựộ ựiện tắch trên các nút lưới của mỗi xử lý, kết quả
này ựược gửi ựến tất cả các xử lý. Sau ựó, các xử lý tiến hành việc giải phương trình Poisson của riêng nó.
boun_diag.f90 : thủ tục MPI_ALLREDUCE ựược gọi ựể tắnh tổng lượng ựiện
tắch lắng ựọng trên bề mặt cathode.
varable_dt.f90 : thực hiện thủ tục MPI_REDUCE tắnh tổng mật ựộ electron.
Root nhận kết quả này và tìm giá trị lớn nhất của nó, ựiều chỉnh bước nhảy thời gian và gọi MPI_BCAST ựể phân tán bước nhảy thời gian ựến tất cả các xử lý.
load_balace.f90: sau một số chu kỳ tắnh toán, số lượng hạt của mỗi xử lý sẽ
khác nhau, thủ tục MPI_GATHERV ựược dùng ựể gom tất cả các hạt về root. Sau khi ghi tất cả các loại dữ liệu ra các file, root thực hiện việc cân bằng tải cho các xử lý. Chúng tôi nhận thấy rằng, sau 20000 bước nhảy thời gian, số lượng hạt chênh lệch giữa các xử lý là dưới 1000 hạt. Tuy nhiên, chương trình phải thực hiện khoảng 106 bước nhảy thời gian, nên việc cân bằng tải là rất cần thiết.
Chương 3
KẾT QUẢ VÀ BÀN LUẬN