有限元装配中CUDA GPU的缩减代码

时间:2011-11-12 06:09:36

标签: assembly cuda element

我们有一个非结构化四面体网格文件,其中包含以下格式:

element-ID  nod1 nod2 nod3 nod4

1            452  3434 322 9000

2           2322   837 6673 2323

.
.
.

300000

所以是C函数

calc()
{

   for (int i=1;i<=no-of-elements;i++)
   {
      n1=nod1[i];
      n2=nod2[i];
      n3=nod3[i];
      n4=nod4[i];

      ax[n1] += some code;

      ax[n2] += some code;

      ax[n3] += some code;

      ax[n4] += some code;

   }

}

如何以无竞赛条件的方式或在CUDA上的任何其他替代方式在特斯拉的CUDA中实现上述代码?

1 个答案:

答案 0 :(得分:1)

最佳解决方案是使用图形着色将网格划分为子域。每种颜色都具有以下特性:其中的元素可以在没有记忆竞赛的情况下并行组装。使用这种方法,您只需要通过网格的次数与颜色一样多,以便完成装配。

有大量关于并行有限元装配的文献,以及许多非常好的图形分区代码(例如Metis)。谷歌学者可能是开始学习这项技术的最佳场所。