OpenMP编程:如何指定线程数作为命令行选项

irr*_*rom 3 openmp

我正在运行一个本地blastx服务器.其中一个命令行选项是-num_threads.查看可执行文件blastx,认为它可能是设置OMP_NUM_THREADS的shell脚本,但事实证明它是在机器代码中.我假设(可能不正确)它是一个OpenMP应用程序,这让我思考.

问题:是否可以将OpenMP线程的数量更改为命令行选项,而不是使用环境变量OMP_NUM_THREADS?

Gil*_*les 9

使用OpenMP,您基本上有3种不同的方法来指定parallel区域中使用的线程数:

  • 最常用的是环境变量OMP_NUM_THREADS,需要在运行它之前在代码的环境中设置才能生效;
  • omp_set_num_threads()在到达平行区域之前调用的函数; 和
  • 指令的可选num_threads()子句parallel.

这些标准的相对优先级由标准详细定义,但几乎归结为num_threads()优先omp_set_num_threads()于其优先于其优先级OMP_NUM_THREADS.

所以现在,如果您希望让代码定义要用作命令行选项的OpenMP线程数,那么您需要的是:

  1. 要手动或使用类似的函数来解析命令行,getopt并将读取的值存储在变量中; 和
  2. 在调用omp_set_num_threads()或作为num_threads()子句的参数时使用此值.两者中的任何一个都优先于可能设置的值OMP_NUM_THREADS.