The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

Автоматическое определение в Linux количества процессорных ядер из скрипта
Данный подход можно применять для обработки данных на компьютерных системах с
разным количеством процессорных ядер и использовать для параллелизации
обработки данных по усмотрению.

Пример скрипта с использованием cppcheck (статический анализ исходников в
несколько потоков, опция -j)


Пример скрипта с использованием cppcheck

   #!/bin/sh

   COUNT=$(cat /proc/cpuinfo | grep 'model name' | sed -e 's/.*: //' | wc -l)
   echo "number of detected CPUs =" $COUNT

   cppcheck -j $COUNT --force --inline-suppr . 2>errors.txt


вариант от Vee Nee

   COUNT=$(lscpu -p=cpu | grep -v \\# | wc -l)

вариант от pavlinux:

   COUNT=$(getconf _NPROCESSORS_ONLN)

дополнение от Andrey Mitrofanov:

   COUNT=$(egrep -c '^processor' /proc/cpuinfo)
 
18.08.2012 , Автор: Карбофос
Ключи: cpu, cppcheck, shell / Лицензия: CC-BY
Раздел:    Корень / Программисту и web-разработчику / Shell / Готовые скрипты

Обсуждение [ Линейный режим | Показать все | RSS ]
 
  • 1.1, Андрей, 23:05, 19/08/2012 [ответить] [смотреть все]
  • +/
    Хмм.. А зачем?? Типа каждый день отсылать статистику по кол-ву процов на мыло админа?? Плюс еще график от рисовать :)
    Было бы неплохо описать задачу с которой столкнулись и для чего это?? Загрузку процессоров, понятно для чего в автоматическом режиме, но кол-во... Что-то я не догоняю - подскажите??
     
     
  • 2.3, Карбофос, 23:19, 19/08/2012 [^] [ответить] [смотреть все] [показать ветку]
  • +/
    например, для параллельной обработки фотографий отчасти проблематика была затрон... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.7, Андрей, 04:53, 20/08/2012 [^] [ответить] [смотреть все]  
  • +/
    Далек от этой темы Пока далек Но кто знает когда потребуется Спасибо В... весь текст скрыт [показать]
     
     
  • 4.13, Карбофос, 12:45, 20/08/2012 [^] [ответить] [смотреть все]  
  • +/
    это нужно для параллельного запуска заданий по обработке данных, для полного исп... весь текст скрыт [показать]
     
  • 2.23, Аноним, 21:19, 22/08/2012 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Например чтобы make пинать с нужным -j. Ну так, самый очевидный вариант :)
     
  • 1.2, Vee Nee, 23:11, 19/08/2012 [ответить] [смотреть все]  
  • +/
    Как вариант:
    COUNT=$(lscpu -p=cpu | grep -v \# | wc -l)

    Не понимаю только, для чего вырезание заголовка строки sed-ом, вариант без него что-то упускает?
    COUNT=$(grep 'model name' /proc/cpuinfo | wc -l)

     
     
  • 2.4, Карбофос, 23:25, 19/08/2012 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    благодарю за дополнение нет, не упускает видимо, sed еще использовался для тог... весь текст скрыт [показать] [показать ветку]
     
  • 2.9, pavlinux, 05:49, 20/08/2012 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    COUNT=$(('lscpu -p=cpu | tail -1'+1))

     
  • 2.11, Andrey Mitrofanov, 09:58, 20/08/2012 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    А wc egrep -c processor proc cpuinfo ... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.12, Карбофос, 10:35, 20/08/2012 [^] [ответить] [смотреть все]  
  • +/
    кстати, тоже хорошая идея использовать как можно меньше утилит, мерси за сие gr... весь текст скрыт [показать]
     
  • 2.25, Аноним, 10:38, 23/08/2012 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    как все сложно в ваших линухах, толи дело во фре:
    sysctl kern.smp.cpus
     
  • 1.6, pavlinux, 03:49, 20/08/2012 [ответить] [смотреть все]  
  • +1 +/
    Кто больше вариантов определения процов?

    [code]
    #!/bin/sh

      # Вот этот самый Юникс-вей фен-шуйный, POSIX IEEE Std 1003.1-2001, все дела...

      getconf _NPROCESSORS_ONLN;

      # А дальше скриптодрочка.
      echo $(('cat /sys/devices/system/cpu/online | cut -d"-" -f2'+1));
      dmesg | grep "processors activated" | cut -d" " -f3;
    [/code]

    Хардкор мазафака кульхацкер метод
    [code]
    #!/bin/sh

    cat >> /tmp/cpus.c << EOF
    #include <stdio.h>
    #include <unistd.h>

    int main(void) {

         printf("%ld\n", sysconf(_SC_NPROCESSORS_ONLN));

    return 0;
    }
    EOF
    gcc /tmp/cpus.c -o /tmp/cpus;

    export CPU=$(/tmp/cpus)
    [/code]

     
     
  • 2.8, pavlinux, 05:04, 20/08/2012 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    code bin sh sed -ne processor p proc cpuinfo 124 wc -l awk pro... весь текст скрыт [показать] [показать ветку]
     
  • 2.10, Карбофос, 07:10, 20/08/2012 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    с комуляцией - вообще жесть спасибо за варианты слушай, а он разве в proc c... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.18, pavlinux, 01:09, 21/08/2012 [^] [ответить] [смотреть все]  
  • +/
    Да, только онлайновые Где-то там http lxr free-electrons com source arch x86... весь текст скрыт [показать]
     
     
  • 4.21, Карбофос, 00:52, 22/08/2012 [^] [ответить] [смотреть все]  
  • +/
    ну вот и речь об чем: нефиг забор городить из нескольких скриптов
     
     
  • 5.22, pavlinux, 04:05, 22/08/2012 [^] [ответить] [смотреть все]  
  • +/
    getconf _NPROCESSORS_ONLN как раз делает вот это echo cat sys devices ... весь текст скрыт [показать]
     
  • 1.14, Анонимуз, 15:24, 20/08/2012 [ответить] [смотреть все]  
  • +/
    Процов? Насколько я заметил, тут речь идет исключительно о количестве ядер.
    Ну, я понимаю, что обычно не количество сокетов интересует, а именно ядра, но почему бы так и не написать сразу?
     
     
  • 2.15, Карбофос, 15:41, 20/08/2012 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    это принципиально что-то меняет для меня лично ядро процессор точка можно, ... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.16, Анонимуз, 16:37, 20/08/2012 [^] [ответить] [смотреть все]  
  • –1 +/
    Для большинства людей операционная система винда, а название статьи не соответ... весь текст скрыт [показать]
     
     
  • 4.30, Michael Shigorin, 17:39, 24/08/2012 [^] [ответить] [смотреть все]  
  • +1 +/
    Большинство людей таких слов-то не знают, из наблюдений ... весь текст скрыт [показать]
     
     
  • 5.38, Аноним, 19:05, 27/10/2012 [^] [ответить] [смотреть все]  
  • +/
    А должны были ... весь текст скрыт [показать]
     
     
  • 6.39, Michael Shigorin, 20:14, 27/10/2012 [^] [ответить] [смотреть все]  
  • +/
    > А должны были?

    Здесь -- да, наверное.

     
  • 2.17, Andrey Mitrofanov, 23:22, 20/08/2012 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    А в процессора-а-ах я зничиительно длинннее ... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.24, pavlinux, 02:42, 23/08/2012 [^] [ответить] [смотреть все]  
  • +/
    А двайте регистрами меряться?!
     
     
  • 4.32, Аноним, 21:01, 24/08/2012 [^] [ответить] [смотреть все]  
  • +/
    И сколько сантиметров у тебя регистр?
     
     
  • 5.33, pavlinux, 05:18, 26/08/2012 [^] [ответить] [смотреть все]  
  • +1 +/
    > И сколько сантиметров у тебя регистр?

    strlen("sizeof(register);");

     
  • 1.19, АнонимусРекс, 00:10, 22/08/2012 [ответить] [смотреть все]  
  • +/
    а где разделение на треды?
     
     
  • 2.20, Карбофос, 00:50, 22/08/2012 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    если шапка жмёт - дополни
     
     
  • 3.27, Michael Shigorin, 02:55, 24/08/2012 [^] [ответить] [смотреть все]  
  • –1 +/
    > если шапка жмёт - дополни

    Вообще в первом же Вашем примере наблюдается избыточное применение cat(1), да и остального:

    echo "CPU cores available: 'grep -c ^processor /proc/cpuinfo'"

    А для адаптивного параллельного выполнения лучше сразу смотреть на parallel(1) или paexec(1).

     
     
  • 4.31, Карбофос, 18:04, 24/08/2012 [^] [ответить] [смотреть все]  
  • +/
    >echo "CPU cores available: 'grep -c ^processor /proc/cpuinfo'"

    наблюдается избыточность и ненужность такой строки вообще. а мне нужно было значение переменной.

     
  • 1.26, DelGod, 20:56, 23/08/2012 [ответить] [смотреть все]  
  • +1 +/
    Количество физических процессоров
    grep 'physical id' /proc/cpuinfo | sort -u | wc -l

    Количиство Ядер в каждом из процесоров
    grep 'core id' /proc/cpuinfo | sort -u | wc -l

     
     
  • 2.34, pavlinux, 05:41, 26/08/2012 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    > Количество физических процессоров
    > grep 'physical id' /proc/cpuinfo | sort -u | wc -l

    Да не, жирно слишком - и grep, и sort, и wc...  

    $ getconf _NPROCESSORS_ONLN;


    > Количиство Ядер в каждом из процесоров
    > grep 'core id' /proc/cpuinfo | sort -u | wc -l

    12
    4
    8

    А че, на моем кластере и 4-х ядерные есть и 8-ми и 12... :)


     
  • 1.28, zumm, 17:32, 24/08/2012 [ответить] [смотреть все]  
  • +/
    гыгы

    #!/bin/sh
    cat >> /tmp/cpus.f90 << EOF
    program cpus_num
    use omp_lib
    write (*,*) omp_get_num_procs()
    end program cpus_num
    EOF

    gfortran /tmp/cpus.f90 -fopenmp -o /tmp/cpus;
    /tmp/cpus

     
     
  • 2.29, Michael Shigorin, 17:38, 24/08/2012 [^] [ответить] [смотреть все] [показать ветку]  
  • –1 +/
    > -fopenmp

    Этак недалеко до "поставить оракл и сделать запрос". :)

    (напомнило анекдот про выяснение чётности числа различными программистами)

     
     
  • 3.35, pavlinux, 05:54, 26/08/2012 [^] [ответить] [смотреть все]  
  • +1 +/
    > (напомнило анекдот про выяснение чётности числа различными программистами)

    Как-то лет 12-13 назад, мерились в фидо, в RU.LINUX, кто-сколько,
    придумает способов замены команды ls


     
     
  • 4.37, Crazy Alex, 11:47, 06/09/2012 [^] [ответить] [смотреть все]  
  • +/
    Мне, кстати, такие извращения когда-то пригодились - надо было разобраться с железкой, в которой было что-то адски ограниченное в роли шелла - в частности, ls не было. Обходился "echo *" и подобными.
     
  • 1.36, ананим, 00:14, 29/08/2012 [ответить] [смотреть все]  
  • +/
    ну тады и от меня добавь:
    1)
    $ cat /sys/devices/system/cpu/online
    0-7
    $ cat /sys/devices/system/cpu/offline
    $ cat /sys/devices/system/cpu/possible
    0-7
    $ cat /sys/devices/system/cpu/present
    0-7
    2)
    # dmidecode -t processor|grep Thread
    Thread Count: 8
    # dmidecode -t processor|grep Core
    Family: Core i7
    Version: Intel(R) Core(TM) i7-3610QM CPU @ 2.30GHz
    Core Count: 4
    Core Enabled: 4
     
  • 1.40, sailor, 22:56, 05/05/2013 [ответить] [смотреть все]  
  • +/
    COUNT=$(sed -ne '/processor/p;' /proc/cpuinfo | wc -l)
     

    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:



      Закладки на сайте
      Проследить за страницей
    Created 1996-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor