我们有一个非结构化四面体网格文件,其中包含以下格式:
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中实现上述代码?
答案 0 :(得分:1)
最佳解决方案是使用图形着色将网格划分为子域。每种颜色都具有以下特性:其中的元素可以在没有记忆竞赛的情况下并行组装。使用这种方法,您只需要通过网格的次数与颜色一样多,以便完成装配。
有大量关于并行有限元装配的文献,以及许多非常好的图形分区代码(例如Metis)。谷歌学者可能是开始学习这项技术的最佳场所。