NVIDIA GPU 支持分支预测? (使用 OpenACC)

NVIDIA GPU support branch prediction? (with OpenACC)

我正在使用带有 OpenACC 的 NVIDIA GPU (NVIDIA GeForce960, compiler:PGI 15.7)

NVIDIA GPU 支持分支预测吗? 我的代码在长循环中有条件执行代码。但是当我 运行 我的代码在 GPU 上时,需要很长时间。

下面是示例代码。

#pragma acc parallel loop
for(i=0; i<1000; i++)  // NVIDIA GPU kernel with OpenACC
   for(j=0; j<1000; j++)
      if(a[i][j]==value)
         // do something...
      else if(a[i][j]==value2)
         // do another something...
      else
         // do another something...

如果此代码被编译并且 运行 on CPU,CPU 将对条件执行循环进行分支预测。 NVIDIA GPU是否具有与CPU的分支预测相同或相似的技能?

如果有,我该如何启用它?

附加问题:

PGI 15.7 编译器是否可以为 GPU 编译优化代码? 我知道通常的编译器(gcc...等)可以使用优化技巧进行编译,例如更改条件代码执行顺序。

Is NVIDIA GPU has same or similar skills like CPU's branch prediction?

当前的 NVIDIA GPU 不支持分支预测。

Is PGI 15.7 compiler can compile optimized code for GPU?

是的,PGI 工具可以执行各种优化。这是通过 -Ox 命令行开关(例如 -O3)在高级别控制的,就像 gcc/g++ 一样。这种优化可以发生在编译的各个阶段,例如 OpenACC 源代码到 CUDA PTX 的转换,以及 CUDA PTX 到 CUDA 的转换 SASS.