我们可以将 OpenMp 卸载到任何英特尔 GPU 吗?
Can we offload OpenMp to any Intel GPU?
我正在使用 Ubuntu 14.04.
- 有没有办法使用 openMp 并将并行代码卸载到英特尔 GPU(例如英特尔高清显卡)中?
如果是:
我需要哪个 icc 版本? (我可以用 gcc 做吗?)
支持哪些英特尔处理器?
据我所知,您只能在 Intel MIC/Xeon Phi 上卸载 OpenMP 代码。
然而在(接近?)未来 OpenMP 4 应该提供这种功能(参见 post)。
所以Intel HD graphics上的GPGPU我认为目前只能用OpenCL和Intel CILK来完成。
一些 OpenMP 4 构造在带有英特尔 C/C++ 编译器的英特尔 GPU 上工作。
我已经在 Xeon E3 上测试了以下代码,可能是 Haswell (v3) 代和英特尔编译器版本 15 或 16(可能是后者)。我在 Linux 上测试,发现它在 Mac.
上不受支持
void vadd4(int n, float * RESTRICT a, float * RESTRICT b, float * RESTRICT c)
{
#if defined(_OPENMP) && (_OPENMP >= 201307)
//#pragma omp target teams distribute map(to:n,a[0:n],b[0:n]) map(from:c[0:n])
#pragma omp target map(to:n,a[0:n],b[0:n]) map(from:c[0:n])
#pragma omp parallel for simd
#else
#warning No OpenMP target/simd support!
#pragma omp parallel for
#endif
for(int i = 0; i < n; i++)
c[i] = a[i] + b[i];
}
我用来评估英特尔 GPU 计算软件的完整测试代码是 https://github.com/jeffhammond/HPCInfo/blob/master/openmp/offload/test_vadd.c。
遗憾的是,-qopenmp-offload=gfx
目标不支持 distribute
和 teams
,因此需要进行一些预处理以生成功能可移植的代码。
其他文档包括:
- https://software.intel.com/en-us/articles/how-to-offload-computation-to-intelr-graphics-technology
- https://software.intel.com/en-us/articles/pldi-tutorial-using-the-intelr-c-compiler-for-general-purpose-computation-offload-to-intelr
免责声明:我在英特尔工作,但从事研究工作。我不负责实施或支持英特尔编译器或英特尔 GPU 软件。
我正在使用 Ubuntu 14.04.
- 有没有办法使用 openMp 并将并行代码卸载到英特尔 GPU(例如英特尔高清显卡)中?
如果是:
我需要哪个 icc 版本? (我可以用 gcc 做吗?)
支持哪些英特尔处理器?
据我所知,您只能在 Intel MIC/Xeon Phi 上卸载 OpenMP 代码。
然而在(接近?)未来 OpenMP 4 应该提供这种功能(参见 post)。
所以Intel HD graphics上的GPGPU我认为目前只能用OpenCL和Intel CILK来完成。
一些 OpenMP 4 构造在带有英特尔 C/C++ 编译器的英特尔 GPU 上工作。
我已经在 Xeon E3 上测试了以下代码,可能是 Haswell (v3) 代和英特尔编译器版本 15 或 16(可能是后者)。我在 Linux 上测试,发现它在 Mac.
上不受支持void vadd4(int n, float * RESTRICT a, float * RESTRICT b, float * RESTRICT c)
{
#if defined(_OPENMP) && (_OPENMP >= 201307)
//#pragma omp target teams distribute map(to:n,a[0:n],b[0:n]) map(from:c[0:n])
#pragma omp target map(to:n,a[0:n],b[0:n]) map(from:c[0:n])
#pragma omp parallel for simd
#else
#warning No OpenMP target/simd support!
#pragma omp parallel for
#endif
for(int i = 0; i < n; i++)
c[i] = a[i] + b[i];
}
我用来评估英特尔 GPU 计算软件的完整测试代码是 https://github.com/jeffhammond/HPCInfo/blob/master/openmp/offload/test_vadd.c。
遗憾的是,-qopenmp-offload=gfx
目标不支持 distribute
和 teams
,因此需要进行一些预处理以生成功能可移植的代码。
其他文档包括:
- https://software.intel.com/en-us/articles/how-to-offload-computation-to-intelr-graphics-technology
- https://software.intel.com/en-us/articles/pldi-tutorial-using-the-intelr-c-compiler-for-general-purpose-computation-offload-to-intelr
免责声明:我在英特尔工作,但从事研究工作。我不负责实施或支持英特尔编译器或英特尔 GPU 软件。