1. Trang chủ
  2. » Giáo Dục - Đào Tạo

BÁO CÁO BÀI TẬP LỚN GIỮA KÌ MÔN LẬP TRÌNH PHÂN TÁN VÀ SONG SONG

10 29 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 10
Dung lượng 0,97 MB

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

Nội dung

Phần 1: Tổng quan về lập trình phân tán và song song 1.1 Định nghĩa 1.1.1 Thế nào là lập trình tính toán và song song Tính toán song song là sự thực hiện một cách đồng thời hai hoặc nh

Trang 1

Họ và tên: Nguyễn Xuân Hòa

Lớp: K63 Vật lý chuẩn

Mã sinh viên: 18000402

BÁO CÁO BÀI TẬP LỚN GIỮA KÌ MÔN LẬP TRÌNH PHÂN TÁN VÀ SONG SONG

Trang 2

Mục Lục

Phần 1: Tổng quan về lập trình phân tán và song song 3

1.1 Định nghĩa 3

1.1.1 Thế nào là lập trình tính toán và song song 3

1.1.2 Tại sao phải lập trình và tính toán song song 3

1.1 Một vài mô hình lập trình song song 3

Phần 2: Thư viện mã nguồn mở Open MP 4

2.1 Giới thiệu về Open MP 4

2.3 Chỉ thị trong Open MP 6

2.4 Các mệnh đề trong Open MP 6

2.5 Thư viện và các biến môi trường 6

2.5.1 Thư viện Runtime 6

2.5.2 Biến môi trường 7

Phần 3: Thực nghiệm: Bài toán nhân hai ma trận cùng kích thước 7

3.1 Bài toán nhân 2 ma trận 7

3.2 Source code nhân hai ma trận sử dụng Open MP 8

3.3 Kết quả thực hiện 10

Trang 3

Phần 1: Tổng quan về lập trình phân tán và song song

1.1 Định nghĩa

1.1.1 Thế nào là lập trình tính toán và song song

Tính toán song song là sự thực hiện một cách đồng thời hai hoặc nhiều phép toán, công việc vào một thời điểm, được thực hiện bởi các bộ xử lý khác nhau

Tư duy lập trình song song giống như việc một nhóm phải giải quyết một vấn đề hay một nhiệm vụ, thay vì từng người lần lượt làm từng nhiệm vụ trong những khoảng thời gian khác nhau thì họ sẽ đồng thời thực hiện các nhiệm vụ

đó vào cùng một thời điểm

1.1.2 Tại sao phải lập trình và tính toán song song

Lập trình, tính toán song để phát huy công năng, hiệu năng của bộ đa xử

lý (multiple processor)

Lập trình, tính toán song song là lời giải đáp cho bài toán tăng hiệu năng

xử lý đồng thời rút ngắn thời gian xử lý tính toán của người dùng

Giải quyết một số bài toán lớn mà bộ xử lý đơn lõi (single processor) không thực hiện được

1.1 Một vài mô hình lập trình song song

Một số mô hình song song thường được sử dụng là:

- Mô hình dùng chung bộ nhớ (Shared Memory)

Trang 4

- Mô hình luồng( thread)

Phần 2: Thư viện mã nguồn mở Open MP

2.1 Giới thiệu về Open MP

OpenMP (Open Multi – Processing) là một giao diện lập trình ứng dụng Application Program Interface (API) được sử dụng để điều khiển các luồng

Trang 5

gồm:

Các chỉ thị biên dịch (Compiler Directive)

Thư viện runtime (Runtime Library Rountines)

Các biến môi trường (Enviroment Variables)

2.2 Mô hình lập trình song song Open MP

OpenMP sử dụng mô hình Fork-Join để thực thi công việc song song:

Trong mô hình này tất cả các chương trình song song đều bắt đầu với việc xử lý đơn bởi một luồng chủ (master thread) Luồng chủ này sẽ thực thi một cách tuần

tự cho tới khi bắt gặp vùng song song (parallel region) đầu tiên

FORK: Có nghĩa là luồng chủ sau đó sẽ tạo ra một tập các luồng song song

Và sau đó đoạn mã trong vùng song song được thực thi song song bởi tập luồng song song vừa tạo ra

JOIN: Khi mà tập luồng song song đã hoàn thành đoạn mã trong vùng song

Trang 6

song chúng sẽ được đồng bộ và kết thúc rồi sau đó công việc lại được thực hiện bởi luồng chủ

2.3 Chỉ thị trong Open MP

Khuôn dạng của chỉ thị:

Chỉ thị trong OpenMP được cho dưới dạng sau:

# pragma omp directive-name [clause ] newline

 # pragma omp: Yêu cầu bắt buộc đối với mọi chỉ thị OpenMP C/C++

 directive-name: Là tên của chỉ thị phải xuất hiện sau #pragma omp và đứng trước bất kì mệnh đề nào

 [clause ]: Các mệnh đề này không bắt buộc trong chỉ thị

 newline : Yêu cầu bắt buộc với mỗi chỉ thị nó là tập mã lệnh nằm trong khối cấu trúc được bao bọc bởi chỉ thị

2.4 Các mệnh đề trong Open MP

Vì OpenMP lập trình trên máy tính chia sẻ bộ nhớ chung nên việc hiểu và sử dụngđược phạm vi của các biến trong chương trình là rất quan trọng Phạm vi của các biếnở đây bao gồm hai phạm vi toàn cục và phạm vi bảo vệ Các biến toàn cục bao gồmcác biến tĩnh và biến file toàn cục còn các biến bảo vệ bao gồm biến chỉ số trong vònglặp, biến trong thủ tục được gọi từ vùng song song Các mệnh đề về phạm vi dữ liệubao gồm các mệnh đề sau:

 PRIVATE

 FIRSTPRIVATE

 LASTPRIVATE

 SHARED

 DEFAULT

 REDUCTION

 COPYIN

2.5 Thư viện và các biến môi trường

2.5.1 Thư viện Runtime

OpenMP cung cấp một thư viện với rất nhiều các hàm chức năng bao gồm các truy vấn liên quan đến số lượng và chỉ số các luồng, thiết lập số lượng các luồng

sử dụng, semaphores, và các hàm thiết lập môi trường thực thi Trong C/C++ để

có thể sử dụng các hàm trên thì phải đính vào file thư viện omp.h

Trang 7

 OMP_GET_THREAD_NUM

 OMP_IN_PARALLEL

 OMP_SET_NESTED

 OMP_INIT_LOCK

 OMP_SET_LOCK

 OMP_TEST_LOCK

2.5.2 Biến môi trường

Các biến môi trường được dùng để điều khiển sự thực hiện đoạn mã song song Bao gồm các biến môi trường sau:

 OMP_DYNAMIC

 OMP_NESTE

Phần 3: Thực nghiệm: Bài toán nhân hai ma trận cùng kích thước

3.1 Bài toán nhân 2 ma trận

Cho hai ma trân A (m*n) và B(n*p):

Tích của hai ma trận C = A*B được thực hiện như sau:

Trang 8

3.2 Source code nhân hai ma trận sử dụng Open MP

/ Matrix Multiple.cpp : Defines the entry point for the console application

//

// Nhan hai ma tran su dung OpenMP

#include "StdAfx.h"

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>

#include <omp.h>

#define N 4000 // Kich thuoc ma tran NxN

int main( int argc, char *argv[])

{

int **a,**b,**c; // Khai báo mảng 2 chiều so nguyen

int tid,nthreads,chunk =10; //nthreads: bien

de luu so threads duoc su dung;

tid: Bien de luu so thu tu cua thread

//chunk = 10: Sử dụng để chia trong vong lap

For

double dif;

int i,j,k;

//Bien luu thoi gian tinh toan // Bien su dung cho vong lap /* Cap phat bo nho cho ma tran A */

a=( int **) malloc(10*N);

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

{

a[i]=( int *) malloc(10*N);

}

/* Cap phat bo nho cho ma tran B */

b=( int **) malloc(10*N);

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

{

b[i]=( int *) malloc(10*N);

}

/* Cap phat bo nho cho ma tran C */

c=( int **) malloc(10*N);

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

{

c[i]=( int *) malloc(10*N);

}

printf( "Khoi tao ma tran \n" );

double start = omp_get_wtime( ); //Bat dau dem thoi gian

/*** Tao mot vung song song voi cac bien chia se giua cac thread gom: a,b,c nthread,

chunks va cac bien rieng duoc su dung cho cac thread la i,j,k ***/

#pragma omp parallel shared(a,b,c,nthreads,chunk) private (tid,i,j,k)

{

tid = omp_get_thread_num();

if (tid==0)

{

nthreads = omp_get_num_threads(); // Lay so thread duoc su dung

printf( "Bat dau nhan ma tran voi so thread la: %d

threads\n" ,nthreads);

}

//Khoi tao ma tran A

Trang 9

voi lich trinh Tinh va kich thuoc moi doan la 10*/

#pragma omp for schedule ( static , chunk)

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

{

for (j=0;j<N; j++)

{

a[i][j] = i+j;

}

}

//Khoi tao ma tran B

/* Khai bao mot vong lap duoc thuc hien song song giua cac thread

voi lich trinh Tinh va kich thuoc moi doan la 10*/

#pragma omp for schedule ( static , chunk)

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

{

for (j=0;j<N; j++)

{

b[i][j] = i*j;

}

}

//Khoi tao ma tran C

/* Khai bao mot vong lap duoc thuc hien song song giua cac thread

voi lich trinh Tinh va kich thuoc moi doan la 10*/

#pragma omp for schedule ( static , chunk)

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

{

for (j=0;j<N; j++)

{

c[i][j] = 0;

}

}

printf( "Thread %d dang tien hanh nhan ma tran \n" ,tid);

#pragma omp for schedule ( static , chunk)

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

{

for (j=0;j<N; j++)

{

for (k=0;k<N; k++)

{

c[i][j]+=a[i][k]*b[k][j];

}

}

}

} /*****Ket thuc vung song song*****/

double end = omp_get_wtime( ); //Thoi gian ket thuc

dif = end - start; //Khoang thoi gian thuc hien

printf( "Xong.Thoi gian thuc hien la: %f giay.\n" , dif);

/*Giai phong bo nho*/

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

{

free(a[i]);

}

free(a);

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

{

free(b[i]);

}

free(b);

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

{

free(c[i]);

Trang 10

}

free(c);

getch();

}

3.3 Kết quả thực hiện

TT

Kích thước

ma trận

(NxN)

Thời gian chạy lần 1 (Giây)

Thời gian chạy lần 2 (Giây)

Thời gian chạy lần 3 (Giây)

Thời gian chạy trung bình (Giây)

Thời gian chạy lâu nhất (Giây)

Nhận xét:

- Thời gian chạy với mỗi lần khác nhau là khác nhau

- Ma trận có kích thước càng lớn thì thời gian chạy càng tăng

- Thời gian tính toán của lập trình song song nhanh hơn lập trình tuần tự

Ngày đăng: 13/12/2021, 18:13

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w