SORU
29 EYLÜL 2008, PAZARTESİ


Programlı bir makinede çekirdek sayısını bulmak

Bir şekilde kaç tane makine var platform-bağımsız bir şekilde C/C belirlemek için var mı? Eğer böyle bir şey varsa, ne per-platform (Windows/*nix/Mac) belirleme hakkında?

CEVAP
29 EYLÜL 2008, PAZARTESİ


C 11

http://en.cppreference.com/w/cpp/thread/thread/hardware_concurrency

//may return 0 when not able to detect
unsigned concurentThreadsSupported = std::thread::hardware_concurrency();

Win32:

SYSTEM_INFO sysinfo;
GetSystemInfo( &sysinfo );

numCPU = sysinfo.dwNumberOfProcessors;

Linux, Solaris, & AİX ve Mac OS X (OS sürümleri için >= 10.4 yani Tiger itibaren) - yorum başına:

 numCPU = sysconf( _SC_NPROCESSORS_ONLN );

FreeBSD, X, NetBSD, OpenBSD, vb. MacOS:

int mib[4];
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);

if( numCPU < 1 ) 
{
     mib[1] = HW_NCPU;
     sysctl( mib, 2, &numCPU, &len, NULL, 0 );

     if( numCPU < 1 )
     {
          numCPU = 1;
     }
}

HPUX:

numCPU = mpctl(MPC_GETNUMSPUS, NULL, NULL);

IRIX:

numCPU = sysconf( _SC_NPROC_ONLN );

Veya iOS (herhangi bir sürüm) Mac OS X (10.5 ve daha yeni) kullanarak Objective-C:

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

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BrandonHarrisWalker

    BrandonHarri

    27 Kasım 2006
  • hytchme

    hytchme

    9 Mart 2014
  • WOSU Public Media

    WOSU Public

    23 AĞUSTOS 2007