让我们开始说我不能分享我的代码,因为这是为了我的工作,但我会尝试清楚发生了什么。所以基本上我的代码是一个包含大量嵌套循环和if语句的单个内核。另一件要说的是线程0总是返回并且什么都不做。所有其他工作项都按照算法处理数据。因此,当我在Stratix V FPGA或GPU上启动此代码时,我可以看到它正在按顺序运行,因为我在全局大小中增加工作项,将本地大小保持为1(如256x1),执行(线性)需要更多时间。所以我研究了,现在我知道了全局和本地大小之间的区别。因此,当我设置本地大小时,它不起作用,因为某些工作项不会被执行。所以我尝试运行一个简单的测试,我将一个向量的所有元素乘以一个预定义的值,它使用本地和全局大小(例如32x32)。所以我想知道我的算法中发生了什么?我之前在另一个代码中遇到过这个问题,但后来我解决了没有删除缓冲区并在运行时重新创建的问题,我在这里做了同样的事情。缓冲区已设置和使用。未删除并不断创建。
编辑:好了,现在我没有返回工作项目0,但它只是做与其他工作项目相同的工作。当> 1时,本地大小仍然存在问题。它可能是什么?
EDIT2:基本上我的代码(从CUDA移植)不是为工作项数量分配数据,而是为本地大小*全局大小(因为cuda)分配,这就是它没有正确执行的原因。但是现在当我并行运行它们时,随着我增加全局大小,它需要更多的时间来执行。 CUDA上的相同代码不会显示此问题。有什么理由吗?