我有一个复杂的程序,应该使用所有核心来执行复杂的数学计算。
我有一个系统有两个
. 他们每个人都有
24 cores
所以我在一起
48 cores
和
96 threads
.
24芯
不是所有的
48
. 它在地面上起作用
24
第一个CPU或
但不是全部。
当我启动程序的第二个实例时,没有任何改变,只使用了一个CPU。
我将一些代码提取到一个最小的工作示例中,该示例检查有多少线程可用。仅限
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;
}
我的机器坏了
Windows 10 64位专业版