用于加速器的 OpenMP 4.0:Nvidia GPU 目标
OpenMP 4.0 for accelerators: Nvidia GPU target
我正在尝试在 Visual Studio 2012 年使用英特尔 C++ 15.0 编译器将 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()
函数应该 return 我系统中潜在加速器的数量)
我得到的是以下错误和警告:
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 功能)
任何帮助将不胜感激。
第一个问题:ICC 仅支持英特尔 MIC 卸载。因此,您不能使用带有 ICC 的 OpenMP 4.0 来对 Nvidia GPU 进行编程。
我的知识可能已经过时,但唯一可用的针对 Nvidia GPU 的 OpenMP 4.0 编译器是 Cray 随其集群一起销售的 Cray 编译器。也许 PGI 编译器可以支持 OpenMP 4.0,但这是一个大胆的猜测。无论如何,Windows 平台不支持这些编译器。
OpenMP 4.0 支持 Nvidia GPU 作为加速器。您真正想知道的是您的特定编译器对 OpenMP 的实现是否支持它。如果您坚持使用 MSVC(甚至在后面使用英特尔编译器),那么答案是否定的。你可能想看看 this 但是看看它是如何与 clang 一起工作的。
我正在尝试在 Visual Studio 2012 年使用英特尔 C++ 15.0 编译器将 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()
函数应该 return 我系统中潜在加速器的数量)
我得到的是以下错误和警告:
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 功能)
任何帮助将不胜感激。
第一个问题:ICC 仅支持英特尔 MIC 卸载。因此,您不能使用带有 ICC 的 OpenMP 4.0 来对 Nvidia GPU 进行编程。
我的知识可能已经过时,但唯一可用的针对 Nvidia GPU 的 OpenMP 4.0 编译器是 Cray 随其集群一起销售的 Cray 编译器。也许 PGI 编译器可以支持 OpenMP 4.0,但这是一个大胆的猜测。无论如何,Windows 平台不支持这些编译器。
OpenMP 4.0 支持 Nvidia GPU 作为加速器。您真正想知道的是您的特定编译器对 OpenMP 的实现是否支持它。如果您坚持使用 MSVC(甚至在后面使用英特尔编译器),那么答案是否定的。你可能想看看 this 但是看看它是如何与 clang 一起工作的。