我们可以将 OpenMp 卸载到任何英特尔 GPU 吗?

Can we offload OpenMp to any Intel GPU?

我正在使用 Ubuntu 14.04.

  1. 有没有办法使用 openMp 并将并行代码卸载到英特尔 GPU(例如英特尔高清显卡)中?

如果是:

  1. 我需要哪个 icc 版本? (我可以用 gcc 做吗?)

  2. 支持哪些英特尔处理器?

据我所知,您只能在 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 目标不支持 distributeteams,因此需要进行一些预处理以生成功能可移植的代码。

其他文档包括:

免责声明:我在英特尔工作,但从事研究工作。我不负责实施或支持英特尔编译器或英特尔 GPU 软件。