技术开发 频道

二维稳态热传导的问题CPU/GPU并行求解

   【IT168 技术】

  注:本文为IT168&NVIDIA联合举办的“如何并行化我的应用”方案征集活动第二名。本次方案征集活动详情见:http://cuda.itpub.net/thread-1299715-1-1.html。近期活动的大部分方案,将会逐步与大家分享,不可错过哦!

  CUDA ZONE专区:http://cuda.it168.com/

  CUDA技术论坛:http://cuda.itpub.net

  热传导问题是材料成形模拟中经常需要求解的问题。热传导问题求解得到的是温度场。几乎所有材料成形模拟的过程都与温度场有关。对热传导问题的求解具有重要意义。

  1.应用背景

  制造业是一个国家的基础行业,它可以代表一个国家的工业水平。材料加工行业是制造业的重要组成部分。材料加工行业涵盖广泛,包括注塑、铸造、锻造、焊接、板料冲压等。现今,材料成形计算机模拟已经应用到材料加工行业的方方面面。材料成形模拟软件具有较强的实践指导意义,而且在规模不大问题上这种指导意义就可以体现出来。所以,国内的材料成形模拟大多仍停留在单机串行求解问题的水平上。但是,随着模拟工程的规模不断增长,工程应用对材料成形模拟软件的性能要求不断提高。为了满足实际需求,材料成形模拟软件需要实现并行化,以提高性能和求解大型问题的能力。

  无论问题规模大小,几乎所有材料成形模拟的过程都与热传导问题有关。前面提到的注塑、铸造、锻造、焊接、板料冲压的模拟都与热传导问题密切相关。这类问题的求解过程中,热传导问题的求解总是不可忽略的步骤。实践发现,在对材料成形模拟问题进行求解时,目前的计算速度和客户理想需求的差距在20倍以上。

  2.业务规模和瓶颈 以注塑模拟为例。

  当网格规模为千万网格时,求解热传导问题需要80~200分钟,如果网格规模达到一亿,则需要5到10个小时。而客户的理想需求则分别为15分钟以内和60分钟以内。在存储需求上,千万网格的数据量大约是10GB,而一亿网格的数据量将超过100GB。对于千万网格的问题规模,网格数据可以存储在大型服务器的内存中,但对于一亿网格的数据量则必须存储在硬盘中。

  根据以上描述的问题规模,热传导问题的计算瓶颈在于计算周期和数据存储。而并行计算,有望解决计算周期较长的问题。如果能对热传导问题的求解过程进行有效的并行化,则可以显著缩短材料成形模拟的整体周期。

  3.并行策略

  热传导问题的分类有多种。按是否与时间有关,可分为稳态问题和瞬态问题;按几何模型的维度,可分为二维和三维;按求解方法,又可分为Jacobi迭代法,fourier迭代法等。本文以具有代表性的二维稳态Jacobi迭代法求解热传导问题为例。

  Jacobi方法是一种有限差分迭代方法。其迭代公式为

  T(i, j) = T(i - 1, j) + T(i + 1, j) + T(i, j - 1) + T(i, j + 1)

  在Jacobi方法的迭代中,迭代计算时仅仅用到上次迭代结果中的数据,当前各个网格处的迭代计算之间没有直接关系。所以Jacobi方法具有很好的并行性。串行计算时,所有网格处的迭代计算是串行执行的。Jacobi迭代的结束条件是,前后两次迭代的误差小于指定数值。

  串行代码如下:

while(count < countGoal)

  {
  step
++;
  count
= 0;
  
for(int i = 1;i < n - 1; i++)
  
for(int j = 1; j < n - 1; j++)
  {
  w[i][j]
= (m[i - 1][j] + m[i + 1][j]
  
+ m[i][j - 1] + m[i][j + 1]) / 4.0;
  
if(fabs(w[i * n + j] - m[i * n + j]) < epsilon) count++;
  }
  temp
= m; m = w; w = temp;
  }

  并行化的策略是尽可能并行化每一迭代步内所有网格处的计算。但有由于受到处理器个数和同步开销的限制,这样做事不现实的。较为实际的策略是,将所有网格分为合适数目的网格块,各个网格块的计算并行执行。

3
相关文章