【问题标题】:Visual studio 2015 openmp supportVisual Studio 2015 openmp 支持
【发布时间】:2016-06-05 08:54:39
【问题描述】:

我无法在 Visual Studio 2015 中获得 OpenMP 支持。

我已经配置项目选项使用/openmp (project->properties->C/C++->language->OpenMP support:yes),代码如下(很简单的代码,用来测试OpenMP):

#include <iostream>
#include <omp.h>

int main(int argc, char* argv[])
{
    int n = 0;

#pragma omp parallel
    {
        std::cout << std::endl << "Hello World!";
    }
    return 0;
}

只有一个线程运行并且“Hello World!”只打印一次。

【问题讨论】:

  • 您应该使用omp_get_num_threads 函数检查可用的线程数,如果结果为1,则使用omp_set_num_threads 设置您想要的线程数。还有其他方法可以设置 OpenMP 的线程数。
  • 是的,我之前尝试过,仍然只有一个线程。将添加 num_threads(4) 设置到 #pragma omp 并行指令的结果相同:单线程,单打印。我在网上看到一些信息,不是所有版本的 VS 都支持 OpenMP,所以我想这是因为我使用的是 VS2015 社区。​​span>

标签: c++ visual-studio-2015 openmp


【解决方案1】:

部分答案:我无法让编译器通过 config/GUI 接受 /openmp,但在控制台中使用 cl.exe /openmp 编译可以工作。

【讨论】:

    【解决方案2】:

    我能够在具有 OpenMP 支持的 Windows 8.1 64bit 上使用 VS2015 Community Version 14.0 Update 1 编译程序。

    请按照以下可能有帮助的步骤进行操作:

    • 新建项目并粘贴源代码后,前往

    Project-&gt; Properties -&gt; C/C++ -&gt; Language

    Open MP Support 更改为Yes(/openmp)

    点击Apply

    • 在左侧菜单中,转到Command Line 并确认/openmp 出现在编译器选项的某处。

    如果出现,请单击Ok 并构建项目。


    在运行程序之前,在该行下一个断点:

    int n = 0;

    点击Local Windows Debugger运行程序

    当程序在断点处停止时,转到Debug -&gt; Windows -&gt; Disassembly

    在断点附近的某个地方,寻找一条装配线,例如:

    call __vcomp_fork (?????????h)

    如果你找到这条线,很可能是 openmp 正常并且正在运行。


    其他一些可以提供帮助的检查:

    从 Windows Sysinternals 获取工具,例如 Process Explorer (GUI)ListDLLs (command line)

    列出DLL:

    程序停在断点处,打开任务管理器,查找进程的PID

    打开命令提示符并运行命令:

    listdlls [PID] | findstr -i vcomp

    应该显示为 VCOMP140D.DLLVCOMP140.DLLVCOMP????.DLL

    如果它没有出现,可能是编译器找不到 openmp dll,所以你必须看看这个库在你的系统上是否可用。


    最后两个可以节省您时间的技巧:

    如果您更改任何配置(例如 Debug -&gt; Releasex86 -&gt; x64), 再次检查Command Line 是否设置了/openmp 选项。

    如果您尝试强制编译器使用 C 语言(而不是 C++),可能是编译指示:

    #pragma omp parallel for

    将不起作用(更新:显然这个问题在 VS2017 上不再发生)。

    它向我显示了消息:

    INTERNAL COMPILER ERROR in 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\CL.exe'

    将编译器返回到 C++ 语言,parallel for 将正常工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-29
      • 2015-10-17
      • 2018-06-02
      • 2017-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-19
      相关资源
      最近更新 更多