Maison >développement back-end >C++ >Comment puis-je déterminer de manière portable le nombre de cœurs d'une machine en C ?

Comment puis-je déterminer de manière portable le nombre de cœurs d'une machine en C ?

DDD
DDDoriginal
2024-12-29 02:55:10168parcourir

How Can I Portably Determine a Machine's Core Count in C  ?

Détermination indépendante de la plate-forme du nombre de cœurs d'une machine

La détermination du nombre de cœurs sur une machine peut être essentielle pour optimiser les performances logicielles. Cependant, trouver une solution indépendante de la plate-forme pour cette tâche peut s'avérer difficile.

Solution C 11

Heureusement, C 11 a introduit une méthode indépendante de la plate-forme pour identifier les principaux count :

#include <thread>

const auto processor_count = std::thread::hardware_concurrency();

Cette méthode renvoie le nombre logique de cœurs, tel que rapporté par le matériel sous-jacent et le fonctionnement système.

Solutions pré-C 11

Pour les versions C antérieures à C 11, il n'existe aucun moyen portable de déterminer le nombre de cœurs. Au lieu de cela, des approches spécifiques à la plate-forme doivent être utilisées :

Windows

SYSTEM_INFO sysinfo;
GetSystemInfo(&sysinfo);
int numCPU = sysinfo.dwNumberOfProcessors;

Systèmes de type Unix

int numCPU = sysconf(_SC_NPROCESSORS_ONLN);

macOS (avant 10.5)

int mib[4];
int numCPU;
std::size_t len = sizeof(numCPU);

/* set the mib for hw.ncpu */
mib[0] = CTL_HW;
mib[1] = HW_AVAILCPU;

/* get the number of CPUs from the system */
sysctl(mib, 2, &numCPU, &len, NULL, 0);

Objective-C (macOS 10.5 ou version ultérieure)

NSUInteger a = [[NSProcessInfo processInfo] processorCount];

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn