Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用c编程获得linux上的内核数?_C_Linux_Cpu - Fatal编程技术网

如何使用c编程获得linux上的内核数?

如何使用c编程获得linux上的内核数?,c,linux,cpu,C,Linux,Cpu,我知道如何获得C语言中逻辑核的数量 sysconf(_SC_NPROCESSORS_CONF); 这将在我的i3处理器上返回4。但实际上i3中只有两个内核 如何获取物理核心计数?这是一个使用C的解决方案 核心c: #include <stdio.h> #include <libcpuid.h> int main(void) { struct cpu_raw_data_t raw; struct cpu_id_t data; cpuid_get

我知道如何获得C语言中逻辑核的数量

sysconf(_SC_NPROCESSORS_CONF);
这将在我的i3处理器上返回4。但实际上i3中只有两个内核


如何获取物理核心计数?

这是一个使用C的解决方案

核心c:

#include <stdio.h>
#include <libcpuid.h>

int main(void)
{
    struct cpu_raw_data_t raw;
    struct cpu_id_t data;

    cpuid_get_raw_data(&raw);
    cpu_identify(&raw, &data);
    printf("No. of Physical Core(s) : %d\n", data.num_cores);
    return 0;
}
在我的笔记本电脑(i5 480M)上时:


这意味着我的笔记本电脑处理器具有超线程技术

您可以简单地读取和解析
/proc/cpuinfo
伪文件(有关详细信息,请参阅;将该伪文件作为文本文件打开,并逐行顺序读取;在终端中尝试
cat/proc/cpuinfo

优点是您只需解析(Linux特定的)文本[pseudo-]文件(不需要任何外部库,如中),缺点是您需要解析它(没什么大不了的,在循环中使用
fgets
读取80字节行,然后使用
sscanf
并测试扫描的项目计数……)

flags:
行中的
ht
存在表示您的CPU具有。CPU线程数由
处理器:
行数给出。物理内核的实际数量由
cpu内核给出:
(所有这些都使用我机器上的4.1内核)

我不确定你想了解你有多少物理核心是对的。超线程实际上可能很有用。您需要进行基准测试

您可能应该让应用程序中的工作线程数(例如线程池的大小)可以由用户配置。即使在4核超线程处理器上,我也可能希望运行的线程不超过3个(因为我想将其他线程用于其他用途)。

没有任何库:

int main()
{
unsigned int eax=11,ebx=0,ecx=1,edx=0;

asm volatile("cpuid"
        : "=a" (eax),
          "=b" (ebx),
          "=c" (ecx),
          "=d" (edx)
        : "0" (eax), "2" (ecx)
        : );

printf("Cores: %d\nThreads: %d\nActual thread: %d\n",eax,ebx,edx);
}
输出:

Cores: 4
Threads: 8
Actual thread: 1

处理器代码是什么?许多Intel每个物理层有2个逻辑核。你可以有更多关于英特尔的信息spreadsheet@gengisdave有没有一种方法可以在C语言中得到物理核的数量?我不知道C的解决方案,在C++中,你可以使用<代码> Boo::To::不是物理内核。boost有两种方法,在C中,您必须解析
/proc/cpuinfo
cpu内核:
行)或使用libcpuidthanks作为解决方案。。。。我只是一个初学者,你能告诉我如何将这个libcpuid集成到c中吗。我在Ubuntu上使用Xcode IDE,似乎没有Ubuntu/debian的软件包;如果有软件包,您可以使用apt cache search libcpuid进行搜索(您也需要-dev软件包);否则,您可以从源代码处编译它(有关说明,请参阅)
No. of Physical Core(s) : 2
No. of Logical Core(s) : 4
int main()
{
unsigned int eax=11,ebx=0,ecx=1,edx=0;

asm volatile("cpuid"
        : "=a" (eax),
          "=b" (ebx),
          "=c" (ecx),
          "=d" (edx)
        : "0" (eax), "2" (ecx)
        : );

printf("Cores: %d\nThreads: %d\nActual thread: %d\n",eax,ebx,edx);
}
Cores: 4
Threads: 8
Actual thread: 1