Количество доступных процессоров, использующих Eiffel

Я играю с Eiffels SCOOP.

В моей программе куча воркеров работает параллельно. Я хочу создать столько рабочих, сколько процессоров доступно для меня.

Есть ли в Eiffel «простой» способ узнать количество доступных процессоров?


person Birliban    schedule 15.11.2012    source источник


Ответы (1)


В текущей стандартной библиотеке такой функции нет. Однако вы можете использовать следующее:

frozen available_cpus: NATURAL_8
        -- Number of logical CPUs reported by OS.
    external
        "C inline use %"eif_scoop.h%""
    alias
        "[
            #ifdef EIF_WINDOWS
                SYSTEM_INFO sysinfo;
                GetSystemInfo (&sysinfo);
                return sysinfo.dwNumberOfProcessors;
            #elif EIF_MACOSX
                int nm [2];
                size_t len = 4;
                uint32_t count;

                nm [0] = CTL_HW; nm [1] = HW_AVAILCPU;
                sysctl (nm, 2, &count, &len, NULL, 0);

                if(count < 1) {
                    nm[1] = HW_NCPU;
                    sysctl(nm, 2, &count, &len, NULL, 0);
                    if (count < 1) {count = 1;}
                }
                return count;
            #else
                return sysconf (_SC_NPROCESSORS_ONLN);
            #endif
        ]"
    end
person Alexander Kogtenkov    schedule 15.11.2012
comment
Три года спустя этот ответ все еще правильный или есть что-то новое? - person Birliban; 15.12.2015
comment
@Birliban, никаких новых функций не добавлялось, поэтому ответ все равно должен быть правильным. - person Alexander Kogtenkov; 15.12.2015