【发布时间】:2019-10-20 19:45:03
【问题描述】:
根据 Eigen 文档,只要设置了正确的编译标志并定义了 OMP_NUM_THREADS=x,所有稀疏矩阵/密集向量乘法将并行运行,无论乘法发生在何处。然而,在完成这些之后,我观察到通过检查 htop 始终只使用了 1 个核心。
我关心的是以下源代码中的第 58 行和第 98 行,其中发生了 sm/dv 乘法。需要注意的是,以下代码是 Eigen 不受支持的迭代求解器模块的一部分,但我认为这一事实不会导致并行化失败。
https://eigen.tuxfamily.org/dox/unsupported/MINRES_8h_source.html
平台是Xeon Gold 6126,我使用的编译标志是
CC=g++
FLAGS=-std=c++11 -m64 -O3 -fopenmp -march=skylake-avx512
我通过以下脚本提交作业
#!/bin/bash
#something
#SBATCH -n 8
#something
OMP_NUM_THREADS=8 ./my_executable
我认为它已经正确设置了 openmp。
我大致记得有人提到,为了利用多核,必须完全填充稀疏矩阵,而不仅仅是上/下三角形。我确实只填充了上面的三角形,不确定这是否是原因。
有什么我错过的建议吗?提前致谢。
【问题讨论】:
-
提醒遇到类似问题的人:稀疏矩阵必须完全填充,这意味着仅填充上/下三角形不会启用并行化。