我正在使用CPLEX优化模型。它是一个较大的模型,因此需要大量的计算时间。我有一台具有8个真实核心的机器,这些核心组织在16个虚拟核心中。使用参数“线程”可以更改线程数。但是我需要进一步说明更改线程数时发生的情况。
设置threads=8
时,CPLEX仅使用真正的8个内核吗?还是仅在8个虚拟内核中运行它,就没有真正的好处?我该如何减少计算时间?
答案 0 :(得分:2)
cplex将使用8个虚拟核心,并且操作系统将在8个虚拟核心上调度这些线程。考虑到所有这些线程都是繁重的工作,因此操作系统可能会将它们调度在不同的物理内核上,但不能保证。因此,将线程设置为8将最有帮助。
要确保8个线程中的每个线程都可以在不同的物理内核上运行,可以设置cpumask参数。例如,在Linux上,您可以将cpumask设置为00ff以使用8个不同的物理内核。 (在linux上,如果在具有n个物理核心的计算机上启用了超线程,则虚拟cpus i和n + i在第i个物理核心上,因此掩码00ff(二进制0000 0000 1111 1111)指示cplex使用第一个物理核心。 8个虚拟核心,它们将位于不同的物理核心上。) 顺便说一句,如果您使用的是Linux,则可以使用tasket命令获得几乎相同的结果。
哦,您仍然需要设置线程。 cpumask仅限制将使用哪个虚拟cpus cplex,它不会更改使用的线程数。