¿Qué es el fragmento de código multiplataforma para obtener la cantidad total de núcleos en C ++? [duplicar]

Posible duplicado:
Detecta de forma programada la cantidad de procesadores / núcleos físicos o si el Hyper-Threading está activo en Windows, Mac y Linux

Me pregunto si hay alguna forma de plataforma cruzada (estándar o basada en impulso o incluso c) para obtener la cantidad total de núcleos de una manera multiplataforma. (para linux Mac Os X y Windows)

preguntado el 28 de agosto de 11 a las 00:08

¿Fuiste el primero en votar para cerrar tu propia pregunta? O_o -

2 Respuestas

Podrías usar OpenMP's omp_get_max_threads () función. Para g ++, habilite OpenMP con la directiva -fopenmp. Para MS Visual Studio, habilítelo en las propiedades del proyecto - propiedades de configuración - C / C ++ - idioma. Sé consciente de omp_get_max_threads () puede devolver menos que el número real de núcleos / subprocesos de hardware si omp_set_num_threads () se ha utilizado para limitar el número de subprocesos que se permite utilizar una región paralela de OpenMP (no es un problema al iniciar el programa). También debe tener en cuenta que para las CPU hiperprocesadas omp_get_max_threads () no devuelve el número de núcleos de CPU de hardware, sino de subprocesos de hardware que admite la CPU (y los subprocesos adicionales proporcionados por el hiperproceso no son suficientes).

Respondido 28 ago 11, 05:08

Oooh, probablemente tendrás que ponerte manos a la obra ...

http://code.google.com/p/geekinfo/source/browse/trunk/

Or ir impulso:

boost::thread::hardware_concurrency(); // returns number of cores/HT/procs

Respondido 28 ago 11, 05:08

No lo creo; ¿Y desde cuándo es multiplataforma el lenguaje ensamblador? - Razzupaltuff

Este código solo funciona en win32 (usa SetThreadAffinityMask etc) - bdonlan

@ krax11erx, la biblioteca en sí es multiplataforma, al menos así lo afirma ... code.google.com/p/geekinfo - Kornel Kisielewicz

@bdonlan - otros sistemas están en otros archivos de la biblioteca - Kornel Kisielewicz

El método boost es estándar en c ++ 11 ahora: std :: thread :: hardware_concurrency () - Eloff

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.