我正在运行一个本地blastx服务器.其中一个命令行选项是-num_threads.查看可执行文件blastx,认为它可能是设置OMP_NUM_THREADS的shell脚本,但事实证明它是在机器代码中.我假设(可能不正确)它是一个OpenMP应用程序,这让我思考.
问题:是否可以将OpenMP线程的数量更改为命令行选项,而不是使用环境变量OMP_NUM_THREADS?
使用OpenMP,您基本上有3种不同的方法来指定parallel
区域中使用的线程数:
最常用的是环境变量OMP_NUM_THREADS
,需要在运行它之前在代码的环境中设置才能生效;
omp_set_num_threads()
在到达平行区域之前调用的函数; 和
指令的可选num_threads()
子句parallel
.
这些标准的相对优先级由标准详细定义,但几乎归结为num_threads()
优先omp_set_num_threads()
于其优先于其优先级OMP_NUM_THREADS
.
所以现在,如果您希望让代码定义要用作命令行选项的OpenMP线程数,那么您需要的是:
要手动或使用类似的函数来解析命令行,getopt
并将读取的值存储在变量中; 和
在调用omp_set_num_threads()
或作为num_threads()
子句的参数时使用此值.两者中的任何一个都优先于可能设置的值OMP_NUM_THREADS
.