【发布时间】:2017-05-21 19:18:45
【问题描述】:
我有两个从头开始编写的程序,一个是积分,第二个是矩阵-矩阵乘法。当我使用 GPU 卡执行这两个程序并将全局大小设置为 1024 时,我希望内核代码执行 1024 次,这是正确的,它执行的次数与我在全局大小上设置的次数相同,并且更改了本地大小对结果进行编码和输出并不重要。 我试图用 CPU 执行相同的代码,当我看到内核函数执行的次数与设置的全局大小不同时我感到震惊。以下是积分的示例: 全局大小 = 2048,局部大小 = 1, 我期待内核函数执行 2048 次,是的,它是 2048, 但是当我们有全局大小 = 2048 和本地大小 = 16 时,它会执行 256 次...... 正常吗?为什么在 openCl 中使用 CPU 与使用 GPU 不同?我认为对于用户端我们使用哪种设备并不重要,相同的代码应该在不同的设备上工作相同。我错了吗?
提前感谢您的帮助!
【问题讨论】:
-
我们需要问题的Minimal, Compilable, Veriable Example。因此,请发布一些代码以及如何将其排入队列(以及使用哪个 OpenCL 驱动程序等)。通常,驱动程序应该确保执行整个网格,即本地工作大小乘以全局工作大小线程整体执行。跨度>
-
肯定是全局线程id和组id和本地线程id截取错误。您如何检查执行次数?
-
@huseyintugrulbuyukisik 我只是简单地将 +=1 添加到内核代码中的全局变量中,以查看内核执行了多少次
-
@Gzyniu 是原子的还是简单的?我的意思是,你使用 atomic_add() 还是真的 += ?
-
@huseyintugrulbuyukisik 简单的一个,但我在这里检查了 atomic_add 和相同的结果
标签: multithreading opencl gpu cpu