运行 群集上的 pgc++ 程序

Running pgc++ programs on Cluster

我试图运行集群上的以下OPenACC程序:

#include <stdio.h>
#include <iostream>
using namespace std;

int main()
{
        #pragma acc parallel loop       
        for (int i=0; i<1000; i++)
        {
                //cout << i << endl;

                printf("%d ", i);
        }


        return 0;

}

上述代码的 PBS 脚本:

#PBS -e errorlog1.err
#PBS -o logfilehello.log
#PBS -q rupesh_gpuq
#PBS -l select=1:ncpus=1:ngpus=1

tpdir=`echo $PBS_JOBID | cut -f 1 -d .`
tempdir=$HOME/scratch/job$tpdir
mkdir -p $tempdir
cd $tempdir
cp -R $PBS_O_WORKDIR/* .


module load nvhpc-compiler

#module load cuda10.1
#module load gcc10.3.0 
#module load nvhpc-21.11
#module load nvhpc-pgicompiler
#module load gcc920

pgc++  sssp.cpp
./a.out > output.txt


rm *.out
mv * $PBS_O_WORKDIR/.
rmdir $tempdir
~                

将上述作业提交给que后,出现如下错误日志:

"sssp.cpp", line 2: catastrophic error: cannot open source file "iostream"   #include <iostream>
                     ^

1 catastrophic error detected in the compilation of "sssp.cpp". Compilation terminated.

我在 pgcc 上尝试了 运行ning C 程序,它们运行良好。 运行 pgc++ 上的 c++ 程序抛出错误。可能是什么原因?

What could be the reason?

为了与 g++ 互操作,pgc++(又名 nvc++)使用 g++ STL 和系统 header 文件。由于这些 header 的位置可能会有所不同,因此在安装时会创建一个配置文件“localrc”来存储这些位置。

这里可能发生的情况是,在安装时,选择了单个系统安装,因此生成的 localrc 是针对安装编译器的系统,而不是远程系统。

如果是这种情况,请考虑使用“网络”选项 re-installing。在这种情况下,localrc 的创建会延迟到第一次编译器调用,并为每个系统生成一个唯一的 localrc。

另一种可能是localrc 文件创建失败,原因不明。可能是权限问题。要检查,您可以 运行 'makelocalrc' 实用程序查看是否发生任何错误。

请注意,对于较新版本的 nvc++,我们不再使用 pre-generated 配置文件,而是在每次调用编译器时确定这些配置项。之前的担忧是生成配置所涉及的开销,但这已不再是一个问题。