并行计算第一次实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

并行计算上机实验报告题目:多线程计算Pi值

学生姓名

学院名称计算机学院

专业计算机科学与技术时间

一. 实验目的

1、掌握集群任务提交方式;

2、掌握多线程编程。

二.实验内容

1、通过下图中的近似公式,使用多线程编程实现pi的计算;

2、通过控制变量N的数值以及线程的数量,观察程序的执行效率。

三.实现方法

1. 下载配置SSH客户端

2. 用多线程编写pi代码

3. 通过文件传输界面,将文件上传到集群上

4.将命令行目录切换至data,对.c文件进行编译

5.编写PBS脚本,提交作业

6.实验代码如下:

#include

#include

#include

#include

#include

#include

static double PI=0;

static int N=0;

static int numOfThread=0;

static int length=0;

static int timeUsed=0;

static int numOfThreadArray[]={1,2,4,6,8,10,12,14,16,20,24,30};

static int threadArraySize=12;

static int nTime=4;

static int repeatTime=30;

static double totalTime=0;

struct timeval tvpre, tvafter;

pthread_mutex_t mut;

clockid_t startTime,endTime;

void cmpu(int i)

{

double p=0;

int k;

for(k=i*length;k<(i+1)*length;k++)

{

p+=4.0/((double)(1+(pow((k+0.5)/N,2 )))); }

p=p/N;

pthread_mutex_lock(&mut);

PI+=p;

pthread_mutex_unlock(&mut);

}

void mu()

{

gettimeofday(&tvpre, NULL);

startTime=clock();

pthread_t *myThread;

myThread=(pthread_t*)malloc((sizeof(pthread_t)*numOfThread) );

int i;

int res;

for(i=0;i

{

res=pthread_create(&myThread[i],NULL,cmpu,i);

if(res!=0)

{

perror("Thread join failed");

}

}

for(i=0;i

{

pthread_join(myThread[i],NULL);

}

int left;

for(left=(length*numOfThread);left

PI+=4.0/((double)(1+(pow((left+0.5)/N,2 ))))/N;

}

endTime=clock();

timeUsed=endTime-startTime;

gettimeofday(&tvafter, NULL);

}

void printResult()

{

printf("N is %d , num of threads is %d\n",N,numOfThread); printf("Pi is %0.15f \n Used time %d ms\n",PI,(timeUsed)); printf("cost time: %ld msecond\n", (__sec)*1000+(_usec-tvpre.t v_usec)/1000);

}

void mainPro(int ns,int n_thread,FILE *fp)

{

N=ns;

numOfThread=n_thread;

PI=0;

length=N/numOfThread;

mu();

}

void main(int arg,char **args)

{

N=100000;

FILE *fp=fopen("myLog.xls","a");

int i=0;

for(i=0;i

{

N=N*10;

int j=0;

for(j=0;j

{

numOfThread=numOfThreadArray[j];

totalTime=0;

int q=0;

for(q=0;q

{

mainPro(N,numOfThread,fp);

相关文档
最新文档