Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menentukan Bilangan Teras pada Mesin Secara Pengaturcaraan?

Bagaimanakah Saya Boleh Menentukan Bilangan Teras pada Mesin Secara Pengaturcaraan?

DDD
DDDasal
2024-12-13 09:23:11178semak imbas

How Can I Programmatically Determine the Number of Cores on a Machine?

Menentukan Bilangan Teras pada Mesin Secara Pengaturcaraan

Dalam pelbagai senario pengkomputeran, memahami bilangan teras yang tersedia pada mesin adalah penting. C/C tidak menawarkan penyelesaian bebas platform untuk tugas ini. Walau bagaimanapun, terdapat pendekatan khusus platform yang boleh memberikan maklumat ini.

C 11 (Bebas Platform)

C 11 memperkenalkan std::thread::hardware_concurrency () fungsi, yang menyediakan kaedah mudah alih untuk mendapatkan bilangan teras.

#include <thread>

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

Pra-C 11 (Platform-Specific)

Dalam C sebelum C 11, kaedah khusus mesti digunakan bergantung pada platform:

Win32

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

Linux, Solaris, AIX, Mac OS X >=10.4

int numCPU = sysconf(_SC_NPROCESSORS_ONLN);

FreeBSD, MacOS X, NetBSD, OpenBSD

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;  // alternatively, try HW_NCPU;

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

HPUX

int numCPU = mpctl(MPC_GETNUMSPUS, NULL, NULL);

IRIX

int numCPU = sysconf(_SC_NPROC_ONLN);

Objektif- C (Mac OS X >=10.5 atau iOS)

NSUInteger a = [[NSProcessInfo processInfo] processorCount];
NSUInteger b = [[NSProcessInfo processInfo] activeProcessorCount];

Dengan menggunakan kaedah khusus platform ini atau pendekatan bebas platform C 11, anda boleh menentukan secara pemprograman bilangan teras yang tersedia pada mesin, membolehkan anda mengoptimumkan penggunaan sumber dan mencapai prestasi yang lebih baik dalam aplikasi anda.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menentukan Bilangan Teras pada Mesin Secara Pengaturcaraan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn