环境: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 ", 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 ", omp_get_thread_num()); 8 fprintf(stdout, "%5d ", i); 9 }
其中, omp_get_num_procs() 获取计算单元总个数, omp_get_thread_num() 获取当前线程编号。我的结果如下: