E. OpenMP C/C++ 中实现定义的行为
本附录总结了此 API 中描述为“实现定义”的行为。 每个行为都会交叉引用回其在主规范中的描述。
注解
在这些情况下,需要实现来定义和记录其行为,但此列表可能不完整。
线程数:如果在禁用线程数的动态调整时遇到并行区域,并且为并行区域请求的线程数大于运行时系统可以提供的线程数,则程序的行为是实现定义的(请参阅第 9 页)。
在 Visual C++ 中,对于非嵌套并行区域,将提供 64 个线程(最大值)。
处理器数:在任何给定时间实际承载线程的物理处理器数是实现定义的(参见第 10 页)。
在 Visual C++ 中,此数字不是恒定的,由操作系统控制。
创建线程团队:团队中执行嵌套并行区域的线程数是实现定义的(请参阅第 10 页)。
在 Visual C++ 中,此数字由操作系统确定。
计划(运行时):有关计划的决定将推迟到运行时。 通过设置
OMP_SCHEDULE
环境变量,可以在运行时选择计划类型和块大小。 如果未设置此环境变量,则生成的计划是实现定义的(请参阅第 13 页)。在 Visual C++ 中,计划类型为
static
,没有块大小。默认计划:在没有计划子句的情况下,默认计划是实现定义的(参见第 13 页)。
在 Visual C++ 中,默认计划类型为
static
,没有块大小。原子:实现是否将所有
atomic
指令替换为具有相同唯一名称的critical
指令是实现定义的(参见第20页)。在 Visual C++ 中,如果由原子修改的数据不是自然对齐,或者长度为一两个字节,则满足该属性的所有原子操作都将使用一个关键部分。 否则,将不会使用关键部分。
omp_get_num_threads:如果用户未显式设置线程数,则默认值为实现定义的(请参阅第 9 页)。
在 Visual C++ 中,默认线程数等于处理器数。
omp_set_dynamic:动态线程调整的默认值为实现定义的。
在 Visual C++ 中,默认值为
FALSE
。omp_set_nested:启用嵌套并行性时,用于执行嵌套并行区域的线程数是实现定义的。
在 Visual C++ 中,线程数由操作系统确定。
OMP_SCHEDULE 环境变量:此环境变量的默认值为实现定义。
在 Visual C++ 中,计划类型为
static
,没有块大小。OMP_NUM_THREADS 环境变量:如果没有为
OMP_NUM_THREADS
环境变量指定任何值,或者指定的值不是正整数,或者如果该值大于系统可以支持的最大线程数,则要使用的线程数是实现定义的。在 Visual C++ 中,如果指定的值为零或更小,则线程数等于处理器数。 如果值大于 64,则线程数为 64。
OMP_DYNAMIC 环境变量:默认值是实现定义的。
在 Visual C++ 中,默认值为
FALSE
。
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈