70

Linux で使用可能な CPU の数を取得する API はありますか? つまり、/proc/cpuinfo やその他の sys-node ファイルを使用せずに...

sched.h を使用してこの実装を見つけました。

int GetCPUCount()
{
 cpu_set_t cs;
 CPU_ZERO(&cs);
 sched_getaffinity(0, sizeof(cs), &cs);

 int count = 0;
 for (int i = 0; i < 8; i++)
 {
  if (CPU_ISSET(i, &cs))
   count++;
 }
 return count;
}

しかし、共通ライブラリを使用してより高いレベルのものはありませんか?

4

8 に答える 8

89
#include <unistd.h>
long number_of_processors = sysconf(_SC_NPROCESSORS_ONLN);
于 2011-01-03T17:00:17.770 に答える
43
#include <stdio.h>
#include <sys/sysinfo.h>

int main(int argc, char *argv[])
{
    printf("This system has %d processors configured and "
        "%d processors available.\n",
        get_nprocs_conf(), get_nprocs());
    return 0;
}

https://linux.die.net/man/3/get_nprocs

于 2017-11-27T22:23:29.873 に答える
20

このコード (ここから取得) は、Windows と *NIX プラットフォームの両方で動作するはずです。

#ifdef _WIN32
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#else
#include <unistd.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>


int main() {
  long nprocs = -1;
  long nprocs_max = -1;
#ifdef _WIN32
#ifndef _SC_NPROCESSORS_ONLN
SYSTEM_INFO info;
GetSystemInfo(&info);
#define sysconf(a) info.dwNumberOfProcessors
#define _SC_NPROCESSORS_ONLN
#endif
#endif
#ifdef _SC_NPROCESSORS_ONLN
  nprocs = sysconf(_SC_NPROCESSORS_ONLN);
  if (nprocs < 1)
  {
    fprintf(stderr, "Could not determine number of CPUs online:\n%s\n", 
strerror (errno));
    exit (EXIT_FAILURE);
  }
  nprocs_max = sysconf(_SC_NPROCESSORS_CONF);
  if (nprocs_max < 1)
  {
    fprintf(stderr, "Could not determine number of CPUs configured:\n%s\n", 
strerror (errno));
    exit (EXIT_FAILURE);
  }
  printf ("%ld of %ld processors online\n",nprocs, nprocs_max);
  exit (EXIT_SUCCESS);
#else
  fprintf(stderr, "Could not determine number of CPUs");
  exit (EXIT_FAILURE);
#endif
}
于 2011-01-03T18:07:02.827 に答える
11

Using/proc/cpuinfoは、最もクリーンで移植性の高いソリューションです。オープンに失敗した場合は、単純に 1 cpu または 2 cpu と見なすことができます。マイクロ最適化以外の目的で CPU 数を知ることに依存するコード (たとえば、実行するスレッドの理想的な数を選択するなど) は、ほぼ間違いなく何かばかげたことをしています。

_SC_NPROCESSORS_ONLNソリューションは、非標準 (glibc 固有の)拡張機能に依存します。sysconfこれは、よりもはるかに大きな依存関係です/proc(すべての Linux システムに/proc_SC_NPROCESSORS_ONLN.

于 2011-01-03T17:11:52.683 に答える