【发布时间】:2019-01-13 20:01:13
【问题描述】:
我正在使用 CUDA 并行化 C 代码。我发现我们可以按照以下模式进行计算:
因此,我们在第一步只能计算一个标记为“1”的元素,只有在第一个元素的计算完成后,我们才能开始计算接下来的两个标记为“2”的对角线元素,因为我们有数据依赖性。其他元素以此类推...
我们解决这个问题的方法是为每一行分配一个线程,每个线程在每一步结束时执行__syncthreads(),以实现上述同步。
但是,__syncthreads() 需要很多时间。有没有其他解决方案可以解决这个问题。
编辑 1:
计算每个元素X的依赖模式如下:
这里,元素X 需要红色和绿色元素的值。
它仅依赖于红色元素(在上一次迭代中计算)。
提前致谢。
【问题讨论】:
-
您能否更具体地了解依赖模式?
nth 步骤上的每个元素是否都取决于步骤n-1上的每个元素,还是存在某种局部性? -
@SteelRaven 我已经编辑了我的问题。是的!有某种地方性。
-
@AnastasiyaAsadullayeva 此矩阵中每个元素
X的计算遵循结构,如编辑 1 中所示。此计算在顺序版本中逐行发生。我认为上面的平行对角线结构最好地解决了这种计算模式。但是,我对__syncthreads()的副作用并不满意。 -
这是一个已解决的问题(谷歌“A FAST ITERATIVE METHOD FOR EIKONAL EQUATIONS” by Whitaker and Jeong)