文档介绍:实验二:OpenMP多线程编程
模块一:基础练习
编译执行,执行结果:
(1)
简答与思考:
写出关键的并行代码
四个线程各自执行6次迭代。
// : 定¡§义°?控?制?台¬¡§应®|用®?程¨¬序¨°的Ì?入¨?口¨²点Ì?。¡ê
//wirtten by Cosmos Wang
//2010-12-16
#include ""
#include <>
int _tmain(int argc, _TCHAR* argv[])
{
printf("Hello World \n");
#pragma omp parallel
{
for(int i=0; i<6; i++)
{
printf("Iter:%d Thread%d\n ",i,omp_get_thread_num());
}
}
printf("GoodBye World\n");
return 0;
}
(2)
四个线程协同完成6次迭代。
// : 定¡§义°?控?制?台¬¡§应®|用®?程¨¬序¨°的Ì?入¨?口¨²点Ì?。¡ê
//wirtten by Cosmos Wang
//2010-12-16
#include ""
#include <>
int _tmain(int argc, _TCHAR* argv[])
{
printf("Hello World \n");
#pragma omp parallel
{
#pragma omp for
for(int i=0; i<6; i++)
{
printf("Iter:%d Thread%d\n ",i,omp_get_thread_num());
}
}
printf("GoodBye World\n");
return 0;
}
(3)
附加练习:
编译执行下面的代码,写出两种可能的执行结果和一种不可能的执行结果。
int i=0,j = 0;
#pragma omp parallel for
for ( i= 2; i < 7; i++ )
for ( j= 3; j< 5; j++ )
printf(“i = %d, j = %d\n”, i, j);
(4)
(5)
编译执行下面的代码,写出两种可能的执行结果和一种不可能的执行结果。
int i=0,j = 0;
for ( i= 2; i < 7; i++ )
#pragma omp parallel for
for ( j= 3; j< 5; j++ )
printf(“i = %d, j = %d\n”, i, j);
(6)
分析上述两段代码的不同并行效果。
(1)代码,”#pragma omp parallel for”为并行区域只对外层循环起作用,因此外层循环 i 值出现的比较随机。
而”#pragma omp parallel for”对内层的循环不起作用,执行方式仍然是串行方式,于是内层循环的出现还是固定的先3 后4。
(2)代码