Report Lap Trinh Song Song

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 19

TRNG I HC BCH K HOA H NI

VIN IN T - VIN THN G


--------

BO CO MN LP TRNH SONG SONG


ti: NG DNG LP TRNH SONG SONG VO GII
QUYT BI TON NHN MA TRN

Ging vin ging dy : TS. PHM DON TNH


Hc vin thc hin
:
1. PHM HONG ANH CB130528
2. NGUYN NG HIU CB130529
3. NGUYN VN LONG CB130530
Lp
: 13BKTT.KH

H Ni, 02/2014
Page 0

MC LC
DANH MC BNG BIU .................................................................................................. 2
DANH MC HNH V ....................................................................................................... 2
LI NI U...................................................................................................................... 3
CHNG 1: TNG QUAN V M HNH LP TRNH SONG SONG VI OPEN MP
.............................................................................................................................................. 4
1.
TNH TON SONG SONG ............................................................................................. 4
1.1. Tnh ton song song l g? .................................................................................. 4
1.2. Ti sao phi tnh ton song song? ....................................................................... 4
2.
GII THIU V OPENMP ........................................................................................... 4
2.1. Khi nim v OpenMP ........................................................................................ 4
2.2. M hnh lp trnh song song OpenMP................................................................. 5
2.2.1. Song song ha da trn c ch lung (Thread based parallelism) ................ 5
2.2.2. M hnh song song hin (Explicit Parallelism) ............................................ 5
2.2.3. M hnh Fork-Join ...................................................................................... 5
2.3. Ch th trong OpenMP ......................................................................................... 6
2.3.1. Khun dng ch th ...................................................................................... 6
2.3.2. Phm vi ca ch th: .................................................................................... 6
2.3.3. Cu trc chia s........................................................................................... 7
2.3.3.1. Ch th Do/For ........................................................................................ 7
2.3.3.2. Ch th Sections ...................................................................................... 7
2.3.3.3. Ch th Single ......................................................................................... 7
2.3.4. Cu trc ng b d liu ............................................................................. 8
2.3.4.1. Ch th master ......................................................................................... 8
2.3.4.2. Ch th critical......................................................................................... 8
2.3.4.3. Ch th Barrier ........................................................................................ 8
2.3.4.4. Ch th Atomic........................................................................................ 8
2.4. Cc mnh trong OpenMP ............................................................................... 8
2.5. Th vin v cc bin mi trng ......................................................................... 9
2.5.1. Th vin Runtime ....................................................................................... 9
2.5.2. Bin mi trng .......................................................................................... 9
CHNG 2: NG DNG LP TRNH SONG SONG VO GII QUYT BI TON
NHN MA TRN.............................................................................................................. 10
1.
BI TON NHN HAI MA TRN ................................................................................. 10
2.
KT QU THC HIN................................................................................................ 10
KT LUN ........................................................................................................................ 14
TI LIU THAM KHO ................................................................................................. 14
PH LC 1: SOURCE CODE NHN HAI MA TRN KHNG S DNG OPENMP
............................................................................................................................................ 15
PH LC 2: SOURCE CODE NHN HAI MA TRN S DNG OPENMP ............. 16
Page 1

DANH MC BNG BIU


Bng 1: Thi gian tnh ton nhn hai ma trn khng s dng OpenMP ...................... 10
Bng 2: Thi gian tnh ton nhn hai ma trn s dng OpenMP ................................ 11
Bng 3: Tnh ton Speed up v Efficiency da trn thi gian chy trung bnh .......... 11
Bng 4: Tnh ton Speed up v Efficiency da trn thi gian chy lu nht .............. 11
DANH MC HNH V
Hnh 1: Kin trc OpenMP .......................................................................................... 5
Hnh 2: M hnh Fork-Join .......................................................................................... 6
Hnh 3:Biu so snh thi gian tnh ton trung bnh ............................................... 12
Hnh 4:Biu so snh thi gian tnh ton lu nht ................................................... 12
Hnh 5:Biu Speed Up .......................................................................................... 13
Hnh 6:Biu Efficiency ......................................................................................... 13

Page 2

LI NI U
Ngy nay s pht trin ca cng ngh c thch thc bi lp bi ton ln cn
gii quyt trong nhiu lnh vc ca i sng x hi nh d bo thi tit, khai ph
d liu, x l nh, m phng tai nn xe hi, t ng ha... Lp bi ton ny va
i hi p ng thi gian thc va yu cu x l trn khi d liu ln. gii
quyt bi ton ny i hi cc b x l c hiu nng cao.
X l song song ra i vi mc ch lm tng kh nng tnh ton ca my tnh
bng cch kt hp nhiu b x l tham gia ng thi vo qu trnh x l thay vi
vic s dng cc my tnh chuyn bit t tin.
Vi s pht trin ca kin trc my tnh v mng my tnh cho thy rng trong
tng lai x l song song khng nhng c thc hin trn nhng siu my tnh
m c th c thc hin trn cc trm lm vic, my tnh c nhn, mng my
tnh. Nhng hu ht cc thut ton ngy nay u l nhng thut ton tun t. Cho
nn cn xy dng nhng thut ton, cu trc d liu cho php x l mt cch song
song.
Trong khun kh ca bi tp ny v yu cu ca mn hc, chng em la
chn bi ton nhn hai ma trn c s lng phn t ln c lp trnh tun t v
song song nh gi tc x l v hiu nng s dng. Thng qua , chng em c
th hiu nhiu hn na v mn hc lp trnh song song ny.
Ni dung ca bi bo co ny gm cc phn:
Chng 1: Tng quan v m hnh lp trnh song song vi Open MP
Chng 2: ng dng lp trnh song song vo bi ton nhn hai ma trn
Chng em xin c gi li cm n chn thnh n ging vin TS. Phm
Don Tnh tn tnh ging dy v gip chng em trong thi gian hc tp hc
phn ny.

Page 3

Chng 1: Tng quan v m hnh lp trnh song song vi Open MP


1. Tnh ton song song
1.1.

Tnh ton song song l g?

Nh chng ta thy cc phn mm ph bin ngy nay hu ht u c vit


trn c s ca tnh ton tun t. Cc phn mm ny thng c thc hin trn
mt my tnh n vi duy nht mt b x l. Vn y c gii quyt thng qua
mt chui cc lnh tun t c thc hin bi mt b x l. Ti mt thi im ch c
mt lnh c thc hin.
Tnh ton song song ra i l mt s ci tin ca tnh ton tun t. N l s
gii quyt vn da trn s thc thi ng thi ca nhiu ti nguyn my tnh .
Ti nguyn my tnh y bao gm:
Mt my tnh n vi nhiu b x l
Nhiu my tnh ni li vi nhau thnh mt mng my tnh
Kt hp c hai loi trn
Tnh ton song song thng c dng gii quyt cc vn ht sc phc
tp yu cu thi gian tnh ton ln hoc lm vic vi khi d liu ln nh cc bi
ton d bo thi tit, m phng tai nn xe hi, xy dng cc m hnh thng mi
v cc vn khoa hc nh khai ph d liu , tr tu nhn to, an ton d liu
1.2.

Ti sao phi tnh ton song song?

Vic tnh ton song song l rt cn thit. Ngoi hai nguyn nhn chnh l n
c dng tnh ton cc bi ton yu cu thi gian tnh ton ln v khi lng
d liu ln cn c cc nguyn nhn khc nh s dng ti nguyn ca cc my
khc trong mt mng LAN hoc thng qua mng internet, c th s dng nhiu ti
nguyn tnh ton nh kt hp li to nn mt siu my tnh. Do gii hn v khng
gian lu tr ca b nh trn mt my n gii quyt mt vn ln vic s dng
nhiu b nh trn nhiu my tnh l rt hu hiu trong trng hp ny.
Gii hn ca tnh ton tun t bao gm c hai nguyn nhn thc t v nguyn
nhn vt l. xy dng nn mt my tnh tun t tc cao gp rt nhiu hn ch
V tc truyn d liu: Tc truyn ca my tnh tun t ph thuc
trc tip vo s di chuyn d liu trong phn cng. Cho nn vic tng tc thc
hin phi ch yu cn c vo cc yu t tnh ton.
V kch c: Cng ngh ch to b x l cho php gn nhiu bng bn
dn trn mt con chip. Tuy nhin vic lm ny s lm tng kch thc ca b x l
V thng mi: Vic to ra mt b x l tc x l cao l rt tn km.
S dng nhiu b x l nh t hiu qu tng t m li t tn km hn.
2. Gii thiu v OpenMP
2.1.

Khi nim v OpenMP

Theo Wikipedia:
OpenMP (Open Multi-Processing) l mt giao din lp trnh ng dng API
(Application programming interface) h tr a nn tng da trn cu trc chia s b
Page 4

nh chung, a ngn ng lp trnh C, C++, Fortran v hu ht cc b kin trc vi x


l v h iu hnh Linux, Unix, Mac OS X, nn tng Microsoft Windows.
N bao gm :

Cc ch th bin dch (Compiler directives)

Cc th vin Runtime (Library rountines)

Cc bin mi trng (Environment variables)

Hnh 1: Kin trc OpenMP


2.2.

M hnh lp trnh song song OpenMP

2.2.1. Song song ha da trn c ch lung (Thread based parallelism)


Trong m hnh trn chng trnh x l trn b nh ton cc bao gm nhiu
lung thc thi ng thi. OpenMP da vo s tn ti ca nhiu lung trn mt m
hnh lp trnh chia s b nh chung.
2.2.2. M hnh song song hin (Explicit Parallelism)
M hnh trn l mt m hnh lp trnh khng t ng. Ngi lp trnh c quyn
iu khin vic song song ha mt cch c lp
2.2.3. M hnh Fork-Join
Trong cc m hnh trn th OpenMP s dng m hnh Fork-Join thc thi cng
vic song song

Page 5

Hnh 2: M hnh Fork-Join


Trong m hnh ny tt c cc chng trnh song song u bt u vi vic x l
n bi mt lung ch (master thread). Lung ch ny s thc thi mt cch tun t
cho ti khi bt gp vng song song (parallel region) u tin .
FORK: C ngha l lung ch sau s to ra mt tp cc lung song song.
V sau on m trong vng song song c thc thi song song bi tp lung song
song va to ra
JOIN: Khi m tp lung song song hon thnh on m trong vng song
song chng s c ng b v kt thc ri sau cng vic li c thc hin
bi lung ch
2.3.

Ch th trong OpenMP

2.3.1. Khun dng ch th


Ch th trong OpenMP c cho di dng sau:
# pragma omp directive-name [clause...] newline

# pragma omp: Yu cu bt buc i vi mi ch th OpenMP C/C++

directive-name: L tn ca ch th phi xut hin sau #pragma omp v


ng trc bt k mnh no

[clause...]: Cc mnh ny khng bt buc trong ch th

newline : Yu cu bt buc vi mi ch th n l tp m lnh nm trong


khi cu trc c bao bc bi ch th
2.3.2. Phm vi ca ch th:

Phm vi tnh ( Static Extent ): l nhng on m nguyn bn trong


phm vi t u n cui khi cu trc cho sau mi ch th. Phm vi tnh ca ch th
khng m rng n cc th tc v cc tp cha m.

Ch th n c (Orphaned Directive): Ch th n c l ch th xut


hin c lp vi ch th khc. N tn ti ngoi phm vi tnh ca ch th khc. Ch
th n c m rng vi cc th tc v cc tp m ngun

Phm vi ng (Dynamic Extent): Phm vi ng ca ch th bao gm


phm vi tnh ca ca ch th v phm vi ca cc ch th m ci
OpenMP c rt nhiu ch th nh: atomic, barrier, critical, flush, for, master,
ordered, parallel, section, single, thread,private.
Page 6

Cc cu trc thng gp :

Cu trc chia s

Cu trc ng b

2.3.3. Cu trc chia s


Cu trc chia s cng vic dng chia vic thc hin cng vic trong vng song
song cho cc lung trong tp cc lung thc hin cng vic cho bi vng song
song. Cu trc chia s cng vic phi c bao bc bi mt vng song song c th
thc hin song song v cu trc ny c th c thc hin bi tt c cc lung
trong tp cc lung hoc ch mt s lung trong tp cc lung thc thi vng song
song. C ba loi cu trc chia s cng vic l cu trc DO/for, cu trc
SECTIONS v cu trc SINGLE
2.3.3.1.

Ch th Do/For

Ch th DO/for ch ra rng cc cng vic lp i lp li (interations) cho bi


vng lp phi c cc lung thc hin mt cch song song. Ch th for trong
C/C++ c cho di dng sau:
#pragma omp for [clause...] newline schedule ( type [,chunk_size] )
ordered
private ( list )
firstprivate ( list )
lastprivate ( list )
shared ( list )
reduction ( operator : list )
nowait
2.3.3.2.

Ch th Sections

Ch th ny dng ch ra cc phn m trong vng song song chia cho cc


lung thc hin. Trong phm vi ca ch th SECTIONS c cc ch th SECTION.
Mi mt SECTION s c thc hin bi mt lung trong tp cc lung v cc
SECTION khc nhau s c thc hin bi cc lung khc nhau. Trong
C/C++ chi th SECTIONS c cho di dng sau
#pragma omp sections [clause...] newline
private(list)
firstprivate(list)
lastprivate(list)
reduction(operator:list)
nowait
2.3.3.3.

Ch th Single

Page 7

Mnh SINGLE ch ra rng on m bao quanh ch th ch c thc hin


bi mt lung trong tp cc lung. Trong C/C++ ch th SINGLE c cho di
dng sau:
#pragma omp single [clause...] newline
private(list)
firstprivate(list)
nowait
2.3.4. Cu trc ng b d liu
2.3.4.1.

Ch th master

Trong ch th master on m bao quanh ch th ch c thc hin bi lung


ch trong tp cc lung.
Trong ch th ny khng c bt c mnh no v cc lung khc khng cn ch
n khi lung ch thc hin xong cng vic cho bi ch th master mi c thc
hin cng vic ca mnh.
2.3.4.2.

Ch th critical

Trong ch th Critical th vng m c cho bi ch th ti mt thi im ch c


thc hin ti mt lung.
Nu mt lung no ang thc hin cng vic cho bi ch th m c mt
lung khc c gng i thc hin cng vic th n s b kha cho nkhi lung kia
thc hin xong cng vic .
C th tn ti nhiu ch th critical vi cc tn khc nhau trong cng mt vng
song song.
2.3.4.3.

Ch th Barrier

Ch th ny dng ng b tt c cc lung trong tp cc lung . khi bt gp ch


th Barrier th mi lung s ch ti thi im (thi im bt gp ch th Barrier)
cho n khi tt c cc lung cn li bt gp ch th Barrier. Sau cc lung s cng
thc thi ch th barrier.
2.3.4.4.

Ch th Atomic

Trong ch th Atomic cc a ch vng nh c cp nhp mt cch nguyn t


hn l vic dng nhiu lung c gng ghi ln n.
2.4.

Cc mnh trong OpenMP

V OpenMP lp trnh trn my tnh chia s b nh chung nn vic hiu v s dng


c phm vi ca cc bin trong chng trnh l rt quan trng. Phm vi ca cc bin
y bao gm hai phm vi ton cc v phm vi bo v. Cc bin ton cc bao gm
cc bin tnh v bin file ton cc cn cc bin bo v bao gm bin ch s trong vng
lp, bin trong th tc c gi t vng song song. Cc mnh v phm vi d liu
bao gm cc mnh sau
PRIVATE
FIRSTPRIVATE
Page 8

LASTPRIVATE
SHARED
DEFAULT
REDUCTION
COPYIN
2.5.

Th vin v cc bin mi trng

2.5.1. Th vin Runtime


OpenMP cung cp mt th vin vi rt nhiu cc hm chc nng bao gm cc
truy vn lin quan n s lng v ch s cc lung, thit lp s lng cc lung s
dng, semaphores, v cc hm thit lp mi trng thc thi. Trong C/C++ c th
s dng cc hm trn th phi nh vo file th vin omp.h.
OMP_SET_NUM_THREADS
OMP_GET_NUM_THREADS
OMP_GET_MAX_THREADS
OMP_GET_THREAD_NUM
OMP_GET_NUM_PROCS
OMP_IN_PARALLEL
OMP_SET_DYNAMIC
OMP_GET_DYNAMIC
OMP_SET_NESTED
OMP_GET_NESTED
OMP_INIT_LOCK
OMP_SET_LOCK
OMP_UNSET_LOCK
OMP_TEST_LOCK
2.5.2. Bin mi trng
Cc bin mi trng c dng iu khin s thc hin on m song song.
Bao gm cc bin mi trng sau:
OMP_SCHEDULE
OMP_NUM_THREADS
OMP_DYNAMIC
OMP_NESTED

Page 9

Chng 2: ng dng lp trnh song song vo gii quyt bi ton nhn ma trn
1. Bi ton nhn hai ma trn
Cho hai ma trn A (m*n) v B(n*p):

Tch ca hai ma trn C = A*B c thc hin nh sau:

so snh s khc bit gia lp trnh tun t v lp trnh song song, ta tin
hnh nhn hai ma trn c cng kch thc (N*N, vi N ln). Thng qua thi gian thc
hin ta thu c kt qu nh di y.
2. Kt qu thc hin
Cc tham s s dng nh gi:
Hai ma trn vung, c kch thc nh nhau.
Kch thc ma trn tng dn t 500 n 4000, mi ln tng 500
Mi ln kim tra c chy 3 ln, ly thi gian trung bnh
Mi trng lp trnh: Microsoft Visual Studio 2010
Chy kim tra trn my tnh Core i5 2.27GHz, 4 core
Bng 1: Thi gian tnh ton nhn hai ma trn khng s dng OpenMP
Kch thc
TT
ma trn
(NxN)
1
2
3
4
5
6
7
8

500x500
1000x1000
1500x1500
2000x2000
2500x2500
3000x3000
3500x3500
4000x4000

Thi gian
chy ln 1
(Giy)

Thi gian
chyLn 2
(Giy)

Thi gian
chy ln 3
(Giy)

Thi gian
chy trung
bnh
(Giy)

Thi gian
chy lu
nht
(Giy)

2.226
23.276
73.431
168.976
347.531
650.096
1196.762
1277.624

2.222
22.704
72.957
173.586
352.504
730.219
1072.1
1250.586

1.965
22.679
72.593
149.34
346.597
744.628
1079.67
1260.405

2.138
22.886
72.994
163.967
348.877
708.314
1116.177
1262.872

2.226
23.276
73.431
173.586
352.504
744.628
1196.762
1277.624

Page 10

Bng 2: Thi gian tnh ton nhn hai ma trn s dng OpenMP
Kch thc
TT
ma trn
(NxN)
1
2
3
4
5
6
7
8

500x500
1000x1000
1500x1500
2000x2000
2500x2500
3000x3000
3500x3500
4000x4000

Thi gian
chy ln 1
(Giy)

Thi gian
chy ln 2
(Giy)

Thi gian
chy ln 3
(Giy)

0.905
7.448
25.370
63.488
134.567
246.558
395.057
566.025

0.850
7.364
25.386
66.801
134.812
240.936
393.168
665.869

0.819
7.455
25.973
67.333
134.185
240.891
388.070
757.783

Thi gian
chy trung
bnh
(Giy)
0.858
7.422
25.576
65.874
134.521
242.795
392.098
663.226

Thi gian
chy lu
nht
(Giy)
0.905
7.455
25.973
67.333
134.812
246.558
395.057
757.783

Bng 3: Tnh ton Speed up v Efficiency da trn thi gian chy trung bnh
TT
1
2
3
4
5
6
7
8

Kch thc
ma trn
(NxN)
500x500
1000x1000
1500x1500
2000x2000
2500x2500
3000x3000
3500x3500
4000x4000

Without
OpenMP

OpenMP

Speed up

Efficiency
(%)

2.138
22.886
72.994
163.967
348.877
708.314
1116.177
1262.872

0.85793
7.42234
25.576233
65.873985
134.52145
242.79499
392.0983
663.22578

2.5
3.1
2.9
2.5
2.6
2.9
2.8
1.9

62.3
77.1
71.3
62.2
64.8
72.9
71.2
47.6

Bng 4: Tnh ton Speed up v Efficiency da trn thi gian chy lu nht
TT
1
2
3
4
5
6
7
8

Kch thc
ma trn
(NxN)
500x500
1000x1000
1500x1500
2000x2000
2500x2500
3000x3000
3500x3500
4000x4000

Without
OpenMP

OpenMP

Speed up

Efficiency
(%)

2.226
23.276
73.431
173.586
352.504
744.628
1196.762
1277.624

0.905
7.455
25.973
67.333
134.812
246.558
395.057
757.783

2.5
3.1
2.8
2.6
2.6
3.0
3.0
1.7

61.5
78.1
70.7
64.5
65.4
75.5
75.7
42.2

Page 11

Hnh 3:Biu so snh thi gian tnh ton trung bnh

Hnh 4:Biu so snh thi gian tnh ton lu nht

Page 12

Hnh 5:Biu Speed Up

Hnh 6:Biu Efficiency

Page 13

Kt lun
Qua kt qu thc nghim cho thy: thi gian tnh ton ca lp trnh song song
l nhanh hn so vi lp trnh tun t. Khi kch thc ma trn cng ln th thi gian
tnh ton ca lp trnh song song cng nhanh hn so vi lp trnh tun t. Tc ca
lp trnh song song ln gp 2 ln so vi tnh ton tun t.
Tuy nhin, do vic i su vo tip cn ng dng ca OpenMP cn hn ch cha
th khai thc ht cc ch th, cc hm th vin v cc bin mi trng nhm mc ch
phn phi nhim v mt cch hp l cho cc b x l song song hiu qu hn, ti
u hn na cho bi ton nhn ma trn ny.

Ti liu tham kho


[1] JOURNAL OF COMPUTATIONAL BIOLOGY Volume 7, Numbers 3/4, 2000
Mary Ann Liebert, Inc. Pp. 331343 Algorithms for Identifying Boolean Networks and
Related Biological Networks Based on Matrix Multiplication and Fingerprint Function
TATSUYA AKUTSU, SATORU MIYANO, and SATORU KUHARA
[2] Rohit Chandra, Leonardo Dagum, Dave Kohr, Dror Maydan, Jeff McDonald,
Ramesh Menon. Parallel Programming in OpenMP
[3] http://www.llnl.gov/computing/tutorials/parallel_comp
[4] http://www.openmp.org
[5] http://www.llnl/computing/tutorials/workshop/openmp/
[6] http://www hpcc.unical.it/alarico/LNErbacci2.pdf
[7] http://nereida.deicc.ull.es/html/openmp/minnrsota/tutorial/content_openmp.html

Page 14

Ph lc 1: Source Code nhn hai ma trn khng s dng OpenMP


// Matrix Mul without omp.cpp : Defines the entry point for the console application.
//
// Nhan hai ma tran khong su dung OpenMP
#include "StdAfx.h"
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <float.h>
#define N 4000 // Kich thuoc ma tran NxN
int main()
{
int **a,**b,**c;
clock_t start,end; //Bien thoi gian
int i,j,k;
double dif; // Bien qui doi thoi gian ra giay
//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 tong
c=(int **) malloc(10*N);
for( i=0;i< N; i++)
{
c[i]=(int *) malloc(10*N);
}
printf("Khoi tao ma tran...\n");
start =clock();
//Bat dau dem thoi gian
//Khoi tao ma tran A
for(i=0;i<N; i++)
{
for(j=0;j<N; j++)
{
a[i][j] = i+j;
}
}
//Khoi tao ma tran B
for(i=0;i<N; i++)
{
for(j=0;j<N; j++)
{
b[i][j] = i*j;
}
}
//Khoi tao ma tran C
for(i=0;i<N; i++)
{
for(j=0;j< N; j++)
{
c[i][j]=0;
}
}

Page 15

printf("Nhan hai ma tran.....\n");


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];
}
}
}
end= clock(); //Thoi gian ket thuc
dif = ((double) (end - start)) / CLOCKS_PER_SEC; //Qui doi thoi gian ra giay
printf("Xong. Thoi gian thuc hien het: %f giay.\n", dif);
// Tien hanh giai phong bo nho cho cac ma tran da cap phat
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]);
}
free(c);
getch();
}

Ph lc 2: Source Code nhn hai ma trn s dng OpenMP


/ 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 bo mng 2 chiu 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 dng chia trong vong lap For
double dif;
//Bien luu thoi gian tinh toan
int i,j,k;
// 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);

Page 16

}
/* 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
/* 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++)
{
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];
}

Page 17

}
}
} /*****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]);
}
free(c);
getch();
}

Page 18

You might also like