高性能计算报告

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

高性能计算实验报告

学生姓名:X X

学号:XXXXXXXXXX

班号:116122

指导教师:郭明强

中国地质大学(武汉)信息工程学院

第一题

1.编写console程序

2.由下图看出,电脑是双核CPU

3.多线程程序,利用windowsAPI函数创建线程

代码

#include"stdafx.h"

#include

#include"windows.h"

usingnamespace std;

DWORD WINAPI first(PVOID pParam)

{

for (int i = 0;i < 10;i++)

{

printf("1\n");

}

return 0;

}

DWORD WINAPI second(PVOID pParam)

{

for (int i = 0;i < 10;i++)

{

printf("2\n");

}

return 0;

}

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

{

HANDLE hHandle_Calc[2];

hHandle_Calc[0] = CreateThread(NULL, 0, first, NULL, 0, NULL);

hHandle_Calc[1] = CreateThread(NULL, 0, second, NULL, 0, NULL);

WaitForMultipleObjects(2, hHandle_Calc, true, INFINITE);

}

第二题多线程实现计算e和π的乘积

代码

#include"stdafx.h"

#include"windows.h"

#define num_steps 2000000

#include

usingnamespace std;

//计算e

DWORD WINAPI ThreadCalc_E(PVOID pParam)//计算e子函数{

double factorial = 1;

int i = 1;

double e = 1;

for (;i

{

factorial *= i;

e += 1.0 / factorial;

}

*((double*)pParam) = e;

printf("e done E =%2.5f\n", e);

return 0;

}

//计算PI

DWORD WINAPI ThreadCalc_PI(PVOID pParam)//计算pi子函数{

int i = 0;

double pi = 0;

for (;i

{

pi += 1.0 / (i*4.0 + 1.0);

pi -= 1.0 / (i*4.0 + 3.0);

}

pi = pi*4.0;

*((double*)pParam) = pi;

printf("pi done PI = %2.5f\n", pi);

return 0;

}

int main(int argc,char * argv[])//进程的主线程入口点

{

HANDLE hHandle_Calc[2];

double result_e, result_pi;

hHandle_Calc[0] = CreateThread(NULL, 0, ThreadCalc_E, (void*)(&result_e), 0, NULL);

hHandle_Calc[1] = CreateThread(NULL, 0, ThreadCalc_PI, (void*)(&result_pi), 0, NULL);

//附加线程的创建

WaitForMultipleObjects(2, hHandle_Calc, true, INFINITE);

//等待子线程计算结束

printf("e* pi = %2.5f\n", result_e*result_pi);//打印出e*pi结果

return 0;

}

第三题

1.Parallel语句

#include"stdafx.h"

#include"windows.h"

#include"omp.h"

#include

usingnamespace std;

void main()

{

#pragma omp parallel num_threads(8)

{

printf("Hello, World!, ThreadId=%d\n", omp_get_thread_num());

}

}

2.For语句

#include"stdafx.h"

#include"windows.h"

#include"omp.h"

#include

usingnamespace std;

void main()

{

int j = 0;

#pragma omp parallel

{

#pragma omp for

for (j = 0;j < 4;j++) {

printf("j=%d,threadid=%d\n", j, omp_get_thread_num());

}

}

相关文档
最新文档