openMP块和缓存大小

时间:2013-06-18 08:47:57

标签: caching fortran openmp

我有一个简单的Fortran代码,它执行矩阵乘法,并与OpenMP并行化,如此

!$OMP PARALLEL DO PRIVATE(...) SHARED(...) SCHEDULE(STATIC,N/128)

使块大小相对较大,块的数量是处理器数量的倍数(4,8,16等)

然而,当矩阵大小变得非常大时,将块大小设置为小于缓存大小似乎更合乎逻辑(至少,值得尝试)。是否有一种简单的方法来编写考虑处理器缓存大小的可移植代码?或者OpenMP不支持它?

1 个答案:

答案 0 :(得分:1)

这实际上取决于您的算法和您的问题。我建议你寻找所谓的平铺算法并在你自己设置的瓷砖上循环以获得合适的尺寸。我使用这样的东西进行有限差分模板计算:

   !$omp do
   do bk = 1,nz,tilenz
    do bj = 1,ny,tileny
     do bi = 1,nx,tilenx
      do k = bk,min(bk+tilenz-1,nz)
       do j = bj,min(bj+tileny-1,ny)
        do i = bi,min(bi+tilenx-1,nx)
          do something with array element A(i,j,k) and its neighbours

其中tilenxtilenytilenz是图块的xyz尺寸。

如何在文献中组织计算有更多先进的方法。