【问题标题】:gcc-5.2 cilk plus offload to intel gfx hardwaregcc-5.2 cilk plus 卸载到英特尔 gfx 硬件
【发布时间】:2016-04-19 02:05:16
【问题描述】:

我们可以使用 cilk plus 和 gcc-5.2 卸载到图形硬件

g++ -std=c++14 -Wall -O3 -march=native -fcilkplus vec_add.cpp -o vec_add
vec_add.cpp:6:0: warning: ignoring #pragma offload target [-Wunknown-pragmas]
 #pragma offload target(gfx) pin(out, in1, in2 : length(n))

编译器对以下测试代码给出上述警告:

#include <iostream>
#include <cilk/cilk.h>

void vec_add(int n, float *out, float *in1, float *in2)
{
#pragma offload target(gfx) pin(out, in1, in2 : length(n))
    cilk_for(int i = 0; i != n; ++i)
    {
        out[i] = in1[i] + in2[i];
    }
}

static int ar_sz = 100000;
int main (int argc, char **argv)
{
    float foo[ar_sz];
    float bar[ar_sz];
    float out[ar_sz];
    for(int i = 0; i != ar_sz; ++i)
    {
        foo[i] = i + ar_sz * 10;
        bar[i] = i;
    }
    vec_add(ar_sz, out, foo, bar);

    for(int i = 0; i != ar_sz; i += 100)
    {
        std::cout << "foo[" << i << "] =" << foo[i] << "\t|\tbar[" << i << "] =" <<  bar[i] << std::endl;
    }
}

编译

FLAGS=-std=c++14 -Wall -O3 -march=native -fcilkplus

all: vec_add fib

vec_add: vec_add.cpp
    g++ $(FLAGS) $< -o $@

【问题讨论】:

    标签: c++ gcc cilk-plus


    【解决方案1】:

    据我所知,GCC 不支持卸载 pragma,因此不可能这样做。实际上,警告消息明确表示这是一个未知的编译指示。

    【讨论】:

    • gcc 5 的发行说明声称“对 Cilk Plus 的完全支持已添加到 GCC 编译器中。Cilk Plus 是 C 和 C++ 语言的扩展,以支持数据和任务并行性。”也许那是假的?无论哪种方式,我仍然想知道“我们可以使用 cilk plus 和 gcc-5.2 卸载到图形硬件吗?”
    【解决方案2】:

    “对 Cilk Plus 的全面支持已添加到 GCC 编译器中。”这意味着完全支持 cilk plus 的语言扩展。 Gcc 根本无法卸载到英特尔集成显卡。据报道,OpenMP 可以卸载到 Xeon Phi 协处理器和 nvidia 显卡。

    https://gcc.gnu.org/ml/gcc/2016-04/msg00182.html

    【讨论】:

      猜你喜欢
      • 2015-04-08
      • 1970-01-01
      • 2014-03-27
      • 2014-09-30
      • 1970-01-01
      • 2014-06-13
      • 1970-01-01
      • 1970-01-01
      • 2015-07-05
      相关资源
      最近更新 更多