运行 OpenMP 时 Kerrighed 集群未使用所有节点

运行 OpenMP 时 Kerrighed 集群未使用所有节点

我获得了一个最近使用 Kerrighed 构建的集群的访问权限。我是这个集群的第一个用户,因此设置和配置问题可能是可能的。我对 Kerrighed 也是完全陌生的(而且主要是对集群计算的陌生)。我在执行一些基本任务时遇到了麻烦,我想检查一下我是否正确地设想了集群应该如何运行。

具体来说,我创建了一个简单的 OpenMP 程序作为测试用例。根据我设置、编译和运行程序的方式,我预计该程序将利用集群的 24 个核心。然而,尽管更改了环境变量 OMP_NUM_THREADS 和其他 OMP 环境变量,情况并非如此。

我正在使用这个程序作为测试用例:

#include <omp.h>

#define NRA 4800                
#define NCA 1000        
#define NCB 10000

int main (int argc, char *argv[])
{
int     tid, nthreads, chunk, i, j, k;

chunk = 100;                    /* set loop iteration chunk size */
double temp;

/*** Spawn a parallel region explicitly scoping all variables ***/
#pragma omp parallel shared(nthreads,chunk) private(temp,tid,i,j,k)
  {
  tid = omp_get_thread_num();
  if (tid == 0)
    {
    nthreads = omp_get_num_threads();
    }

  /*** Put work inside inner loops, parallelize over the outer loop**/
  #pragma omp for schedule (static, chunk)
  for (i=0; i<NRA; i++)
    {
    for(j=0; j<NCB; j++)
      for (k=0; k<NCA; k++)
        temp = (i+k) * (j+k);
    }
  }   /*** End of parallel region ***/

}

然后我使用以下命令编译测试程序:

gcc-4.7 -fopenmp test.c -o omp

我将线程数设置为环境变量

$ OMP_NUM_THREADS=24 ; export OMP_NUM_THREADS

然后运行程序:

$ ./omp

查看集群使用情况时,命令 omp 仅使用 12 个核心来执行(/proc/cpuinfo 中列出了 84 个核心)。我期望我列出的步骤将导致使用 24 个核心,因为我已在真正的 SMP 机器上运行此代码作为测试,并得到了这些结果。

我在为 Kerrighed 集群编译此文件时是否做错了什么?我还有其他重大误解吗?如果没有,那么推断集群问题的下一步是什么?

谢谢你的帮助,安德鲁

答案1

建议你尝试一下这里——

https://listes.irisa.fr/sympa/arc/kerrighed.users

http://dir.gmane.org/gmane.linux.cluster.kerrighed.user

邮件列表流量较低,但一些 kerrighed 开发人员在那里回答技术问题。

由于您的 kerrighed 集群是新的,因此提供有关您的硬件(每个节点有多少个核心?确切的 CPU 型号是什么?所有节点是否相同?)以及有关 openmp/kerrighed/linux 软件版本的信息可能会有所帮助。

ps 据我所知,kerrighed 仅支持进程迁移,而不是线程迁移,这可能会混淆您的核心计数?

相关内容