当前位置:范文大全 > 公文范文 > 里仁多核程序设计实验报告

里仁多核程序设计实验报告

发布时间:2021-10-21 10:53:11

里仁多核程序设计实验报告 本文关键词:多核,程序设计,实验,报告

里仁多核程序设计实验报告 本文简介:多核程序设计实验报告Multi-coreProgrammingExperimentReport学生所在学院:里仁学院学生所在班级:学生姓名:学生学号:指导教师:教务处2014年4月实验一Windows多线程编程模块一:基础练习一.实验目的与要求二.实验环境及软件三.实验内容四.实验代码·#inclu

里仁多核程序设计实验报告 本文内容:

多核程序设计实验报告

Multi-core

Programming

Experiment

Report

学生所在学院:

里仁学院

学生所在班级:

2014年

4

实验一

Windows多线程编程

模块一:基础练习

一.

实验目的与要求

二.

实验环境及软件

三.

实验内容

四.

实验代码

·

#include

·

#include

·

#include

·

#include

·

void

test(int

n)

·

{

·

for

(int

i

=

0;

i

#include

#include

#define

NN

2000

int

A[NN][NN],B[NN][NN];

long

long

C[NN][NN];

void

solve(int

n,int

num_thread){

int

i,j,t,k,paralleltime,serialtime;

clock_t

startTime,endTime;

long

long

sum;

omp_set_num_threads(num_thread);

//--------------对矩阵A和矩阵B进行初始化-------------

for

(i

=

0;

i

#include

#include

#include

using

namespace

std;

static

long

num_steps=1000000000;//定义所分的块数

#define

NUM_THREADS

2

//定义所开启的线程数

int

_tmain(int

argc,_TCHAR*

argv[])

{

int

i;

omp_set_num_threads(NUM_THREADS);//开启线程

double

x,sum=0.0,pi;

clock_t

start_time,end_time;

double

step=1.0/(double)num_steps;

//并行--------------------------------------

start_time=clock();

#pragma

omp

parallel

sections

reduction(+:sum)

private(x,i)

{

#pragma

omp

section

{

for

(i=omp_get_thread_num();i

#include

#include

#include

#include

“omp.h“using

namespace

std;

//int

count=0;

void

swap(int

tmp

=

a;

a

=

b;

b

=

tmp;

}

void

quicksort(intA,int

l,int

u)

{

int

i,m,k;

if

(l

>=

u)

return;

m

=

l;

for

(i

=

l

+

1;

i

<=

u;

i++)

if

(A[i]

<

A[l])

/*不管是选第一个元素作为pivot还是最后一个作为pivot,假如我们想得到的是从小到大的序列,那么最坏的输入情况就是从大到小的;如果我们想得到从大到小的序列,那个最坏的输入情况就是从小到大的序列*/

swap(A[++m],A[i]);

swap(A[l],A[m]);

quicksort(A,l,m

-

1);

quicksort(A,m

+

1,u);

}

void

main(int

argc,charargv)

{

omp_set_num_threads(2);//----------------设置线程数为2,因为是双核的CPU

int

k

=

0,i

=

0;

int

m

=

0,n

=

0;

double

cost

=

0;

int

len

=

10000;

int

short_len

=

len

/

2;

int

B[10000],C[10000],D[5000],E[5000];//--------将B[]分为两个小的数组,并行的对他们调用快速排序算法

#pragma

omp

parallel

default(none)

shared(B,C,len)

private(i)//---这个for循环是并行的

{

int

j

=

50000;

#pragma

omp

for

for

(i

=

0;

i

i++)

{

B[i]

=

j--;

C[i]

=

j--;

//初始化B[],C[]数组

}

}

clock_t

begin

=

clock();//----------------计时开始点

#pragma

omp

parallel

default(none)

shared(B,D,E,short_len)

private(i)//---这个for循环是并行的

{

#pragma

omp

for

for

(i

=

0;

i

i++)//---这个for循环是并行的

{

D[i]

=

B[i];//将B[]的前5000个数放入D[]

E[i]

=

B[i

+

5000];//将B[]的后5000个数放入E[]

}

}

#pragma

omp

parallel

default(none)

shared(E,D,short_len)

//private(i)------快速排序的并行region

{

#pragma

omp

parallel

sections

{

#pragma

omp

section

quicksort(D,0,short_len

-

1);//对D[]排序

#pragma

omp

section

quicksort(E,0,short_len

-

1);//对E[]排序

}

}

for

(;

k

k++)//----------将D[]和E[]进行归并排序放入B[]里面

{

if

(m

n++;

}

else

{

B[k]

=

E[m];

m++;

}

}

if

(m

==

short_len

||

n

==

short_len)

{

if

(m

==

short_len)

B[k]

=

E[m];

else

B[k]

=

D[n

-

1];

k

+=

1;

break;

}

}

if

(/*m==short_len

for

(int

p

=

0;

p

p++)

{

B[k]

=

D[n];

n++;

k++;

}

}

else

if

(/*n==short_len

for

(int

q

=

0;

q

q++)

{

B[k]

=

E[m];

m++;

k++;

}

}//----------------------------归并算法结束

clock_t

end

=

clock();//----------------计时结束点

cost

=

(double)(end

-

begin);

cout

<<

“并行时间“<<

cost

<<

endl;

//串行开始

begin

=

clock();

quicksort(C,0,len

-

1);

end

=

clock();

cost

=

(double)(end

-

begin);

cout

<<

“串行时间“<<

cost

<<

endl;

system(“pause“);

实验结果:

封面设计:

贾丽

址:中国河北省秦皇岛市河北大街438号

编:066004

话:0335-8057068

真:0335-8057068

址:http://jwc.ysu.edu.cn

-

10

-

版权所有:蓬勃范文网 2010-2024 未经授权禁止复制或建立镜像[蓬勃范文网]所有资源完全免费共享

Powered by 蓬勃范文网 © All Rights Reserved.。蜀ICP备20021444号