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

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Lab 1 Posix Threads 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ìn

Trang 1

Lab 1 Posix Threads 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:

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()

2 Nội dung

2.1 Yêu cầu

SV viết một chương trình multithread thực thi đồng thời 3 giải thuật sắp xếp sau: Selection sort, Interchange sort, Bubble sort Thứ tự tạo thread thực thi mỗi giải thuật là tùy ý, SV thay đổi kích thướt dữ liệu đầu vào và quan sát kết quả của chương trình Nhận xét về kết quả chương trình trong các lần thay đổi kích thướt dữ liệu

2.2 Hướng dẫn

Chương trình mẫu cung cấp chỉ mang tính tham khảo, SV có thể tự viết chương trình hoặc bổ sung, thay đổi bài mẫu để hoàn tất yêu cầu của bài lab

Chương trình mẫu được cung cấp dưới đây 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

/* Ma nguon */

#include <stdio.h>

#include <stdlib.h>

#include <pthread.h>

#define NUM_THREADS 3

struct threadData {

int tid;

long num;

long *a;

};

struct threadData arrayData[NUM_THREADS];

SinhVienZone.Com

Trang 2

void Swap(long *x, long *y){

long temp;

temp = *x;

*x = *y;

*y = temp;

}

/* selection Sort */

void *selectionSort(void* data){

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;

printf("\n Thread %d starts Selection Sort: \n",myid);

/* Processing */

for(i=0; i < myNum-1; i++)

{

if(myArray[min] > myArray[j])

min = j;

}

Swap(&myArray[min],&myArray[i]);

}

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){

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++)

{

if(myArray[i] > myArray[j])

Swap(&myArray[j],&myArray[i]);

}

printf("\n Result interchange sort from thread %d : \n",myid);

SinhVienZone.Com

Trang 3

for(i=0; i < myNum; i++)

printf("%5ld ", myArray[i]);

pthread_exit(NULL);

}

/* bubble sort */

void *bubbleSort(void* data){

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 Bubble Sort: \n",myid);

/* Processing */

for(i=0; i < myNum-1; i++)

{

if(myArray[j] < myArray[j-1])

Swap(&myArray[j],&myArray[j-1]);

}

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){

pthread_t threads[NUM_THREADS];

int status,rc;

long i,j,n,ret;

/* 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));

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

Trang 4

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];

}

/* SV tạo thread thực thi các giải thuật */

/* SV gọi hàm chờ các thread kết thúc */

pthread_exit(NULL);

return 0;

}

/* Ket thuc */

 SV nhận xét về kết quả thử nghiệm chương trình !

3 Bài tập

SV sử dụng kiến thức về lập trình multithread viết các chương trình sau:

3.1 Viết chương trình nhân hai vector

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() và pthread_mutex_unlock() trong trường hợp đồng bộ dữ liệu dùng chung giữa các thread

3.3 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

3.4 Viết chương trình đặt N quân hậu vào bàn cờ tổng quát N *N ô Đề xuất mô hình multithread cho giải thuật đặt hậu 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

SinhVienZone.Com

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

TỪ KHÓA LIÊN QUAN