【发布时间】:2015-12-12 11:22:44
【问题描述】:
我正在使用带有 OpenACC 的 NVIDIA GPU (NVIDIA GeForce960,编译器: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...
如果此代码在 CPU 上编译并运行,CPU 将对条件执行循环进行分支预测。 NVIDIA GPU 是否具有与 CPU 的分支预测相同或相似的技能?
如果有,我该如何启用它?
补充问题:
PGI 15.7 编译器是否可以为 GPU 编译优化代码? 我知道通常的编译器(gcc...等)可以使用优化技能进行编译,例如更改条件代码执行顺序。
【问题讨论】:
-
当前 CUDA gpus 不支持分支预测。可能不是潜水到这么低的水平,而是你关心的事情是“为什么我的代码运行缓慢?”但是没有人可以根据您发布的内容来回答这个问题。
-
感谢您的回复,Robert :) 我真正想知道的是“CUDA gpu 可以做分支预测吗?”。如果可以,是否有一些开关可以启用它。但正如你所回答的,现在我知道 CUDA gpu 没有分支预测。