Thầy đã tạo điều kiện cho tôi có cơ hội được tham gia và thực hiện đề tài với chủ đề “Mô hình hóa quan hệ sự kiện nhằm phát hiện các lỗi nhất quán bộ nhớ trong giao tiếp truyền thôn
Trang 1
ĐẠI HỌC QUỐC GIA TP HCM
TRƯỜNG ĐẠI HỌC BÁCH KHOA
-
DIỆP THANH ĐĂNG
MÔ HÌNH HÓA QUAN HỆ SỰ KIỆN NHẰM PHÁT HIỆN CÁC LỖI NHẤT QUÁN BỘ NHỚ TRONG GIAO TIẾP TRUYỀN THÔNG ĐIỆP ĐƠN PHƯƠNG
Ngành: Khoa Học Máy Tính
Mã số: 60480101
LUẬN VĂN THẠC SĨ
TP HỒ CHÍ MINH, tháng 6 năm 2018
Trang 2
CÔNG TRÌNH ĐƯỢC HOÀN THÀNH TẠI TRƯỜNG ĐẠI HỌC BÁCH KHOA –ĐHQG -HCM
Cán bộ hướng dẫn khoa học : PGS TS Thoại Nam
(Ghi rõ họ, tên, học hàm, học vị và chữ ký) Cán bộ chấm nhận xét 1 : TS Nguyễn Lê Duy Lai
(Ghi rõ họ, tên, học hàm, học vị và chữ ký) Cán bộ chấm nhận xét 2 : PGS TS Trần Công Hùng
(Ghi rõ họ, tên, học hàm, học vị và chữ ký) Luận văn thạc sĩ được bảo vệ tại Trường Đại học Bách Khoa, ĐHQG Tp HCM ngày 18 tháng 7 năm 2018
Thành phần Hội đồng đánh giá luận văn thạc sĩ gồm: (Ghi rõ họ, tên, học hàm, học vị của Hội đồng chấm bảo vệ luận văn thạc sĩ) 1 PGS TS Phạm Trần Vũ
2 PGS TS Huỳnh Tường Nguyên
3 TS Nguyễn Lê Duy Lai
4 PGS TS Trần Công Hùng
5 TS Nguyễn Minh Sơn
Xác nhận của Chủ tịch Hội đồng đánh giá LV và Trưởng Khoa quản lý chuyên ngành sau khi luận văn đã được sửa chữa (nếu có)
Trang 3ĐẠI HỌC QUỐC GIA TP.HCM
TRƯỜNG ĐẠI HỌC BÁCH KHOA
CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
Độc lập - Tự do - Hạnh phúc
NHIỆM VỤ LUẬN VĂN THẠC SĨ Họ tên học viên: Diệp Thanh Đăng MSHV: 1670019
Ngày, tháng, năm sinh: 23/07/1993 Nơi sinh: Bình Định
Ngành: Khoa Học Máy Tính Mã số : 60480101
I TÊN ĐỀ TÀI: Mô hình hóa quan hệ sự kiện nhằm phát hiện các lỗi nhất quán bộ nhớ trong giao tiếp truyền thông điệp đơn phương (Modelling event relations to detect memory consistency errors in MPI one-sided communication)
II NHIỆM VỤ VÀ NỘI DUNG: Đề tài tập trung vào việc mô hình hóa quan hệ sự kiện để từ đó nhằm phát hiện các lỗi nhất quán bộ nhớ trong giao tiếp truyền thông điệp đơn phương
III NGÀY GIAO NHIỆM VỤ: 10/07/2017
IV NGÀY HOÀN THÀNH NHIỆM VỤ: 17/06/2018
V CÁN BỘ HƯỚNG DẪN: PGS TS Thoại Nam
Tp HCM, ngày 18 tháng 6 năm 2018
CÁN BỘ HƯỚNG DẪN
(Họ tên và chữ ký)
TRƯỞNG KHOA KH & KTMT
(Họ tên và chữ ký)
Trang 4LỜI CÁM ƠN
Trên thực tế không có sự thành công nào mà không gắn liền với những sự hỗ trợ, giúp
đỡ dù ít hay nhiều, dù trực tiếp hay gián tiếp của người khác Trong suốt thời gian từ khi bắt đầu học tập sau đại học ở trường đại học Bách Khoa – Đại Học Quốc Gia Thành Phố Hồ Chí Minh cho đến nay, tôi đã nhận được rất nhiều sự quan tâm, giúp
đỡ của quý thầy, cô, gia đình và bạn bè
Với lòng biết ơn chân thành và sâu sắc nhất, tôi xin gửi lời cảm ơn đến PGS TS Thoại Nam Thầy đã tạo điều kiện cho tôi có cơ hội được tham gia và thực hiện đề
tài với chủ đề “Mô hình hóa quan hệ sự kiện nhằm phát hiện các lỗi nhất quán
bộ nhớ trong giao tiếp truyền thông điệp đơn phương” Trong quá trình thực hiện,
thầy thường xuyên trao đổi, hỗ trợ tài liệu và giải đáp mọi thắc mắc liên quan đến nội dung cần tìm hiểu Qua đó, tôi có thể trau dồi kiến thức và kỹ năng giải quyết vấn đề cũng như định hướng được các công việc trong quá trình thực hiện luận văn tốt nghiệp
Bên cạnh đó, tôi cũng gửi lời cảm ơn đến các thành viên của phòng thí nghiệm Tính Toán Hiệu Năng Cao đã hết lòng hỗ trợ về mặt máy móc, kỹ thuật trong suốt quá trình làm luận văn tốt nghiệp
Ngoài ra, tôi cũng xin gửi lời cảm ơn chân thành đến các thầy, cô của trường đại học Bách Khoa – Đại Học Quốc Gia Thành Phố Hồ Chí Minh nói chung cũng như các thầy, cô của khoa Khoa Học và Kỹ Thuật Máy Tính nói riêng, đã cung cấp những kiến thức nền tảng vô cùng quý giá để tôi có thể áp dụng nó vào đề tài luận văn tốt nghiệp này
Báo cáo luận văn tốt nghiệp được hoàn thành trong thời gian khoảng hai tuần Bước đầu đi vào lĩnh vực sáng tạo trong nghiên cứu khoa học, kiến thức của tôi vẫn còn nhiều hạn chế Do đó, không tránh khỏi những thiếu sót là điều chắc chắn, tôi rất mong nhận được những ý kiến đóng góp quý báu của quý thầy, cô và các bạn học viên để tôi ngày càng hoàn thiện hơn
Sau cùng, tôi xin kính chúc các thầy, cô trong Khoa Khoa Học và Kỹ Thuật Máy Tính nói chung, PGS TS Thoại Nam nói riêng thật dồi dào sức khỏe, niềm tin để tiếp tục thực hiện sứ mệnh truyền đạt kiến thức quý báu của mình cho thế hệ sinh viên mai sau
Xin chân thành cảm ơn!
Trang 5TÓM TẮT LUẬN VĂN
Cơ chế giao tiếp truyền thông điệp đơn phương làm tách biệt việc truyền dữ liệu ra khỏi đồng bộ nhằm giảm thiểu chi phí từ việc đồng bộ không cần thiết và giúp cho việc song song hóa chương trình hiệu quả hơn Tính chất này một mặt là ưu điểm của
cơ chế giao tiếp truyền thông điệp đơn phương nhưng mặt khác nó lại tạo ra nhiều thách thức lớn đối với người lập trình trong việc duy trì độ tin cậy của chương trình Các lỗi nhất quán bộ nhớ khá nổi tiếng trong việc làm suy giảm độ tin cậy cũng như hiệu suất của các chương trình truyền thông điệp đơn phương Thậm chí ngay cả một chuyên gia đang phát triển cơ chế này cũng có thể dễ dàng mắc phải những lỗi như trên Các lỗi nhất quán bộ nhớ xảy ra trong ứng dụng kiểm thử lockopts trong bản hiện thực MPICH là một ví dụ điển hình cho tình huống này Do đó, việc phát hiện các lỗi nhất quán bộ nhớ là vô cùng thách thức MC-Checker là công cụ truy lỗi hiện đại nhất có thể phát hiện các lỗi nhất quán bộ nhớ hiệu quả MC-Checker giải quyết các lỗi này dựa trên quan hệ happens-before truyền thống Việc sử dụng tất cả các tính chất của quan hệ này làm cho MC-Checker khó có thể mở rộng tốt Do đó, MC-Checker chấp nhận bỏ qua tính chất bắc cầu của quan hệ happens-before nhằm duy trì khả năng mở rộng của mình Hệ quả là MC-Checker nhiều khả năng gây ra các false positives
Để giải quyết vấn đề trên, luận văn này giới thiệu một hướng tiếp cận mới dựa trên clock gọi là MC-CChecker với mục tiêu duy trì đầy đủ quan hệ happens-before nhờ vào việc sử dụng encoded vector clock MC-CChecker kế thừa các đặc tính ưu việt của MC-Checker nhờ vào việc tái sử dụng ST-Analyzer và Profiler trong khi mục đích chính của nó là nhằm tối ưu hóa DN-Analyzer của MC-Checker Các kết quả thực nghiệm chứng minh rằng MC-CChecker không chỉ có khả năng phát hiện hiệu quả các lỗi nhất quán bộ nhớ như MC-Checker mà còn có thể loại bỏ hoàn toàn các khả năng của false positives mà là hạn chế chính của MC-Checker trong khi vẫn duy trì hao phí chấp nhận được về mặt thời gian thực thi cũng như độ tiêu hao bộ nhớ của chương trình đối với DN-Analyzer Đặc biệt, DN-Analyzer của MC-CChecker có tính mở rộng tốt khi xử lý lượng lớn trace file được tạo ra khi chạy lockopts lên đến
8192 quá trình
Trang 6ABSTRACT
MPI one-sided communication decouples data movement from synchronization, which eliminates overhead from unneeded synchronization and allows for greater concurrency On the one hand this fact is the great advantage of MPI one-sided communication, but on the other, it poses enormous challenges for programmers in preversing the reliability of programs Memory consistency errors are notorious for degrading reliability as well as performance of MPI one-sided applications Even an MPI expert can easily make these mistakes The lockopts bug occurred in an RMA test case that is part of MPICH MPI implementation is an example for this situation Hence, detecting memory consistency errors is extremely challenging MC-Checker
is the most cutting-edge debugger to address these errors effectively MC-Checker tackles the memory consistency errors based on the happened-before relation Taking full advantage of the relation makes DN-Analyzer of MC-Checker difficult to scale well For that reason, MC-Checker does ignore the transitive ordering of the happened-before relation to retain scalability of DN-Analyzer Consequently, MC-Checker is highly able to impose a potential source of false positives
In order to overcome this issue, the thesis presents a novel clock-based approach called MC-CChecker with the aim of fully preserving the happened-before relation
by making use of an encoded vector clock MC-CChecker inherits distinguishing features from MC-Checker by reusing ST-Analyzer and Profiler while focusing mainly on the optimization of DN-Analyzer The experimental findings prove that MC-CChecker not only effectively detects memory consistency errors as MC-Checker did, but also eliminates completely the potential source of false positives which is a major limitation of MC-Checker while still retaining acceptable overheads
of execution time and memory usage for DN-Analyzer Especially, DN-Analyzer of MC-CChecker is fairly scalable when processing a large amount of trace files generated from running the lockopts up to 8192 processes
Trang 7LỜI CAM ĐOAN
Tôi xin cam đoan đây là công trình nghiên cứu của nhóm và được sự hướng dẫn khoa học của PGS TS Thoại Nam Các nội dung nghiên cứu, kết quả trong đề tài này là trung thực và chưa được công bố dưới bất kỳ hình thức nào trước đây Những số liệu trong các bảng biểu phục vụ cho việc phân tích, nhận xét, đánh giá được chính nhóm thu thập từ các nguồn khác nhau có ghi rõ trong phần tài liệu tham khảo
Ngoài ra, trong luận văn còn có sử dụng một số nhận xét, đánh giá cũng như số liệu của các tác giả, cơ quan tổ chức khác đều có trích dẫn và chú thích nguồn gốc Nếu phát hiện có bất kỳ sự gian lận nào nhóm xin hoàn toàn chịu trách nhiệm về mặt nội dung luận văn tốt nghiệp của mình Trường đại học Bách Khoa – Đại Học Quốc Gia Thành Phố Hồ Chí Minh không liên quan đến những vi phạm tác quyền, bản quyền do nhóm gây ra trong quá trình thực hiện (nếu có)
TP Hồ Chí Minh, ngày 18 tháng 6 năm 2018
Trang 8MỤC LỤC
LỜI CÁM ƠN i
TÓM TẮT LUẬN VĂN ii
ABSTRACT iii
LỜI CAM ĐOAN iv
MỤC LỤC v
DANH MỤC TỪ VIẾT TẮT vii
DANH MỤC BẢNG viii
DANH MỤC HÌNH ix
CHƯƠNG 1 TỔNG QUAN 1
1.1 GIỚI THIỆU ĐỀ TÀI 1
1.1.1 CƠ SỞ HÌNH THÀNH ĐỀ TÀI 1
1.1.2 Ý NGHĨA CỦA ĐỀ TÀI 5
1.1.3 CÁC CÔNG TRÌNH NGHIÊN CỨU LIÊN QUAN 5
1.2 MỤC TIÊU, GIỚI HẠN VÀ ĐỐI TƯỢNG NGHIÊN CỨU 11
1.2.1 MỤC TIÊU NGHIÊN CỨU 11
1.2.2 GIỚI HẠN NGHIÊN CỨU 12
1.2.3 ĐỐI TƯỢNG NGHIÊN CỨU 12
1.3 PHƯƠNG PHÁP NGHIÊN CỨU 13
1.3.1 XÂY DỰNG GIẢI THUẬT CLOCK ĐỂ THỂ HIỆN MỐI QUAN HỆ GIỮA CÁC SỰ KIỆN VỀ MẶT THỜI GIAN 13
1.3.2 ĐỀ XUẤT PHƯƠNG PHÁP PHÁT HIỆN CÁC LỖI NHẤT QUÁN BỘ NHỚ DỰA TRÊN CLOCK 13
1.3.3 HIỆN THỰC VÀ ĐÁNH GIÁ PHƯƠNG PHÁP ĐỀ XUẤT 13
1.4 CẤU TRÚC LUẬN VĂN 13
CHƯƠNG 2 KIẾN THỨC NỀN TẢNG 15
2.1 LỖI NHẤT QUÁN BỘ NHỚ 15
2.2 LOGICAL CLOCKS 16
2.2.1 LAMPORT CLOCK 16
2.2.2 VECTOR CLOCK 17
2.2.3 REDUCED CLOCK 17
2.2.4 ENCODED VECTOR CLOCK 17
CHƯƠNG 3 HIỆN THỰC 19
Trang 93.1 MÔ HÌNH HÓA QUAN HỆ SỰ KIỆN TRONG GIAO TIẾP TRUYỀN
THÔNG ĐIỆP ĐƠN PHƯƠNG 19
3.2 MC-CCHECKER – MỘT KỸ THUẬT DỰA TRÊN CLOCK NHẰM PHÁT HIỆN CÁC LỖI NHẤT QUÁN BỘ NHỚ TRONG CÁC ỨNG DỤNG TRUYỀN THÔNG ĐIỆP ĐƠN PHƯƠNG 22
CHƯƠNG 4 ĐÁNH GIÁ 25
4.1 MÔI TRƯỜNG THỰC NGHIỆM 25
4.2 PHƯƠNG PHÁP ĐÁNH GIÁ 25
4.3 KẾT QUẢ THỰC NGHIỆM 26
4.3.1 ĐỘ CHÍNH XÁC 26
4.3.2 DUNG LƯỢNG TẬP TIN LƯU VẾT 27
4.3.3 THỜI GIAN THỰC THI 28
4.3.4 ĐỘ TIÊU HAO BỘ NHỚ 29
4.3.5 KHẢ NĂNG MỞ RỘNG 30
CHƯƠNG 5 TỔNG KẾT VÀ HƯỚNG PHÁT TRIỂN 32
5.1 TỔNG KẾT 32
5.2 HƯỚNG PHÁT TRIỂN 32
TÀI LIỆU THAM KHẢO 33
DANH SÁCH CÔNG BỐ KHOA HỌC CỦA HỌC VIÊN 35
Trang 10DANH MỤC TỪ VIẾT TẮT
3 RDMA Remote Direct Memory Access
4 MPICH Message Passing Interface over CHameleon
5 ADLB Asynchronous Dynamic Load Balancing
6 GFMC Green’s Function Monte Carlo
7 PMPI Profiling Message Passing Interface
10 GMP the GNU Multiple Precision Arithmetic Library
Trang 11DANH MỤC BẢNG
Bảng 1: Ma trận tương thích giữa các tác vụ truy xuất bộ nhớ BOTH chỉ ra cả các tác vụ trùng lấp bộ nhớ và không trùng lấp được cho phép NON-OV chỉ ra chỉ tác vụ không trùng lấp với nhau được được cho phép ERROR chỉ ra các tác vụ truy xuất bộ nhớ gây ra lỗi [11] 9 Bảng 2: Độ chính xác của MC-CChecker 26
Trang 12DANH MỤC HÌNH
Hình 1: Bên gửi gọi 𝑀𝑃𝐼_𝑆𝑒𝑛𝑑 nhưng phải đợi bên nhận gọi 𝑀𝑃𝐼_𝑅𝑒𝑐𝑣 trước khi
dữ liệu có thể được gửi đi 2
Hình 2: Lỗi nhất quán bộ nhớ [11] 4
Hình 3: Profiling MPI_Put trong giải thuật bộ nhớ phụ [12] 7
Hình 4: Thiết kế của MC-Checker [11] 7
Hình 5: Các sự kiện cần được lưu lại thông tin trong một chương trình MPI sử dụng cơ chế giao tiếp một phía [11] 9
Hình 6: Đồ thị DAG được xây dựng từ thông tin được lưu trữ trong tập tin lưu vết [11] 9
Hình 7: Các lỗi nhất quán bộ nhớ [13] 11
Hình 8: Đoạn chương trình sau khi được chỉnh sửa bởi Nasty-MPI [13] 11
Hình 9: Lỗi nhất quán bộ nhớ trong một giai đoạn [11] 16
Hình 10: Lỗi nhất quán bộ nhớ giữa các quá trình [11] 16
Hình 11: Hoạt động của EVC 𝑡𝑖 ở quá trình 𝑃𝑖 [29] 18
Hình 12: fatalBug với các sự kiện được gán nhãn thời gian 22
Hình 13: Gán nhán thời gian các sự kiện trong MC-CChecker 24
Hình 14: Dung lượng tập tin lưu vết sinh ra từ BT-broadcast 28
Hình 15: Dung lượng tập tin lưu vết sinh ra từ lockopts 28
Hình 16: Thời gian thực thi của BT-broadcast với MC-CChecker 29
Hình 17: Thời gian thực thi của lockopts với MC-CChecker 29
Hình 18: Độ tiêu hao bộ nhớ khi chạy BT-broadcast với MC-CChecker 30
Hình 19: Độ tiêu hao bộ nhớ khi chạy lockopts với MC-CChecker 30
Hình 20: Khả năng mở rộng của MC-CChecker về thời gian thực thi khi chạy lockopts 31
Hình 21: Khả năng mở rộng của MC-CChecker về độ tiêu hao bộ nhớ khi chạy lockopts 31
Trang 13CHƯƠNG 1 TỔNG QUAN
Chương mở đầu tập trung vào việc giới thiệu tình hình nghiên cứu thuộc lĩnh vực đề tài Bên cạnh đó, lý do, mục tiêu, đối tượng và phạm vi nghiên cứu cũng như phương pháp nghiên cứu và hướng tiếp cận cũng được nêu rõ Phần cuối trình bày cấu trúc luận văn để người đọc có thể bao quát được nội dung của đề tài thực hiện
1.1 GIỚI THIỆU ĐỀ TÀI
1.1.1 CƠ SỞ HÌNH THÀNH ĐỀ TÀI
Ngày nay với sự phát triển nhanh chóng của các lĩnh vực khoa học, kỹ thuật và kinh
tế thì nhu cầu tính toán cũng ngày càng trở nên đa dạng và phong phú, đòi hỏi tốc độ tính toán nhanh với lượng dữ liệu xử lý lớn Các máy tính cá nhân không còn có thể đáp ứng nổi nhu cầu tính toán cho các bài toán dữ liệu lớn nữa, do đó để đáp ứng được nhu cầu tính toán ngày càng cao này thì hàng loạt các siêu máy tính ra đời và đưa đến việc hình thành của một lĩnh vực khoa học, đó chính là lĩnh vực tính toán hiệu năng cao Qua hơn 50 năm phát triển, lĩnh vực tính toán hiệu năng cao đã có được những bước tiến vượt bậc, tốc độ của các siêu máy tính ngày càng được nâng cao Tính đến thời điểm tháng 11/2017, siêu máy tính có tốc độ tính toán nhanh nhất thế giới là siêu máy tính Sunway TaihuLight với tốc độ xấp xỉ 93 petaFLOPS [1] Với tốc độ phát triển không ngừng của lĩnh vực tính toán hiệu năng cao thì trong tương lai gần sẽ xuất hiện các siêu máy tính có thể đạt đến tốc độ exaFLOPS Khi các siêu máy tính đạt đến tốc độ này xuất hiện thì đồng nghĩa với việc các phần mềm, các ứng dụng tính toán khoa học… trước đây (trên các hệ thống petaFLOPS) thường không thể đạt được hiệu suất tốt nhất như khi chạy trên các hệ thống máy tính exaFLOPS nữa Do đó, để đón đầu xu thế tính toán exascale (exascale computing) [2, 3], các nhóm nghiên cứu trên thế giới đã bắt đầu tiến hành nhiều nghiên cứu về các giải thuật, phần mềm, mô hình lập trình, mới để có thể hoạt động hiệu quả trên các siêu máy tính exaFLOPS
Hiện nay, MPI (mô hình giao tiếp truyền thông điệp) [4] là một đặc tả giao diện thư viện truyền thông điệp được dùng phổ biến trong các ứng dụng tính toán khoa học chạy trên các siêu máy tính hoặc các hệ thống máy tính hiệu năng cao Các chương trình hoạt động dựa trên mô hình truyền thông điệp trước đây chủ yếu sử dụng hai cơ chế lập trình giao tiếp truyền thông điệp là giao tiếp điểm với điểm (point-to-point)
và giao tiếp nhóm (collective) Cả hai cơ chế lập trình này đều có đặc điểm chung là cả bên gửi và bên nhận đều phải tham gia vào quá trình giao tiếp trực tiếp và yêu cầu cần phải có sự đồng bộ từ hai bên cho nên chúng được gọi là giao tiếp song phương
Trang 14(two-sided communication) Trong hai cơ chế trên, bộ nhớ là dành riêng cho mỗi quá trình (process) Mỗi khi bên gửi gọi hàm 𝑀𝑃𝐼_𝑆𝑒𝑛𝑑 và bên nhận gọi hàm 𝑀𝑃𝐼_𝑅𝑒𝑐𝑣 thì dữ liệu trong bộ nhớ (memory) của bên gửi sẽ được sao chép đến bộ đệm (buffer) rồi sau đó gửi ra mạng rồi đến bộ nhớ của bên nhận Hạn chế của chúng là bên gửi phải chờ bên nhận sẵn sàng nhận dữ liệu trước khi nó có thể gửi dữ liệu đi Điều này dẫn đến việc dữ liệu được truyền có thể phải bị trì hoãn gây ra việc giảm hiệu suất chương trình Hình 1 minh họa cho tình huống này
Để giải quyết hạn chế này, mô hình giao tiếp truyền thông điệp đã cung cấp một cơ
chế giao tiếp khác là RMA [5, 6], hay còn được gọi là giao tiếp đơn phương hay một
phía (one-sided communication) bởi vì yêu cầu chỉ một quá trình duy nhất truyền dữ liệu Bên cạnh đó, cơ chế giao tiếp này ngày càng được sử dụng phổ biến trong nhiều ứng dụng hơn [7-10] bởi vì nó cho phép người lập trình tận dụng được khả năng của
hạ tầng RDMA Không giống như cơ chế giao tiếp truyền thông điệp song phương,
cơ chế giao tiếp đơn phương phân tách giữa việc truyền dữ liệu với đồng bộ nhằm tăng khả năng truyền dữ liệu đồng thời cũng như khả năng mở rộng (scalability) cho ứng dụng Hơn thế nữa, giao tiếp đơn phương còn làm cho hiệu suất chương trình cao hơn bằng cách xóa bỏ việc so trùng thông điệp và điều phối bộ nhớ đệm ở bên nhận
mà những cái này chỉ xảy ra trong cơ chế giao tiếp song phương Do đó, giao tiếp đơn phương được kì vọng là cơ chế giao tiếp truyền thông điệp hiệu quả phù hợp với các hệ thống siêu máy tính exaFLOPs xuất hiện trong tương lai gần
Hình 1: Bên gửi gọi 𝑀𝑃𝐼_𝑆𝑒𝑛𝑑 nhưng phải đợi bên nhận gọi 𝑀𝑃𝐼_𝑅𝑒𝑐𝑣 trước khi
dữ liệu có thể được gửi đi Khả năng phân tách giữa truyền và đồng bộ dữ liệu là một điểm mạnh của cơ chế giao tiếp truyền thông điệp đơn phương song nó cũng đem lại nhiều thách thức cho
Trang 15người lập trình Người lập trình vừa phải điều phối một mô hình bộ nhớ phức tạp vừa phải sắp xếp các tác vụ đồng bộ (synchronization call) thích hợp để duy trì tính nhất quán dữ liệu của chương trình trong khi các tác vụ truy xuất dữ liệu (communication call) có tính bất đồng bộ và non-blocking Chính sự phức tạp này đã gây ra nhiều lỗi đồng bộ trong các ứng dụng tính toán khoa học Lỗi nhất quán bộ nhớ (memory
consistency error) [11] hay còn gọi là lỗi tương tranh (race condition) [12] hoặc còn gọi là lỗi đồng bộ (synchronization error) [13, 14] là một trong các lỗi phổ biến được
gây ra trong cơ chế giao tiếp đơn phương Để thuận tiện cho người đọc, trong tài liệu này sẽ thống nhất gọi là lỗi nhất quán bộ nhớ Lỗi này đã được tìm thấy trong một số
ứng dụng thật: (1) emulate [11] – một chương trình mô phỏng bộ nhớ chia sẻ phân
bố, (2) BT-broadcast [15] – một giải thuật phát tán cây nhị phân sử dụng cơ chế giao tiếp một phía, (3) lockopts [16] – một trường hợp kiểm thử RMA trong gói thư viện MPICH
Hình 2 đưa ra một số ví dụ phổ biến về lỗi nhất quán bộ nhớ Hình 2a cho thấy lỗi nhất quán bộ nhớ xảy ra trên cùng một giai đoạn (epoch) 𝑀𝑃𝐼_𝑃𝑢𝑡 truyền dữ liệu trong 𝑏𝑢𝑓 từ quá trình 𝑃0 đến 𝑃1 Sau khi thực thi hàm 𝑀𝑃𝐼_𝑃𝑢𝑡, dữ liệu trong 𝑏𝑢𝑓 có thể đã được gửi đi hoàn toàn hoặc cũng có thể là chưa do hàm 𝑀𝑃𝐼_𝑃𝑢𝑡 có tính chất non-blocking Do đó, rất có thể dữ liệu trong 𝑏𝑢𝑓 sẽ bị xung đột bởi tác vụ cục bộ store (lệnh gán) ngay sau đó Các lỗi như thế này là rất phổ biến trong các ứng dụng sử dụng cơ chế giao tiếp đơn phương Chẳng hạn như trong một phiên bản thư viện ADLB [17] được sử dụng trong ứng dụng vật lý nguyên tử GFMC [18], người lập trình đã dùng tác vụ 𝑀𝑃𝐼_𝑃𝑢𝑡 để truyền dữ liệu từ một biến cục bộ trong một hàm và hàm này trả kết quả về là giá trị của biến cục bộ đó mà không đợi 𝑀𝑃𝐼_𝑃𝑢𝑡 hoàn thành Điều này cũng gây ra lỗi nhất quán bộ nhớ tương tự như trong hình 2a Hình 2b chỉ ra một ví dụ khác về lỗi nhất quán bộ nhớ giữa các quá trình khi dùng các hàm đồng bộ chủ động Các hàm 𝑀𝑃𝐼_𝑃𝑢𝑡 trong các quá trình 𝑃0 và 𝑃2 xung đột với nhau bởi vì chúng rất có thể truy xuất đồng thời vùng nhớ chia sẻ 𝑋 trong 𝑃1 và điều này có thể sẽ gây ra kết quả không mong đợi cho chương trình Hình 2c chỉ ra một ví dụ về lỗi nhất quán bộ nhớ tương tự như trong hình 2b khi dùng các hàm đồng bộ thụ động Hình 2d phác họa một ví dụ khác về lỗi nhất quán bộ nhớ trong tình huống mà hàm 𝑀𝑃𝐼_𝑃𝑢𝑡 xảy ra ở bên gửi xung đột với tác vụ store ở bên nhận bởi
vì chúng sẽ ghi dữ liệu lên cùng một vùng nhớ
Trang 16Hình 2: Lỗi nhất quán bộ nhớ [11]
Để chạy một ứng dụng tính toán khoa học, các nhà khoa học có thể chạy xong ứng dụng mất vài ngày, thậm chí lên đến hàng tháng Tuy nhiên, thời gian chạy ứng dụng còn có thể kéo dài hơn gấp nhiều lần nếu nó có chứa các lỗi nhất quán bộ nhớ do phải chạy đi chạy lại chương trình nhiều lần để tìm lỗi Hơn thế nữa, lỗi nhất quán bộ nhớ
Trang 17là một lỗi ngữ nghĩa rất khó có thể phát hiện ra bằng kiến thức thông thường nên khi gặp lỗi này trong chương trình, người lập trình rất khó có khả năng mường tượng điều
gì đang diễn ra Do đó, việc phát hiện các lỗi nhất quán bộ nhớ là một nhu cầu thiết yếu xuất phát từ thực tiễn nhằm cải thiện độ tin cậy cũng như nâng cao hiệu suất của chương trình Đồng thời, còn giúp người lập trình có thể tiết kiệm được thời gian chạy chương trình
1.1.2 Ý NGHĨA CỦA ĐỀ TÀI
Tóm lại, vấn đề được nêu ra có ý nghĩa về mặt khoa học và thực tiễn như sau:
• Ý nghĩa thực tiễn: Việc phát hiện các lỗi nhất quán bộ nhớ có thể được triển khai trên các chương trình song song sử dụng cơ chế truyền thông điệp đơn phương thực thi trên hệ thống máy tính cụm hiện có tại trường Đại Học Bách Khoa Thành Phố Hồ Chí Minh nhằm cải thiện độ tin cậy cũng như nâng cao hiệu suất của chương trình
• Ý nghĩa khoa học: vấn đề nghiên cứu của đề tài có một số ý nghĩa quan trọng sau đây:
o Giải quyết lỗi nhất quán bộ nhớ – một lỗi trong cơ chế giao tiếp đơn phương mà hầu như chưa có một giải thuật nào thực sự giải quyết vấn
đề này một cách triệt để
o Cải thiện độ tin cậy cũng như nâng cao hiệu suất chương trình
o Giúp người lập trình phát hiện lỗi dễ dàng hơn
1.1.3 CÁC CÔNG TRÌNH NGHIÊN CỨU LIÊN QUAN
Hiện nay trên thế giới có một số công bố khoa học liên quan trực tiếp đến việc giải quyết các lỗi nhất quán bộ nhớ, tiêu biểu trong số đó là:
1 Giải thuật “bộ nhớ phụ” (mirror window)
Trong công trình này [12], Mi-Young Park và Sang-Hwa Chung đã xem xét các lỗi nhất quán bộ nhớ giữa các tác vụ truyền dữ liệu trong cơ chế giao tiếp đơn phương bên trong một nhóm hàm đồng bộ và cả giữa các nhóm hàm đồng bộ với nhau Tuy nhiên, nhóm tác giả vẫn chưa xem xét mối quan hệ sự kiện giữa các tác vụ cục bộ (load/store) với các tác vụ truyền dữ liệu Giải thuật của nhóm tác giả chủ yếu sử dụng bộ nhớ phụ để kiểm tra xem bộ nhớ chính (window memory) có thể truy xuất
an toàn hay không Bộ nhớ phụ này được tạo ra mỗi khi chương trình tạo ra bộ nhớ chính Sau đó, chương trình sẽ khởi tạo giá trị cho tất cả các ô nhớ của bộ nhớ phụ với một hằng là “no_op” “no_op” có nghĩa là không có bất cứ tác vụ nào xảy ra ở bộ nhớ chính Kích thước của bộ nhớ phụ tỉ lệ thuận với kích thước của bộ nhớ chính và mỗi ô nhớ của bộ nhớ phụ sẽ tương ứng với mỗi ô nhớ trên bộ nhớ chính, chỉ khác ở
Trang 18chỗ là bộ nhớ chính lưu dữ liệu chia sẻ giữa các quá trình trong khi ô nhớ của bộ nhớ phụ dùng để kiểm tra trạng thái của ô nhớ chính tương ứng Vì vậy, mỗi khi một ô nhớ của bộ nhớ chính được truy xuất bởi bất kì hàm truyền dữ liệu, mỗi ô nhớ của bộ nhớ phụ cũng sẽ được gán cho một hằng tương ứng Cụ thể, nếu có một tác vụ 𝑀𝑃𝐼_𝐺𝑒𝑡 thực thi trên một ô nhớ của bộ nhớ chính thì ô nhớ tương ứng trên bộ nhớ phụ sẽ được gán cho hằng “read” để chỉ ra rằng ô nhớ trên bộ nhớ chính đang được đọc Trong trường hợp tác vụ 𝑀𝑃𝐼_𝑃𝑢𝑡 (cả 𝑀𝑃𝐼_𝐴𝑐𝑐𝑢𝑚𝑢𝑙𝑎𝑡𝑒) thực thi trên một ô nhớ của bộ nhớ chính, ô nhớ tương ứng trên bộ nhớ phụ sẽ được gán cho hằng “write” để thể hiện rằng ô nhớ chính đang được ghi Trước khi 𝑀𝑃𝐼_𝐺𝑒𝑡 hoặc 𝑀𝑃𝐼_𝑃𝑢𝑡 gán hằng trên các ô nhớ trên bộ nhớ phụ thì nó sẽ kiểm tra bộ nhớ phụ trước để xác định xem lỗi nhất quán bộ nhớ có xảy ra hay không Khi thực thi 𝑀𝑃𝐼_𝐺𝑒𝑡 mà ô nhớ tương ứng trong bộ nhớ phụ đã được gán hằng “write” trước đó thì phát hiện một lỗi nhất quán bộ nhớ Trong trường hợp thực thi 𝑀𝑃𝐼_𝑃𝑢𝑡 mà ô nhớ tương ứng trong bộ nhớ phụ đã được gán hằng “write” hoặc “read” thì tồn tại một lỗi nhất quán bộ nhớ Về phần thực nghiệm, tác giả đã kiểm thử kỹ thuật truy lỗi với hai ứng dụng nhưng chỉ thử về độ chính xác Tóm lại, công trình của nhóm tác giả có một số ưu và nhược điểm sau đây:
• Nhược điểm:
o Về mặt hiện thực, đứng ở góc nhìn một quá trình, muốn kiểm tra xem trạng thái của một ô nhớ thuộc quản lý của quá trình khác, tác giả đã sử dụng cơ chế PMPI [4] để thêm hàm 𝑃𝑀𝑃𝐼_𝐺𝑒𝑡 trong hàm 𝑀𝑃𝐼_𝑃𝑢𝑡 để kiểm tra trạng thái ô nhớ phụ nằm trên một quá trình khác Đây là hạn chế lớn nhất trong công trình của nhóm tác giả vì nó trái ngược với thiết
kế của cơ chế giao tiếp truyền thông điệp một phía do làm giảm hiệu suất chương trình Hình 3 thể hiện rõ điều này
o Nhóm tác giả chưa xem xét lỗi nhất quán bộ nhớ xảy ra giữa các hàm truyền dữ liệu với các tác vụ cục bộ load/store
Trang 19o Nhóm tác giả chỉ làm các thực nghiệm để kiểm chứng độ chính xác của giải thuật mà chưa làm các thực nghiệm để kiểm tra độ tiêu tốn bộ nhớ chương trình (memory overhead) và độ làm chậm chương trình (slowdown) khi số lượng quá trình tăng lên Hai tiêu chí này được dùng để xác định khả năng mở rộng của chương trình
Hình 3: Profiling MPI_Put trong giải thuật bộ nhớ phụ [12]
2 MC-Checker
Trong công cụ truy lỗi MC-Checker [11], Zhezhe Chen và các cộng sự đã giới hạn bài toán bằng cách đặt các hàm 𝑀𝑃𝐼_𝐵𝑎𝑟𝑟𝑖𝑒𝑟 giữa các nhóm hàm đồng bộ với nhau Chính điều này đã tạo ra quan hệ “happens-before” [19] giữa các nhóm hàm đồng bộ
Do đó, các lỗi nhất quán bộ nhớ chỉ xảy ra bên trong một nhóm hàm đồng bộ Phương pháp phát hiện lỗi nhất quán bộ nhớ của nhóm tác giả tiếp cận dựa trên tư tưởng chủ yếu là dùng tập tin lưu vết (trace file) và sử dụng các luật đề ra để phát hiện, cụ thể, nó sẽ thực hiện ba bước MC-Checker bao gồm 3 thành phần quan trọng: ST-Analyzer, Profiler và DN-Analyzer Thiết kế của MC-Checker được thể hiện trong Hình 4
Hình 4: Thiết kế của MC-Checker [11]
Trang 20Đầu tiên, MC-Checker sẽ chạy ứng dụng khoa học cần truy lỗi Trong quá trình chạy, nó sẽ thu thập hết tất cả các sự kiện liên quan trên tất cả các quá trình và lưu xuống các tập tin lưu vết Sau đó, nó sẽ đọc thông tin từ tập tin lưu vết lên để xây dựng DAG (đồ thị có hướng không có chu trình) Hình 5 minh họa một ví dụ thực thi chương trình truyền thông điệp với ba quá trình và các sự kiện mà MC-Checker cần thu thập thông tin trong khi Hình 6 thể hiện DAG được xây dựng từ tập tin lưu vết DAG này có các đỉnh là các sự kiện được thu thập và có các cạnh là quan hệ happens-before giữa các sự kiện Cuối cùng, MC-Checker sẽ xác định các vùng song song và dựa vào các quy luật như trong Bảng 1 để xác định các sự kiện gây ra các lỗi nhất quán bộ nhớ trong chương trình Về thực nghiệm, nhóm tác giả đã sử dụng năm ứng dụng nổi tiếng để kiểm tra độ chính xác của công cụ truy lỗi Trong số đó có ba ứng dụng chứa các lỗi nhất quán bộ nhớ thực, hai ứng dụng còn lại, nhóm tác giả sử dụng phương pháp tiêm lỗi để tạo ra lỗi trong chương trình Bên cạnh đó, nhóm tác giả cũng sử dụng năm ứng dụng nổi tiếng khác để đánh giá độ làm chậm chương trình Kết quả thực nghiệm cho thấy, MC-Checker có khả năng phát hiện lỗi nhất quán bộ nhớ với độ chính xác là 100% và độ làm chậm chương trình dao động trong khoảng 24.6% đến 71.1% Tóm lại, công trình của nhóm tác giả có một số ưu và nhược điểm sau đây:
• Ưu điểm:
o Đã phát hiện ra thêm ví dụ về lỗi nhất quán bộ nhớ mới là lỗi xung đột giữa các tác vụ truyền dữ liệu với các tác vụ truy xuất bộ nhớ cục bộ
o Phát hiện chính xác 100% lỗi nhất quán bộ nhớ
o Có khả năng cao trong việc áp dụng vào thực tiễn
• Nhược điểm:
o Nhóm chỉ xem xét lỗi nhất quán bộ nhớ trong phạm vi một nhóm hàm đồng bộ mà chưa xem xét lỗi nhất quán giữa các nhóm hàm đồng bộ với nhau Giả thuyết của nhóm là phải có hàm 𝑀𝑃𝐼_𝐵𝑎𝑟𝑟𝑖𝑒𝑟 bao bọc nhóm hàm đồng bộ 𝑀𝑃𝐼_𝑊𝑖𝑛_𝑙𝑜𝑐𝑘/𝑢𝑛𝑙𝑜𝑐𝑘 mà điều này sẽ làm giảm hiệu suất chương trình, không thích hợp khi viết các ứng dụng tính toán khoa học sử dụng cơ chế giao tiếp đơn phương
o Nhóm tác giả chỉ làm thực nghiệm để kiểm chứng tính chính xác và độ làm chậm chương trình của công cụ truy lỗi mà chưa làm các thực nghiệm về độ tiêu tốn bộ nhớ chương trình Do đó, chỉ có thể kết luận
là giải thuật này có khả năng mở rộng được về khía cạnh thời gian, chưa thể kết luận được là giải thuật này có khả năng mở rộng được hay không khi số lượng quá trình tăng lên
Trang 21Hình 5: Các sự kiện cần được lưu lại thông tin trong một chương trình MPI sử dụng
cơ chế giao tiếp một phía [11]
Hình 6: Đồ thị DAG được xây dựng từ thông tin được lưu trữ trong tập tin lưu vết
[11]
Bảng 1: Ma trận tương thích giữa các tác vụ truy xuất bộ nhớ BOTH chỉ ra cả các tác vụ trùng lấp bộ nhớ và không trùng lấp được cho phép NON-OV chỉ ra chỉ tác
Trang 22vụ không trùng lấp với nhau được được cho phép ERROR chỉ ra các tác vụ truy
xuất bộ nhớ gây ra lỗi [11]
Put NON-OV ERROR NON-OV NON-OV NON-OV
3 Nasty-MPI
Nasty-MPI [13, 14] là một công cụ truy lỗi khác được đề xuất bởi Roger Kowalewski
và Karl Fürlinger cũng xem xét các lỗi nhất quán bộ nhớ trong cơ chế giao tiếp truyền thông điệp đơn phương Bài toán của nhóm tác giả đặt ra là xem xét các lỗi xuất hiện trong nhóm hàm đồng bộ 𝑀𝑃𝐼_𝑊𝑖𝑛_𝑙𝑜𝑐𝑘/𝑢𝑛𝑙𝑜𝑐𝑘 Hướng giải quyết của nhóm tác giả cũng tương tự như công cụ MC-Checker nhưng hiện thực theo kiểu on-the-fly thay vì offline như MC-Checker, tuy nhiên, nhóm tác giả tập trung hơn vào các giải thuật sửa lỗi nhất quán bộ nhớ xảy ra khi phát hiện sự xuất hiện của chúng trong chương trình Cụ thể, nhóm tác giả đã đưa ra một số tình huống như trong Hình 7 và cách mà Nasty-MPI sửa lỗi như trong Hình 8 Hình 7a thể hiện lỗi nhất quán bộ nhớ
do hai tác vụ 𝑀𝑃𝐼_𝐺𝑒𝑡 và tác vụ cục bộ load/store cùng truy xuất chung vùng nhớ 𝑏𝑢𝑓 đồng thời Do đó, để triệt tiêu sự diễn ra đồng thời ở hai tác vụ này, Nasty-MPI
đã thay đổi thứ tự thực hiện chương trình như trong Hình 8a Hình 7b phác họa một lỗi nhất quán bộ nhớ khác giữa hai tác vụ 𝑀𝑃𝐼_𝑃𝑢𝑡 và 𝑀𝑃𝐼_𝐺𝑒𝑡 khi truy xuất cùng vùng nhớ 𝑥 nằm ở một quá trình khác Để giải quyết tình huống này, Nasty-MPI đã chèn thêm hàm 𝑀𝑃𝐼_𝑊𝑖𝑛_𝑓𝑙𝑢𝑠ℎ để đảm bảo 𝑀𝑃𝐼_𝑃𝑢𝑡 luôn truy xuất tới 𝑥 và hoàn tất trước khi 𝑀𝑃𝐼_𝐺𝑒𝑡 thực thi, Hình 8b minh họa cho giải pháp này Một lỗi nhất quán bộ nhớ khác xuất hiện trong Hình 7c, 𝑀𝑃𝐼_𝑃𝑢t sao chép một mảng 100 phần tử đến một quá trình khác nên rất có khả năng cũng có một tác vụ truy xuất cùng bộ nhớ với tác vụ 𝑀𝑃𝐼_𝑃𝑢𝑡 trên Để giải quyết vấn đề trên, Nasty-MPI đã tách hàm 𝑀𝑃𝐼_𝑃𝑢𝑡 sao chép 100 phần tử thành 100 hàm 𝑀𝑃𝐼_𝑃𝑢𝑡 nhằm giảm xác suất đụng độ như trong Hình 8c Nhóm tác giả đã làm thực nghiệm để kiểm chứng tính đúng đắn của công cụ trên bốn ứng dụng Kết quả cho thấy Nasty-MPI hoạt động chính xác như mong đợi Tóm lại, công trình của nhóm tác giả có một số ưu và nhược điểm sau đây:
• Ưu điểm:
o Là giải pháp đầu tiên nhằm giúp sửa lỗi nhất quán bộ nhớ tự động
Trang 23o Là một giải thuật on-the-fly
• Nhược điểm:
o Việc sửa lỗi nhất quán bộ nhớ của Nasty-MPI là tái tổ chức lại các lệnh gây ra lỗi Tuy nhiên, việc làm này có thể thay đổi ngữ nghĩa của chương trình, nhiều khả năng dẫn đến kết quả của chương trình không còn được như đúng ý đồ ban đầu của người lập trình
o Nhóm tác giả chỉ xem xét mối quan hệ giữa các tác vụ truy xuất bộ nhớ bên trong một nhóm hàm đồng bộ mà chưa xem xét giữa các nhóm hàm đồng bộ khác nhau
o Nhóm tác giả chưa làm các kết quả thực nghiệm về độ tiêu hao bộ nhớ cũng như độ làm chậm chương trình để kiểm tra khả năng mở rộng của công cụ
Hình 7: Các lỗi nhất quán bộ nhớ [13]
Hình 8: Đoạn chương trình sau khi được chỉnh sửa bởi Nasty-MPI [13]
1.2 MỤC TIÊU, GIỚI HẠN VÀ ĐỐI TƯỢNG NGHIÊN CỨU
1.2.1 MỤC TIÊU NGHIÊN CỨU
Để giải quyết vấn đề đã được nêu ra, đề tài đặt ra một số mục tiêu nghiên cứu như sau:
Trang 24• Chỉ ra các tính chất đặc trưng của các sự kiện được dùng trong cơ chế giao tiếp truyền thông điệp đơn phương
• Mô hình hóa quan hệ giữa các sự kiện này dưới dạng các định nghĩa, quy luật, biểu thức toán học, …
• Đề xuất một kỹ thuật dựa trên clock nhằm phát hiện các lỗi nhất quán bộ nhớ trong cơ chế truyền thông điệp đơn phương
Đo đạc kết quả nghiên cứu bằng việc thực nghiệm trên một số ứng dụng nổi tiếng để kiểm chứng tính hiệu quả của kỹ thuật đề xuất dựa trên ba tiêu chí: độ chính xác, độ tiêu tốn bộ nhớ, độ làm chậm và khả năng mở rộng của kỹ thuật
1.2.2 GIỚI HẠN NGHIÊN CỨU
Trong cơ chế giao tiếp truyền thông điệp đơn phương, đề tài chỉ xem xét các sự kiện sau:
• Các hàm giao tiếp đặc trưng: 𝑀𝑃𝐼_𝑃𝑢𝑡, 𝑀𝑃𝐼_𝐺𝑒𝑡, 𝑀𝑃𝐼_𝐴𝑐𝑐𝑢𝑚𝑢𝑙𝑎𝑡𝑒
• Các nhóm hàm đồng bộ đặc trưng: 𝑀𝑃𝐼_𝑊𝑖𝑛_𝑓𝑒𝑛𝑐𝑒, 𝑀𝑃𝐼_𝑊𝑖𝑛_𝑠𝑡𝑎𝑟𝑡/𝑐𝑜𝑚𝑝𝑙𝑒𝑡𝑒/𝑝𝑜𝑠𝑡/𝑤𝑎𝑖𝑡, 𝑀𝑃𝐼_𝑊𝑖𝑛_𝑙𝑜𝑐𝑘/𝑢𝑛𝑙𝑜𝑐𝑘
• 𝑀𝑃𝐼_𝑊𝑖𝑛_𝑠𝑡𝑎𝑟𝑡/𝑐𝑜𝑚𝑝𝑙𝑒𝑡𝑒/𝑝𝑜𝑠𝑡/𝑤𝑎𝑖𝑡 được sử dụng trong ngữ cảnh đồng bộ mạnh (strong synchronization)
• Các tác vụ cục bộ: load/store
• Các hàm đồng bộ trong giao tiếp truyền thông điệp song phương có ảnh hưởng tới đơn phương: 𝑀𝑃𝐼_𝑆𝑒𝑛𝑑/𝑅𝑒𝑐𝑣, 𝑀𝑃𝐼_𝐵𝑎𝑟𝑟𝑖𝑒𝑟
Các hàm khác trong cơ chế giao tiếp truyền thông điệp không được xem xét trong phạm vi đề tài này
1.2.3 ĐỐI TƯỢNG NGHIÊN CỨU
Sự ra đời của các hệ thống tính toán hiệu năng cao đã trở nên phổ biến trên thế giới trong hơn thập kỉ qua Tại trường Đại học Bách Khoa thành phố Hồ Chí Minh, hệ thống máy tính cụm (tạm gọi là hệ thống HPC) cũng đã được triển khai và đi vào hoạt động Với việc đặt mục tiêu ban đầu là các ứng dụng tính toán khoa học, trên nền tảng hệ thống máy tính sẵn có tại trường, đối tượng nghiên cứu mà đề tài quan tâm trong phạm vi nghiên cứu là các ứng dụng song song chạy trên hệ thống HPC này Cụ thể hơn, các chương trình được đề cập đến trong đề tài này là các chương trình truyền thông điệp (message) Trong đó, mỗi chương trình thực thi tạo ra nhiều quá trình Mỗi quá trình chỉ gồm các sự kiện giao tiếp với nhau bằng cách sử dụng cơ chế giao tiếp đơn phương Các sự kiện chính là các hàm hoặc tác vụ được thực thi đã được đề cập đến trong Mục 1.2.2