Bài giảng Tính toán lưới - Bài 7: Vào ra song song - Nguyễn Hữu Đức

Vào ra song song  
Center of High Performance Computing  
Hanoi University of Technology  
Hà ni, 6/2008  
Đi hc Bách khoa Hà Ni  
{hpcc@mail.hut.edu.vn}  
Ni dung bài hc  
Các cách tiếp cn vào ra song song  
Vào/ra dùng con trriêng bit  
Vào/ra dùng khong cách  
Khái nim Khung nhìn  
Vào/ra cng tác  
Vào/ra dùng con trdùng chung  
Các công nghvào/ra song song  
Vào/ra song song là quá trình nhiều tiến trình của  
chương trình song song cùng truy cập một tệp tin  
chung  
FILE  
P(n-1)  
P0  
P1  
P2  
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 cn vào ra song song  
Vào ra dùng 1 tác vụ đơn:  
Tất cả tiến trình gửi dữ liệu cho rank 0, sau đó rank 0 ghi dữ liệu ra  
tệp tin  
Cần gom kết và phát tán dữ liệu  
Hiệu năng giới hạn bởi khả năng của rank 0  
Không tận dụng công nghệ lưu trữ song song  
Các cách tiếp cn vào ra song song  
Vào/ra kết hợp  
Mỗi tiến trình đọc/ghi vào một tệp tin riêng  
Tăng tính song song  
Hiệu năng cao  
Nhiều tệp tin nhỏ, quản lý khó khăn  
Có chương trình phân chia dữ liệu và tập hợp dữ liệu  
Ti sao cn dùng vào/ra song song  
Vào/ra không song song đơn giản, nhưng  
Hiệu năng thấp (một tiến trình ghi vào một tệp tin)  
Không có sự tương tác giữa các chương trình (Mỗi tiến trình  
chỉ tương tác với 1 tệp tin)  
Vào/ra song song:  
Hiệu năng cao  
Tính khả chuyển  
Tính thuận tiện  
Một tệp tin có thể dùng cho các chương trình khác nhau  
(các chương trình ảo hóa, …)  
Cài đt vào/ra song song sdng MPI  
Quá trình ghi giống với gửi dữ liệu, quá trình đọc  
giống với nhận dữ liệu  
Bất kỳ hệ thống vào/ra song song nào cũng cơ chế  
để:  
Định nghĩa các phép toán cộng tác  
MPI Communicator  
Định nghĩa dữ liệu không liên tục trong bộ nhớ và tệp tin  
Kiểu dữ liệu của MPI: dữ liệu cơ bản và dẫn xuất  
Kiểm tra sự hoàn thành của các phép toán không ràng buộc  
Đối tượng request trong MPI  
Chun vào/ra trong MPI  
Tất cả các định tuyến bắt đầu bằng MPI_File_  
open, read, write, seek, close  
Kí tự không đồng bộ “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ự con trỏ tệp tin dùng chung: “_shared”  
MPI_Type để tạo kiểu dữ liệu dẫn xuất  
Mt sđnh tuyến vào/ra cơ bn  
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 sdng con trriêng bit  
1. #include<stdio.h>  
2. #include<stdlib.h>  
3. #include "mpi.h"  
4. #define FILESIZE 1000  
5. int main(int argc, char **argv){  
6.  
int rank, nprocs;  
MPI_File fh;  
7.  
8.  
MPI_Status status;  
int bufsize, nints;  
int buf[FILESIZE];  
9.  
10.  
11.  
12.  
13.  
MPI_Init(&argc, &argv);  
MPI_Comm_rank(MPI_COMM_WORLD, &rank);  
MPI_Comm_size(MPI_COMM_WORLD, &nprocs);  
14.  
15.  
bufsize = FILESIZE/nprocs;  
nints = bufsize/sizeof(int);  
16.  
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);  
17.  
18.  
19.  
20.  
MPI_Finalize();  
21. }  
Vào ra sdng khong cách  
1. #include<stdio.h>  
2. #include<stdlib.h>  
3. #include "mpi.h"  
4. #define FILESIZE 1000  
5. int main(int argc, char **argv){  
6.  
int rank, nprocs;  
MPI_File fh;  
7.  
8.  
MPI_Status status;  
int bufsize, nints;  
int buf[FILESIZE];  
9.  
10.  
11.  
12.  
13.  
14.  
MPI_Init(&argc, &argv);  
MPI_Comm_rank(MPI_COMM_WORLD, &rank);  
MPI_Comm_size(MPI_COMM_WORLD, &nprocs);  
15.  
16.  
bufsize = FILESIZE/nprocs;  
nints = bufsize/sizeof(int);  
17.  
MPI_File_open(MPI_COMM_WORLD, "datafile", MPI_MODE_RDONLY, MPI_INFO_NULL, &fh);  
18.  
MPI_File_read_at(fh, rank*bufsize, buf, nints, MPI_INT, &status);  
19.  
MPI_File_close(&fh);  
MPI_Finalize();  
20.  
21. }  
Ghi dliu vào tp tin  
Dùng MPI_File_write hoặc MPI_File_write_at  
Dùng MPI_MODE_WRONLYhoặc MPI_MODE_RDWR cho  
tham số flag trong định tuyến MPI_File_open  
Nếu tệp tin chưa tồn tại, cần truyền giá trị  
MPI_MODE_CREATE cho biến flag trong  
MPI_File_open  
Có thể dùng nhiều giá trị cho biến flag, bằng cách sử  
dụng toán từ bitwise-or ‘|’ trong ngôn ngữ C  
Khái nim khung nhìn  
Các tiến trình ghi dữ liệu vào cùng một tệp tin  
Bao gồm các thông tin  
Offset (vị trí từ đầu file): cho biết các thao tác IO sẽ bắt đầu  
từ vị trí nào trong file  
Kiểu dữ liệu sẽ được ghi hoặc đọc  
Cách thức sắp xếp dữ liệu trong file (partern)  
MPI_File_set_view gán vùng dữ liệu của tệp tin  
cho các tiến trình  
MPI_File_set_view  
MPI_Set_view(MPI_File fh, MPI_Offset disp, MPI_Datatype etype,  
MPI_Datatype filetype, char *datarep, MPI_Info info)  
MPI_Set_view xác định phần nào của tệp tin có thể truy cập từ tiến trình đưa ra  
disp: Khoảng cách tính theo byte từ vị trí đầu tệp tin  
etype: Kiểu dữ liệu cơ bản của tệp tin (integer, doubles, …).  
filetype: Xác định sự phân tán dữ liệu đối với các tiến trình.  
Thường trùng với giá trị của etype hoặc dẫn xuất từ etype  
datarep: cách tổ chức dữ liệu  
Tchc dliu  
Biểu diễn cách thức tổ chức dữ liệu trong file  
Có thể được định nghĩa tùy biến  
Mặc định  
Native:  
Dữ liệu trong file và trong bộ nhớ được tổ chức giống nhau  
Internal  
Được thực hiện hoàn toàn bởi sản phẩm MPI  
Thực hiện việc chuyển đổi kiểu khi cần thiết  
External32  
Sử dụng một cách thức tổ chức chuẩn  
Tất cả các cài đặt đều hỗ trợ External 32  
Ví dvkhung nhìn  
etype = MPI_INT  
filetype = 2 sMPI_INT cùng vi 1 khong  
trng gm 4 sMPI_INT  
Đu tp tin  
TP TIN  
displacement  
filetype  
filetype  
Kết hp các khung nhìn  
Vào/ra cng tác trong MPI  
Các tiến trình có thể đọc file bằng các lệnh đọc riêng  
rẽ  
Có thể cải thiện hiệu năng bằng cách tập trung tất  
cả các lệnh đọc/ghi vào một lệnh đọc/ghi theo nhóm  
duy nhất.  
Các yêu cu  
nh, đơn lẻ  
Truy cp công tác  
Vào/ra cng tác trong MPI  
MPI_File_read_all, MPI_File_read_at_all,  
MPI_File_write_all, MPI_File_write_at_all  
_allchỉ định tất cả các tiến trình trong  
communicator khai báo ở định tuyến  
MPI_File_openđều phải gọi định tuyến vào/ra này.  
Mỗi tiến trình chỉ truy cập thông tin của nó – danh  
sách các đối số là giống với các định tuyến không  
phải cộng tác.  
Vào/ra cng tác không ràng buc trong  
MPI  
Vào/ra cộng tác là vào/ra có ràng buộc  
Định tuyến chưa trả về giá trị cho đến khi việc đọc/ghi dữ  
liệu bộ đệm là an toàn  
Vẫn ràng buộc với tiến trình gọi nó.  
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ả về đối tượng request thay vì status  
Sử dụng MPI_Test và MPI_Wait cho quá trình hoàn thành  
Tải về để xem bản đầy đủ
pdf 30 trang Thùy Anh 29/04/2022 3120
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Tính toán lưới - Bài 7: Vào ra song song - Nguyễn Hữu Đức", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_giang_tinh_toan_luoi_bai_7_vao_ra_song_song_nguyen_huu_d.pdf