我目前正在测试HPC Challenge基准测试,并修改了其中几项以接受用户输入(即带矩阵大小的DGEMM)。我的代码使用以下命令运行
OMP_NUM_THREADS=1 mpirun -np 1 ./hpcc
OMP_NUM_THREADS=4 mpirun -np 1 ./hpcc
我为这两个设置获得了不错的输出。
我正在尝试提取3个不同级别的并行化(串行,完全并行和令人尴尬的并行),并且只剩下配置Embarrassingly Parallel,它应该使用此命令运行:
OMP_NUM_THREADS=1 mpirun -np 4 ./hpcc
但是当我运行这个时,我收到此错误消息(seg fault):
BAD TERMINATION OF ONE OF YOUR APPLICATION PROCESSES
PID 30297 RUNNING AT ********
EXIT CODE: 139
CLEANING UP REMAINING PROCESSES
YOU CAN IGNORE THE BELOW CLEANUP MESSAGES
我知道我的程序中可能存在竞争条件,我可以使用valgrind进行检查,但是在尝试运行令人尴尬的并行设置时,为什么我会遇到段错误还有其他可能性吗?或者它完全基于内存泄漏和竞争条件?
编辑1: 插入Valgrind并获得此结果:
==1196== Process terminating with default action of signal 6 (SIGABRT)
==1196== at 0x5E8D428: raise (raise.c:54)
==1196== by 0x5E8F029: abort (abort.c:89)
==1196== by 0x622513A: ??? (in /usr/lib/libcr.so.0.5.5)
==1196== by 0x44796B9: call_init.part.0 (dl-init.c:72)
==1196== by 0x44797CA: call_init (dl-init.c:30)
==1196== by 0x44797CA: _dl_init (dl-init.c:120)
==1196== by 0x4469C69: ??? (in /lib/x86_64-linux-gnu/ld-2.23.so)
不确定这些是否有用,但我跑了:
mpirun -np 4 valgrind ./hpcc