代码之家  ›  专栏  ›  技术社区  ›  Felix

程序不使用所有核心

  •  2
  • Felix  · 技术社区  · 6 年前

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

    我有一个系统有两个 . 他们每个人都有 24 cores 所以我在一起 48 cores 96 threads .

    24芯 不是所有的 48 . 它在地面上起作用 24 第一个CPU或 但不是全部。

    当我启动程序的第二个实例时,没有任何改变,只使用了一个CPU。

    enter image description here

    我将一些代码提取到一个最小的工作示例中,该示例检查有多少线程可用。仅限 48 96螺纹

    #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位专业版

    0 回复  |  直到 6 年前