高性能计算报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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()); } }