在有限元代码中多线程装配循环的最佳方法通常是什么?有没有人有实现这个的经验,他们可以分享?我可以想到几种方法:
将网格划分为不同的单元组,其中每个组中的元素不共享自由度,这样线程可以直接将单元刚度矩阵添加到全局刚度矩阵(无需担心它们访问相同的数据)。
将网格划分为单元组并为每个线程创建一个单独的全局刚度矩阵,然后在最后组合刚度矩阵。
不要划分为单元集,而是为每个单元生成一个新的线程/任务(如果某些元素比其他元素更昂贵,而有些元素仍然是弹性的,这可能有利于负载平衡)。
在有限元代码中多线程装配循环的最佳方法通常是什么?有没有人有实现这个的经验,他们可以分享?我可以想到几种方法:
将网格划分为不同的单元组,其中每个组中的元素不共享自由度,这样线程可以直接将单元刚度矩阵添加到全局刚度矩阵(无需担心它们访问相同的数据)。
将网格划分为单元组并为每个线程创建一个单独的全局刚度矩阵,然后在最后组合刚度矩阵。
不要划分为单元集,而是为每个单元生成一个新的线程/任务(如果某些元素比其他元素更昂贵,而有些元素仍然是弹性的,这可能有利于负载平衡)。
事实证明,关于这个主题,我有适合你的论文:https ://www.math.colostate.edu/~bangerth/publications/2013-pattern.pdf