我想知道如何为OpenCL中的不同设备选择最佳的本地和全局工作规模?这是AMD,NVIDIA,INTEL GPU的普遍规则吗?我应该分析设备的物理构建(多处理器的数量,多处理器中的流处理器的数量等)吗?
这取决于算法/实现吗?因为我看到一些库(如ViennaCL)评估正确的值只是测试了许多本地/全局工作量的组合并选择了最佳组合.
让我们采用简单的C++代码:
int main(){
int a = 0;
while(a<3) {
a=a++;
std::cout<<a<<std::endl;
}
}
Run Code Online (Sandbox Code Playgroud)
当g ++ 5.2.0进入无限循环并且仅打印零时,使用Visual Studio 2015打印1,2,3这个代码.
根据C++运算符优先级赋值运算符(=)具有较低的优先级,然后是后递增.这表明第一个零是赋值给变量'a',之后'a'递增,所以在第一次迭代之后a = 1.因此从VS 2015获得的结果是正确的.为什么GCC产生不同的产量?