【问题标题】:OpenMP 4.0 for accelerators: Nvidia GPU target用于加速器的 OpenMP 4.0:Nvidia GPU 目标
【发布时间】:2016-12-23 23:29:41
【问题描述】:

我正在尝试使用英特尔 C++ 15.0 编译器在 Visual Studio 2012 中将 openMP 用于加速器 (openMP 4.0)。

我的加速器是 Nvidia GeForce GTX 670。

此代码无法编译:

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

using namespace std;

int main(){
    #pragma omp target
    #pragma omp parallel for
        for (int i=0; i<1000; i++)
            cout<<"Hello world, i am number "<< i <<endl;
    }

当然,当我评论 #pragma omp target 行时,一切都很好。

当我在 OpenMP 4.0 规范中执行与加速器相关的任何事情时遇到同样的问题(例如,omp_get_num_devices() 函数应该返回我系统中潜在加速器的数量)

我得到的是以下错误和警告:

error #10340: problem encountered when performing target compilation
error : *MIC* cannot open source file "stdio.h"

warning #10362: Environment configuration problem encountered.  Please check for proper MPSS installation and environment setup.

由于*MIC* 标签,这是我的理论:默认情况下,我的英特尔编译器正在尝试构建一个 MIC 应用程序(用于 Xeon Phi 加速器)并且不接受我的 Nvidia GPU 作为有效的加速器。这可能性有多大?这是我可以在我的 VS 项目属性中管理的东西吗?

如果不是,我可能会遇到更严重的问题:OpenMP 4.0 是否支持 Nvidia GPU 作为加速器?(我知道 OpenACC 就是为此目的而设计的,但出于经济原因,我更愿意使用我可以使用的所有 OpenMP 功能)

任何帮助将不胜感激。

【问题讨论】:

标签: c++ visual-studio-2012 openmp intel gpgpu


【解决方案1】:

对于您的第一个问题:ICC 仅支持英特尔 MIC 进行卸载。因此,您不能使用带有 ICC 的 OpenMP 4.0 来对您的 Nvidia GPU 进行编程。

我的知识可能已经过时,但唯一可用的针对 Nvidia GPU 的 OpenMP 4.0 编译器是 Cray 编译器 Cray 与他们的集群一起销售。也许 PGI 编译器可以支持 OpenMP 4.0,但这是一个疯狂的猜测。无论如何,Windows 平台不支持这些编译器。

【讨论】:

    【解决方案2】:

    OpenMP 4.0 确实支持 Nvidia GPU 作为加速器。您真正想知道您的特定编译器对 OpenMP 的实现是否支持它。如果你坚持使用 MSVC(即使在后面使用英特尔编译器),那么答案是否定的。不过,您可能想查看 this 以了解它如何与 clang 一起使用。

    【讨论】:

      猜你喜欢
      • 2015-05-31
      • 2021-04-20
      • 1970-01-01
      • 2020-09-18
      • 2021-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-10
      相关资源
      最近更新 更多