程序未使用所有内核

时间:2018-07-28 12:34:02

标签: c windows multithreading ansi-c

我有一个复杂的程序,应该使用所有内核来执行复杂的数学计算。

我有一个带有两个 Intel Xeon Platinum 8160 的系统。他们每个人都有24 cores,所以我在一起有48 cores96 threads

我的程序仅使用24 cores,而不是全部48。它可以在第一个CPU的24或第二个CPU的24上运行,但不能一起使用。

当我启动程序的第二个实例时,什么也没有改变,仅使用一个CPU。

我附上了一些截图。

enter image description here

我提取了一些代码到一个最小的工作示例,该示例检查了多少个可用线程。仅检测到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;

}

enter image description here

我的机器在Windows 10 64位Pro 下运行。可能是什么问题?

0 个答案:

没有答案