Bài tập thực hành Multithread - Lab 01: Multithreded programming
1. Mục tiêu:
SV tìm hiểu và sử dụng thư viện Posix Thread trên linux
Viết một chương trình multithread đơn giản minh họa tính hiệu quả của chương trình khi
được song song hóa.
- Các hàm Posix threads cơ bản:
pthread_create(), pthread_attr_init(), pthread_attr_destroy(), pthread_exit().
pthread_join(), pthread_detach(), pthread_attr_getdetachsate(),
pthread_attr_setdetachstate().
Pthread_mutex_init(), pthread_mutex_destroy(), pthread_mutexattr_init() ,
pthread_mutexattr_destroy(), pthread_mutex_lock(), pthread_mutex_unlock().
Bạn đang xem tài liệu "Bài tập thực hành Multithread - Lab 01: Multithreded programming", để 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:
- bai_tap_thuc_hanh_multithread_lab_01_multithreded_programmin.pdf
Nội dung text: Bài tập thực hành Multithread - Lab 01: Multithreded programming
- LAB 01: MULTITHREDED PROGRAMMING 1. Mục tiêu: SV tìm hiểu và sử dụng thư viện Posix Thread trên linux Viết một chương trình multithread đơn giản minh họa tính hiệu quả của chương trình khi được song song hóa. - Các hàm Posix threads cơ bản: . pthread_create(), pthread_attr_init(), pthread_attr_destroy(), pthread_exit(). . pthread_join(), pthread_detach(), pthread_attr_getdetachsate(), . pthread_attr_setdetachstate(). . Pthread_mutex_init(), pthread_mutex_destroy(), pthread_mutexattr_init() , . pthread_mutexattr_destroy(), pthread_mutex_lock(), pthread_mutex_unlock(). 2. Nội dung: 2.1. Yêu cầu: - Sinh viên hoàn thiện chương trình nhân hai ma trận vuông NxN bằng multithread programming sử dụng thư viện lập trình POSIX pThread trên hệ điều hành Linux. 2.2. Đoạn code mẫu của chương trình nhân hai ma trận NxN tuần tự: /* Matrix multiplication */ /* source code from Quinn's book */ #include #include /* N <= 10000*/ #define N 1000 #define THRESHOLD 65535 double a[N][N], b[N][N], c[N][N]; int main() { init_matrix( a, N, N, 1); init_matrix( b, N, N, 1); Bài tập thực hành Multithread – Bộ môn Hệ thống & Mạng Máy tính, khoa KH&KTMT Page 1
- int l, /* block A is l x m*/ int m, /* block B is m x n*/ int n) /* block C is l x n*/ { int lhalf[3], mhalf[3], nhalf[3]; /*kich thuoc cua khoi 1/4*/ int i,j,k; double *aptr, *bptr, *cptr; if (m*n > THRESHOLD) { /* Neu A, B khong vua khoi thi giam di 1/2*/ lhalf[0] = 0; lhalf[1] = l/2; lhalf[2] = l - l/2; mhalf[0] = 0; mhalf[1] = m/2; mhalf[2] = m - m/2; nhalf[0] = 0; nhalf[1] = n/2; nhalf[2] = n - n/2; for (i=0; i<2; i++) for (j=0;j<2;j++) for (k=0;k<2;k++) mm( crow + lhalf[i], ccol + mhalf[j], arow + lhalf[i], acol + mhalf[k], brow + mhalf[k], bcol + nhalf[j], lhalf[i+1], mhalf[k+1], nhalf[j+1] ); }else { /* B fits in cache do standard multiply */ for (i=0; i<l ; i++) Bài tập thực hành Multithread – Bộ môn Hệ thống & Mạng Máy tính, khoa KH&KTMT Page 3
- fprintf(f,"\n"); } fclose(f); } void print(double *mt, int row, int col) { int i,j; for (i=0;i<row;i++) { for (j=0;j<col;j++) printf("%6.0f ", *(mt + i*col +j)); printf("\n"); } } 2.3. Nội dung bài thực hành: Hoàn thiện chương trình nhân hai ma trận NxN song song dùng thư viện lập trình POSIX pThread. Gợi ý: - Tạo thêm nhiều thread. 3. Bài tập SV thực hiện các bài tập sau: 3.1. Hiện thực 3 giải thuật sắp xếp đã yêu cầu, SV cần tìm hiểu các hàm Posix threads để hoàn tất hàm main() trong chương trình. 3.2 Viết chương trình nhân hai vector 3.3 Viết chương trình nhân hai ma trận Hướng dẫn: SV sử dụng hàm pthread_mutex_lock() và pthread_mutex_unlock() trong trường hợp đồng bộ dữ liệu dùng chung giữa các thread. 3.4 Viết chương trình chơi cờ caro trên bàn cờ N*N. Đề xuất mô hình multithread cho giải thuật tìm kiếm nước đi tốt nhất và khảo sát tính hiệu quả, thời gian chạy của giải thuật được song song hóa bằng multithread. Bài tập thực hành Multithread – Bộ môn Hệ thống & Mạng Máy tính, khoa KH&KTMT Page 5