1. Trang chủ
  2. » Giáo án - Bài giảng

tính toán song song thoại nam lab+1+posix+threads+programming sinhvienzone com

4 38 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 4
Dung lượng 146,82 KB

Nội dung

Lab Posix Threads Programming Mục tiêu - SV tìm hiểu sử dụng thư viện Posix Thread linux Viết chương trình multithread đơn giản minh họa tính hiệu chương trình song song hóa Các hàm Posix threads bản: o pthread_create(), pthread_attr_init(), pthread_attr_destroy(), pthread_exit() o pthread_join(), pthread_detach(), pthread_attr_getdetachsate(), pthread_attr_setdetachstate() o Pthread_mutex_init(), pthread_mutex_destroy(), pthread_mutexattr_init() , pthread_mutexattr_destroy(), pthread_mutex_lock(), pthread_mutex_unlock() om - C Nội dung ne 2.1 Yêu cầu Zo SV viết chương trình multithread thực thi đồng thời giải thuật xếp sau: Selection sort, Interchange sort, Bubble sort Thứ tự tạo thread thực thi giải thuật tùy ý, SV thay đổi kích thướt liệu đầu vào quan sát kết chương trình Nhận xét kết chương trình lần thay đổi kích thướt liệu en 2.2 Hướng dẫn Vi Chương trình mẫu cung cấp mang tính tham khảo, SV tự viết chương trình bổ sung, thay đổi mẫu để hoàn tất yêu cầu lab nh Chương trình mẫu cung cấp thực giải thuật xếp yêu cầu, SV cần tìm hiểu hàm Posix threads để hồn tất hàm main() chương trình Si /* Ma nguon */ #include #include #include #define NUM_THREADS #define N 100 struct threadData { int tid; long num; long *a; }; struct threadData arrayData[NUM_THREADS]; SinhVienZone.com https://fb.com/sinhvienzonevn void Swap(long *x, long *y){ long temp; temp = *x; *x = *y; *y = temp; } /* selection Sort */ void *selectionSort(void* data){ om long i,j,temp,min; /* Thread Argument Passing */ struct threadData *myData; myData = (struct threadData *)data; int myid = myData->tid; long myNum = myData->num; long *myArray = myData->a; en Zo ne C printf("\n Thread %d starts Selection Sort: \n",myid); /* Processing */ for(i=0; i < myNum-1; i++) { = i; for(j=i+1; j < myNum; j++){ if(myArray[min] > myArray[j]) = j; } Swap(&myArray[min],&myArray[i]); } Vi nh } printf("\n Result selection sort from thread %d : \n",myid); for(i=0; i < myNum; i++) printf("%5ld ", myArray[i]); pthread_exit(NULL); /* interchange sort */ void *interchangeSort(void* data){ Si long i,j; /* Thread Argument Passing */ struct threadData *myData; myData = (struct threadData *)data; int myid = myData->tid; long myNum = myData->num; long *myArray = myData->a; printf("\n Thread %d starts Interchange Sort: \n",myid); /* Processing */ for(i=0; i < myNum-1; i++) { for(j=i+1; j < myNum; j++) if(myArray[i] > myArray[j]) Swap(&myArray[j],&myArray[i]); } printf("\n Result interchange sort from thread %d : \n",myid); SinhVienZone.com https://fb.com/sinhvienzonevn } for(i=0; i < myNum; i++) printf("%5ld ", myArray[i]); pthread_exit(NULL); /* bubble sort */ void *bubbleSort(void* data){ om long i,j; /* Thread Argument Passing */ struct threadData *myData; myData = (struct threadData *)data; int myid = myData->tid; long myNum = myData->num; long *myArray = myData->a; Zo ne C printf("\n Thread %d starts Bubble Sort: \n",myid); /* Processing */ for(i=0; i < myNum-1; i++) { for(j= myNum-1; j > i; j ) if(myArray[j] < myArray[j-1]) Swap(&myArray[j],&myArray[j-1]); } en Vi } printf("\n Result bubble sort from thread %d : \n",myid); for(i=0; i < myNum; i++) printf("%5ld ", myArray[i]); pthread_exit(NULL); int main(int argc, char **argv){ nh pthread_t threads[NUM_THREADS]; int status,rc; long i,j,n,ret; Si /* Initialize Data */ long **a; (*a) = (long *)malloc(NUM_THREADS * sizeof(long)); for(i=0; i < NUM_THREADS; i++) a[i] = (long *)malloc(N * sizeof(long)); /* data for first row */ for(j=0; j < N; j++) a[0][j] = random()%1000; /* replicate to all rows */ for(i=1; i < NUM_THREADS; i++) { for(j=0; j < N; j++) a[i][j] = a[0][j]; } /* Mornitoring data */ printf("\n Data before sorting: \n"); for(j=0; j < N; j++){ SinhVienZone.com https://fb.com/sinhvienzonevn printf("%5ld ", a[0][j]); } printf("\n \n"); for(j=0; j < N; j++){ printf("%5ld ", a[1][j]); } for(i=0; i < NUM_THREADS; i++){ printf("\n Creating thread %d: \n",i); arrayData[i].tid = i; arrayData[i].num = N; arrayData[i].a = a[i]; } om /* SV tạo thread thực thi giải thuật */ /* SV gọi hàm chờ thread kết thúc */ ne Zo } pthread_exit(NULL); return 0; C /* Ket thuc */ en  SV nhận xét kết thử nghiệm chương trình ! Bài tập Vi SV sử dụng kiến thức lập trình multithread viết chương trình sau: nh 3.1 Viết chương trình nhân hai vector Si 3.2 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() pthread_mutex_unlock() trường hợp đồng liệu dùng chung thread 3.3 Viết chương trình chơi cờ caro bàn cờ N*N Đề xuất mơ hình multithread cho giải thuật tìm kiếm nước tốt khảo sát tính hiệu quả, thời gian chạy giải thuật song song hóa multithread 3.4 Viết chương trình đặt N quân hậu vào bàn cờ tổng qt N *N Đề xuất mơ hình multithread cho giải thuật đặt hậu khảo sát tính hiệu quả, thời gian chạy giải thuật song song hóa multithread SinhVienZone.com https://fb.com/sinhvienzonevn ... hình multithread cho giải thuật đặt hậu khảo sát tính hiệu quả, thời gian chạy giải thuật song song hóa multithread SinhVienZone. com https://fb .com/ sinhvienzonevn ... Mornitoring data */ printf(" Data before sorting: "); for(j=0; j < N; j++){ SinhVienZone. com https://fb .com/ sinhvienzonevn printf("%5ld ", a[0][j]); } printf(" "); for(j=0; j < N; j++){... Swap(&myArray[j],&myArray[i]); } printf(" Result interchange sort from thread %d : ",myid); SinhVienZone. com https://fb .com/ sinhvienzonevn } for(i=0; i < myNum; i++) printf("%5ld ", myArray[i]); pthread_exit(NULL);

Ngày đăng: 30/01/2020, 22:31

TỪ KHÓA LIÊN QUAN