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

OpenMP Programming : How to specify the number of threads as a command line option

我是 运行 本地 blastx 服务器。命令行选项之一是 -num_threads。查看可执行文件blastx,以为可能是设置OMP_NUM_THREADS的shell脚本,结果发现是机器码。我假设(可能不正确)它是一个 OpenMP 应用程序,这让我开始思考。

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

OMP_NUM_THREADS 由程序在运行时解析,所以它已经做了你想要的。

在编译时设置它没有效果(除非你专门设计你的构建系统来使用它)。

因为您导出了这个环境变量,它在运行时也存在。这就是为什么您认为它在编译时正在做某事的原因。

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

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

它们的相对优先级是 defined in great details by the standard,但几乎可以归结为 num_threads() 优先于 omp_set_num_threads(),后者本身优先于 OMP_NUM_THREADS

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

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