zoukankan      html  css  js  c++  java
  • Visual Studio 2015 OpenMP: (1) 初涉江湖

    环境: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() 获取当前线程编号。我的结果如下:

     

  • 相关阅读:
    【[CQOI2015]选数】
    杜教筛
    【[CQOI2009]跳舞】
    【简单的数学题】
    【[SDOI2013]泉】
    【[AHOI2013]差异】
    【[HEOI2016/TJOI2016]序列】
    【[SDOI2008]Sandy的卡片】
    linux系统编程之信号(一)
    linux系统编程之进程(五)
  • 原文地址:https://www.cnblogs.com/make217/p/5305771.html
Copyright © 2011-2022 走看看