我将一个矩阵的行乘以该行的主对角线元素的逆数。我已经用一维并行代码实现了它。所有线程都运行此代码
1.read the principle diagonal element
2.calculate the inverse of that element
3.multiply inverse with the element indexed at the thread id当第i行中的第i个线程在其他线程执行步骤1之前执行步骤3时,问题就出现了。它在其他线程可以读取主对角线元素之前更改了它的值。
OpenCL是否有任何屏障,只允许一个线程在所有线程执行步骤1之后执行步骤3?
我不想使用空循环,因为在最坏的情况下,它可能会失败。
发布于 2017-04-14 22:49:46
一种方法是添加barrier(CLK_CL_LOCAL_MEM_FENCE)。
另一种方法是将工作放在两个内核中,但您可以将从步骤1的内核计算的cl_mem直接传递到步骤3的kernel.This不会导致CPU/GPU。
对角线矩阵乘以稠密矩阵是一组点积,可以使用reduce来完成。这将使您的函数更快。
https://stackoverflow.com/questions/43320591
复制相似问题