我有一个复杂的程序,应该使用所有内核来执行复杂的数学计算。
我有一个带有两个 Intel Xeon Platinum 8160 的系统。他们每个人都有24 cores
,所以我在一起有48 cores
和96 threads
。
我的程序仅使用24 cores
,而不是全部48
。它可以在第一个CPU的24
或第二个CPU的24
上运行,但不能一起使用。
当我启动程序的第二个实例时,什么也没有改变,仅使用一个CPU。
我附上了一些截图。
我提取了一些代码到一个最小的工作示例,该示例检查了多少个可用线程。仅检测到48
,而不是全部96 threads
。
#include <stdlib.h>
#include <stdio.h>
#include <winsock.h>
#include <math.h>
#include <process.h>
static void thread_start(void *thread) {
int i;
i = *(int*)thread;
for (;;) {
i = (int)sqrt(i++);
}
}
int main (int argc, char * argv[]) {
SYSTEM_INFO sysi;
int thread_max, i;
argc = argc;
argv = argv;
GetSystemInfo(&sysi);
thread_max = sysi.dwNumberOfProcessors;
printf("\n... thread_max=%d\n", thread_max);
printf("\n\n");
for (i = 0; i < thread_max *2; i++) {
_beginthread(thread_start, 0, &i);
}
for (;;) i = i;
// return EXIT_SUCCESS;
}
我的机器在Windows 10 64位Pro 下运行。可能是什么问题?