c++ - 在程序源文件中使用脚本变量 OMP_NUM_THREADS

标签 c++ openmp pbs

如果我在集群上运行 C++ 代码,是否可以在我的程序中使用 OMP_NUM_THREADS 的值?例如,假设我有两个 .cpp 文件 main.cpp 和 func.cpp,其中 func.cpp 是使用 OpenMP 并行编写的。我希望能够一次定义线程数(在下面的脚本中),而不必在 func.cpp 中再次定义它。

#!/bin/bash

#PBS -S /bin/bash
#PBS -l walltime=00:10:00
#PBS -l select=1:ncpus=4:mem=2gb
#PBS -q QName
#PBS -N Name
#PBS -o Results/output.txt
#PBS -e Results/error.txt
#PBS -m abe -M email@address

module purge
module load intel-compiler/11.1.073

export OMP_NUM_THREADS=4

cd $WORKDIR

./myprog

最佳答案

您可以使用 omp_set_num_threads()设置程序中的线程数。
要使用 OMP_NUM_THREADS 外部指定的值,您需要使用 std::getenv 从环境变量中读取它.请务必 1) 将字符串结果转换为数字,以及 2) 清理该值以防它未设置。

伪代码看起来像这样:

unsigned int thread_qty = std::max(atoi(std::getenv("OMP_NUM_THREADS")), 1);
omp_set_num_threads(thread_qty);

关于c++ - 在程序源文件中使用脚本变量 OMP_NUM_THREADS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24435759/

相关文章:

c++ - 无法将多个 Cstring 添加到一组 Cstring

c++ - pthread_create 无法与 pthread_attr_setschedparam 一起正常工作

c++ - 模板问题

parallel-processing - 未使用所需数量的处理器

c++ - 如何从 openMP (C++) 中的线程生成子线程

sed - “sed”命令在 PBS 脚本中无法正常工作

C++ 错误 1 ​​错误 C2146 : syntax error: missing ';' before identifier 'records'

c++ - QT--OpenMP运行时错误SIGSEGV

c++ - 为 OpenMP + MPI 应用程序定位资源

pbs - 我可以在脚本的 PBS 指令中使用 PBS 环境变量吗?