I have some attempts to solve a scheduling problem using the Gurobi and doCPLEX API in python and .NET on Ubuntu-server installed on a hyper-computing cluster with 64 physical cores. Unfortunately, both solvers cannot exploit more than 32 cores and it seems a bit weird to me! Even I attempted to force using 64 cores with the Threads
parameter; however, it deteriorated the convergences speed. Appreciate someone has any interpretations of this case and of course a solution to this issue.
UPDATE #1:
The machine is deployed with 64 physical cpus. Here is the detail of cpu #26:
*-cpu:25
description: CPU
product: Intel(R) Xeon(R) CPU E5-2698 v4 @ 2.20GHz
vendor: Intel Corp.
physical id: 419
bus info: cpu@25
version: RHEL 7.6.0 PC (i440FX + PIIX, 1996)
slot: CPU19
size: 2GHz
capacity: 2GHz
width: 64 bits
and cpu #64:
*-cpu:63
description: CPU
product: Intel(R) Xeon(R) CPU E5-2698 v4 @ 2.20GHz
vendor: Intel Corp.
physical id: 43f
bus info: cpu@63
version: RHEL 7.6.0 PC (i440FX + PIIX, 1996)
slot: CPU3f
size: 2GHz
capacity: 2GHz
width: 64 bits
UPDATE #2:
The architecture of CPUs:
UPDATE #3:
From the Gurobi community support center (link):
Gurobi always aims to count
physical cores
. To do this, the operating system is queried for the number of physical and logical cores. Gurobi license files always contain the (maximal) number of (physical) cores for which they are valid. (For reasons of backward-compatibility, they also contain the number of sockets if it is greater than 1.)On virtual machines, the number of physical cores is more difficult to obtain
, since VMs typically hide the difference between physical and logical cores. In a properly configured VM with hyper-threading, a total number of 16 logical cores would be counted as 8 physical cores. To check how many physical cores are measured by Gurobi, you can download and install Gurobi and use thegrbprobe
utility.
So, I tried the grbprobe
and here is the result:
info : grbprobe version , build v9.1.1rc0
HOSTNAME=packer-Ubuntu-18
HOSTID=a6400be
PLATFORM=linux64
USERNAME=ubuntu
SOCKETS=64
CORES=64
CPU=Intel(R) Xeon(R) CPU E5-2698 v4 @ 2.20GHz