Visual Studio 2015 OpenMP: (1) 初涉江湖

Posted on 2016-03-22 12:12  morxio  阅读(1836)  评论(0编辑  收藏  举报

环境:Windows 10 + Visual Studio 2015 Community

第一步:新建win32 console project

第二步:新建cpp文件,填入类似hello world的代码:

 1 #include <iostream>
 2 #include <time.h>
 3 #include <omp.h>
 4 
 5 void sumintegrers()
 6 {
 7     int a = 0;
 8     for (int i = 0; i < 1e8; ++i)
 9     {
10         ++a;
11     }
12 }
13 
14 
15 int main()
16 {
17     clock_t t1 = clock();
18 
19 #pragma omp parallel for
20     for (int i = 0; i < 8; ++i)
21     {
22         sumintegrers();
23     }
24 
25     clock_t t2 = clock();
26 
27     std::cout << "time: " << t2 - t1 << std::endl;
28 }

第三步,打开工程属性->C/C++下Language页面,将Open MP Support状态修改为Yes (/openmp).

即可。在我的电脑上运行时间是200ms.

 

对于这个例子, #include <openmp.h> 可以不要。

 

此外,还有一个很好玩的可以测试线程执行顺序的代码:

1 int NUMofProcs = omp_get_num_procs();
2 fprintf(stdout, "Number of Processors: %3d\n", NUMofProcs);
3 
4 #pragma omp parallel for
5     for (int i = 0; i < NUMofProcs; ++i)
6     {
7         fprintf (stdout, "ID of the curret thread: %d\n", omp_get_thread_num());
8         fprintf(stdout, "%5d\n", i);
9     }

其中, omp_get_num_procs() 获取计算单元总个数, omp_get_thread_num() 获取当前线程编号。我的结果如下: