Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 30 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
30
Dung lượng
204,85 KB
Nội dung
Vào song song Hà nội, 6/2008 Đại học Bách khoa Hà Nội Center of High Performance Computing Hanoi University of Technology {hpcc@mail.hut.edu.vn} Nội dung học Các cách tiếp cận vào song song Vào/ra dùng trỏ riêng biệt Vào/ra dùng khoảng cách Khái niệm Khung nhìn Vào/ra cộng tác Vào/ra dùng trỏ dùng chung Các công nghệ vào/ra song song Vào/ra song song trình nhiều tiến trình chương trình song song truy cập tệp tin chung FILE P0 P1 P2 P(n-1) Các công nghệ lưư trữ: RAID: RAID 0, RAID 1, RAID 5, RAID 10, RAID 53 Distributed File Systems:NFS , SMB, DCE/DFS Parallel File Systems:GPFS, PFS, PVFS Storage Area Networks:CXFS, GFS, Lustre, SANergy Các cách tiếp cận vào song song Vào dùng tác vụ đơn: Tất tiến trình gửi liệu cho rank 0, sau rank ghi liệu tệp tin Cần gom kết phát tán liệu Hiệu giới hạn khả rank Không tận dụng công nghệ lưu trữ song song Các cách tiếp cận vào song song Vào/ra kết hợp Mỗi tiến trình đọc/ghi vào tệp tin riêng Tăng tính song song Hiệu cao Nhiều tệp tin nhỏ, quản lý khó khăn Có chương trình phân chia liệu tập hợp liệu Tại cần dùng vào/ra song song Vào/ra không song song đơn giản, Hiệu thấp (một tiến trình ghi vào tệp tin) Khơng có tương tác chương trình (Mỗi tiến trình tương tác với tệp tin) Vào/ra song song: Hiệu cao Tính khả chuyển Tính thuận tiện Một tệp tin dùng cho chương trình khác (các chương trình ảo hóa, …) Cài đặt vào/ra song song sử dụng MPI Quá trình ghi giống với gửi liệu, trình đọc giống với nhận liệu Bất kỳ hệ thống vào/ra song song chế để: Định nghĩa phép toán cộng tác Định nghĩa liệu không liên tục nhớ tệp tin MPI Communicator Kiểu liệu MPI: liệu dẫn xuất Kiểm tra hồn thành phép tốn khơng ràng buộc Đối tượng request MPI Chuẩn vào/ra MPI Tất định tuyến bắt đầu MPI_File_ open, read, write, seek, close Kí tự khơng đồng “i”: iread etc Kí tự vị trí tuyệt đối “_at”: read_at Kí tự cộng tác “_all”: read_all etc Kí tự cộng tác khơng ràng buộc: “_begin” “_end” Kí tự trỏ tệp tin dùng chung: “_shared” MPI_Type để tạo kiểu liệu dẫn xuất Một số định tuyến vào/ra MPI_File_open(MPI_Comm comm, char *file, int mode, MPI_Info info, MPI_File *fh) (note: mode = MPI_MODE_RDONLY, MPI_MODE_RDWR, MPI_MODE_WRONLY, MPI_MODE_CREATE, MPI_MODE_EXCL, MPI_MODE_DELETE_ON_CLOSE, MPI_MODE_UNIQUE_OPEN, MPI_MODE_SEQUENTIAL, MPI_MODE_APPEND) MPI_File_close(MPI_File *fh) MPI_File_read(MPI_File fh, void *buf, int count, MPI_Datatype type, MPI_Status *status) MPI_File_read_at(MPI_File fh, int offset, void *buf, int count, MPI_Datatype type, MPI_Status *status) MPI_File_seek(MPI_File fh, MPI_Offset offset, in whence); (chú ý: whence = MPI_SEEK_SET, MPI_SEEK_CUR, or MPI_SEEK_END) MPI_File_write(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status) MPI_File_write_at(MPI_File fh, MPI_Offset, void *buf, int count, MPI_Datatype datatype, MPI_Status *status) MPI_File_sync(MPI_File fh); Vào/ra sử dụng trỏ riêng biệt #include #include #include "mpi.h" #define FILESIZE 1000 int main(int argc, char **argv){ int rank, nprocs; MPI_File fh; MPI_Status status; int bufsize, nints; 10 int buf[FILESIZE]; 11 12 13 14 15 16 17 18 19 20 21 } MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); bufsize = FILESIZE/nprocs; nints = bufsize/sizeof(int); MPI_File_open(MPI_COMM_WORLD, "datafile", MPI_MODE_RDONLY, MPI_INFO_NULL, &fh); MPI_File_seek(fh, rank * bufsize, MPI_SEEK_SET); MPI_File_read(fh, buf, nints, MPI_INT, &status); MPI_File_close(&fh); MPI_Finalize(); Ví dụ khung nhìn etype = MPI_INT filetype = số MPI_INT với khoảng trống gồm số MPI_INT Đầu tệp tin displacement TỆP TIN filetype filetype Kết hợp khung nhìn Vào/ra cộng tác MPI Các tiến trình đọc file lệnh đọc riêng rẽ Có thể cải thiện hiệu cách tập trung tất lệnh đọc/ghi vào lệnh đọc/ghi theo nhóm Các yêu cầu nhỏ, đơn lẻ Truy cập công tác Vào/ra cộng tác MPI MPI_File_read_all, MPI_File_read_at_all, MPI_File_write_all, MPI_File_write_at_all _all định tất tiến trình communicator khai báo định tuyến MPI_File_open phải gọi định tuyến vào/ra Mỗi tiến trình truy cập thơng tin – danh sách đối số giống với định tuyến cộng tác Vào/ra cộng tác không ràng buộc MPI Vào/ra cộng tác vào/ra có ràng buộc Định tuyến chưa trả giá trị việc đọc/ghi liệu đệm an tồn Vẫn ràng buộc với tiến trình gọi Vào/ra không ràng buộc MPI_File_iread(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Request *request) MPI_File_iwrite(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Request *request) Giống với truyền thông không ràng buộc Trả đối tượng request thay status Sử dụng MPI_Test MPI_Wait cho q trình hồn thành Vào/ra cộng tác khơng ràng buộc MPI Vào/ra cộng tác không ràng buộc: Khởi tạo đọc/ghi Sử dụng đặc tính vào/ra cộng tác, hoạt động theo kiểu không ràng buộc MPI_File_read_all_begin(MPI_File fh, void *buf, int count, MPI_Datatype datatype) MPI_File_write_all_begin(MPI_File fh, void *buf, int count, MPI_Datatype datatype) Hoàn thành đọc/ghi MPI_File_read_all_end(MPI_File fh, void *buf, MPI_Status *status) MPI_File_write_all_end(MPI_File fh, void *buf, MPI_Status *status) Con trỏ file dùng chung Sử dụng trỏ file dùng chung cho tất tiến trình Tất thao tác đọc ghi dịch trỏ chung đến vị trí phụ thuộc vào kích thước liệu dịch chuyển Tất tiến trình cần dùng chung khung nhìn file cần đọc int MPI_File_read_shared (MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Status *status) Đảm bảo tính quán vào/ra Đảm bảo tính quán khi: Nhiều tiến trình truy cập tệp tin Một hay nhiều tiến trình ghi vào tệp tin MPI đảm bảo tính qn tốt tất tiến trình communicator hàm MPI_File_open truy cập tệp tin, khơng tính qn Người dùng tạo tính qn MPI khơng điều khiển Ví dụ Mở tệp tin với MPI_COMM_WORLD Mỗi tiến trình ghi vào vùng riêng tệp tin đọc lại liệu ghi Tiến trình MPI_File_open(MPI_COMM_WORLD,…) MPI_File_write_at(off=0,cnt=100) MPI_File_read_at(off=0,cnt=100) Tiến trình MPI_File_open(MPI_COMM_WORLD,…) MPI_File_write_at(off=100,cnt=100) MPI_File_read_at(off=100,cnt=100) • MPI đảm bảo liệu đọc xác Ví dụ2 Giống ví dụ 1, tiến trình đọc liệu ghi tiến trình khác MPI khơng đảm bảo liệu tự động đọc xác Tiến trình /* incorrect program */ MPI_File_open(MPI_COMM_WORLD,…) MPI_File_write_at(off=0,cnt=100) MPI_Barrier MPI_File_read_at(off=100,cnt=100) Tiến trình /* incorrect program */ MPI_File_open(MPI_COMM_WORLD,…) MPI_File_write_at(off=100,cnt=100) MPI_Barrier MPI_File_read_at(off=0,cnt=100) • Q trình đọc khơng đảm bảo lấy xác liệu ghi tiến trình khác! Cải thiện ví dụ Người dùng phải tiến hành thêm số bước để đảm bảo tính đắn Có cách: Thiết lập chế độ atomicity Đóng tệp tin, sau mở lại tệp tin Đảm bảo khơng tồn chuỗi ghi xảy lúc với chuỗi đọc/ghi khác tiến trình khác Chuỗi: tập phép tốn hàm open, close, file_sync Chuỗi ghi: chuỗi gồm toàn phép tốn ghi Ví du – giải pháp Thiết lập chế độ atomicty Tiến trình MPI_File_open(MPI_COMM_WORLD,…) MPI_File_set_atomicity(fh1,1) MPI_File_write_at(off=0,cnt=100) MPI_Barrier MPI_File_read_at(off=100,cnt=100) Tiến trình MPI_File_open(MPI_COMM_WORLD,…) MPI_File_set_atomicity(fh2,1) MPI_File_write_at(off=100,cnt=100) MPI_Barrier MPI_File_read_at(off=0,cnt=100) MPI_File_set_atomicity thiết lập tính quán cho phép toán truy cập liệu MPI_File_set_atomicity định tuyến cộng tác tiến trình communicator phải gọi với tham số Ví du – giải pháp Đóng tệp tin, sau mở lại tệp tin Tiến trình MPI_File_open(MPI_COMM_WORLD,…) MPI_File_write_at(off=0,cnt=100) MPI_File_close MPI_Barrier MPI_File_open(MPI_COMM_WORLD,…) MPI_File_read_at(off=100,cnt=100) Tiến trình MPI_File_open(MPI_COMM_WORLD,…) MPI_File_write_at(off=100,cnt=100) MPI_File_close MPI_Barrier MPI_File_open(MPI_COMM_WORLD,…) MPI_File_read_at(off=0,cnt=100) Ví du – giải pháp Tiến trình Tiến trình MPI_File_open(MPI_COMM_WORLD,…) MPI_File_write_at(off=0,cnt=100) MPI_File_sync MPI_File_open(MPI_COMM_WORLD,…) MPI_Barrier MPI_Barrier MPI_File_sync /*collective*/ MPI_File_sync /*collective*/ MPI_File_sync MPI_File_write_at(off=100,cnt=100) MPI_File_sync MPI_Barrier MPI_Barrier MPI_File_sync MPI_File_read_at(off=100,cnt=100) MPI_File_close MPI_File_sync /*collective*/ MPI_File_read_at(off=0,cnt=100) MPI_File_close MPI_File_sync /*collective*/ Dùng công thức sync-barrier-sync Kết luận Cách tiếp cận vào song song Khái niệm liên quan vào song song Các kiểu vào song song MPI Vấn đề đảm bảo tính quán liệu ... tiếp cận vào song song Vào/ ra dùng trỏ riêng biệt Vào/ ra dùng khoảng cách Khái niệm Khung nhìn Vào/ ra cộng tác Vào/ ra dùng trỏ dùng chung Các công nghệ vào/ ra song song Vào/ ra song song trình... dùng vào/ ra song song Vào/ ra không song song đơn giản, Hiệu thấp (một tiến trình ghi vào tệp tin) Khơng có tương tác chương trình (Mỗi tiến trình tương tác với tệp tin) Vào/ ra song song:... Hiệu giới hạn khả rank Không tận dụng công nghệ lưu trữ song song Các cách tiếp cận vào song song Vào/ ra kết hợp Mỗi tiến trình đọc/ghi vào tệp tin riêng Tăng tính song song Hiệu cao