全局线程计数

设置将由任何 CPLEX 并行优化器调用的并行线程的缺省数量。

用途

全局缺省线程计数

API 参数名称 V12.6.0 之前的名称
C CPXPARAM_Threads CPX_PARAM_THREADS
C++ IloCplex::Param::Threads Threads (int)
Java IloCplex.Param.Threads Threads (int)
.NET Cplex.Param.Threads Threads (int)
OPL 线程 线程
Python parameters.threads 线程
交互式 线程 线程
标识 1067 1067

描述

设置将由任何 CPLEX 并行优化器调用的并行线程的缺省最大数量。

对于单个线程,并行算法的行为具有确定性,与线程参数设置无关;即,算法在单一线程中按顺序继续。

在此上下文中,顺序意味着在单个线程中,算法将以一种可预测、可重复顺序逐步按顺序继续。 确定性意味着在相同计算平台上使用相同参数设置对相同模型进行重复求解将遵循完全相同的解法路径,从而在解法中获得相同级别的性能和相同值。 顺序执行是确定性。 在多线程计算中,确定性设置要求线程之间同步。 机会性会造成线程之间同步减少,从而可能提供更佳性能,但代价是多个线程或多个处理器上运行的可重复、恒定的解法路径和值。

如果此参数处于其缺省设置 0(零),并且您的应用程序包含无回调,那么 CPLEX 可以使用所有可用线程;即,至多 32 个线程或机器核心的数量,以较小者为准。 如果您的机器提供了 32 个以上的线程,那么您可以通过增大此参数的值来利用这些线程。

如果您正在使用回调,那么需要区分遗留回调(包括参考回调、查询回调和控制回调)和通用回调。 最近引入的通用回调可以为现代化并行 MIP 优化提供更好的支持。

通用回调和并行 MIP 优化

与遗留回调相反,应用程序中存在的通用回调将不会对 CPLEX 使用的线程数量产生任何影响(即,并行 MIP 搜索的行为与不存在回调时完全相同)。 但对于遗留回调,如果将并行 MIP 搜索与通用回调结合使用,需要注意可能会并发调用回调,而且从不同线程执行回调的顺序可能无法确定,即使在确定性并行方式下也是如此。

有关通用回调的说明,请参阅《CPLEX 用户手册》中的 "通用回调"主题。

遗留回调和并行 MIP 优化

如果此参数处于其缺省设置 0(零),那么部分遗留回调将禁用并行 MIP 搜索。 准确来说,如果应用程序包含除参考回调以外的其他遗留回调(即,应用程序包含查询回调、诊断回调或控制回调),那么 CPLEX 将禁用并行 MIP 搜索,并自动切换为顺序 MIP 搜索。 但请注意,这并非完全等同于将此参数设置为 1(一),因为仍将以并行方式对问题的连续松弛进行求解。

要启用将并行 MIP 优化与除参考回调以外的遗留回调结合使用,您需要将此参数设置为正数值。 但执行此操作时,需要注意可能会并发调用回调,而且从不同线程执行回调的顺序可能无法确定,即使在确定性并行方式下也是如此。

有关信息、查询、诊断和控制回调的说明,请参阅《CPLEX 用户手册》中的主题 "使用传统优化回调 "和主题 "高级 MIP 控制界面(传统)"。

表 1. 值
含义
0 自动:让 CPLEX 决定;缺省值
1 顺序;单线程
N 最多使用 N 个线程;N 受可用处理器数和处理器价值单元 (PVU) 限制。

另请参阅

并行方式开关