Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
3 / 3 / 0
Регистрация: 08.12.2015
Сообщений: 249

Количество ФИЗИЧЕСКИХ процессоров

24.03.2019, 19:37. Показов 4362. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не выходит написать код для определения количества ФИЗИЧЕСКИХ процессоров (не ядер ) в системе.
есть команда для этого , но как ее интерпретировать на с/c++ не могу догнать
Bash
1
cat /proc/cpuinfo | grep 'physical id' | sort | uniq | wc -l
Добавлено через 20 минут
Еще интересно то ,что при
Bash
1
cat /proc/cpuinfo | grep 'physical id' | sort | uniq | wc -l
выдает 0 ,почему-то
А при
Bash
1
ls /sys/devices/system/node|grep node|wc -l
выдает 4,что верно
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.03.2019, 19:37
Ответы с готовыми решениями:

Уменьшить количество _raw_spin_lock в системе с множеством процессоров
Я тут написал маленький ethernet driver с Napi, интераптами и etc. Я использую napi_gro_receive чтоб передать пакет Линукс TCP/IP Стаку....

Количество физических процессоров обязательное условие?
При сравнении показателей Windows 7 Home Basic и Windows 7 Professional натолкнулась на понятие "Кол-во физических процессоров"....

Есть ли в винде ограничения на количество процессоров или ядер процессоров?
Есть ли в винде ограничения на количество процессоров или ядер процессоров? Добавлено через 12 минут Нашел для семерки...

23
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
24.03.2019, 20:15
Цитата Сообщение от fascio27 Посмотреть сообщение
есть команда для этого
А ты хоть понимаешь, что она делает?
0
3 / 3 / 0
Регистрация: 08.12.2015
Сообщений: 249
24.03.2019, 20:19  [ТС]
Evg, ну если говорить про
Bash
1
cat /proc/cpuinfo | grep 'physical id' | sort | uniq | wc -l
то как я понял выводит physical id из файла cpuinfo
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
24.03.2019, 20:28
А вообще, есть подозрение, что наличие в выдаче "physical id" - это только в каком-то конкретном случае. У меня из многопроцессорных машин есть доступ только к не-intel'овским, но там печать визуально не отличается от однопроцессорной. Т.е. просто печатается список всех ядер, независимо от того, сколько процессоров

Добавлено через 1 минуту
Цитата Сообщение от fascio27 Посмотреть сообщение
то как я понял выводит physical id из файла cpuinfo
В общем понятно, что ты нифига не понимаешь. Покажи, что на твоей машине печатает приказ "cat /proc/cpuinfo"

Добавлено через 1 минуту
Если не забуду, завтра поспрашиваю у людей, может быть знают правильный способ

Добавлено через 54 секунды
Или ты уже проверил, что вся длинная команда конкретно в твоём случае работает правильно?
0
3 / 3 / 0
Регистрация: 08.12.2015
Сообщений: 249
25.03.2019, 09:52  [ТС]
Evg,
Bash
1
cat /proc/cpuinfo | grep 'physical id' | sort | uniq | wc -l
работает неверно , но это видимо потому ,что в моем случае в cpuinfo нету записи 'physical id'

Bash
1
ls /sys/devices/system/node|grep node|wc -l
отображает верно ,но я не до конца с этой командой разобрался.
Может есть какой-то универсальный способ?=)
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
25.03.2019, 10:03
Цитата Сообщение от fascio27 Посмотреть сообщение
ls /sys/devices/system/node
Здесь у меня тоже отработало в соответствии с ожиданиями

Цитата Сообщение от fascio27 Посмотреть сообщение
Может есть какой-то универсальный способ?=)
Линукс - это не та система, в которой можно оперировать понятиями типа "универсальный способ". Я спрошу у людей, но если вдруг и есть более культурный способ, всё равно у него будут какие-нибудь ограничения типа того, что на ядрах (имеется в виду kernel - ядро ОС) с версией меньше такого-то это не будет работать
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,910
25.03.2019, 10:36
Цитата Сообщение от fascio27 Посмотреть сообщение
ls /sys/devices/system/node|grep node|wc -l
отображает верно
А у меня всего 1 выдало, хотя в системе 2 ядра 4 потока. Так что не такой уж универсальный способ.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
25.03.2019, 14:22

Не по теме:

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
А у меня всего 1 выдало, хотя в системе 2 ядра 4 потока
Он же специально указал "количества ФИЗИЧЕСКИХ процессоров (не ядер )"



Добавлено через 2 часа 33 минуты
В общем, культурных способов не знают. Только через ковыряние в системных каталогах /sys. Скорее всего это не файлы на диске, а что-то, подмонтированное в системную память ядра, наподобие /proc, но на 100% не уверен (впрочем, это и не важно)

В каталоге /sys/devices/system/cpu находится информация по всем ядрам - каталоги cpu0, cpu1, ... Внутри каждого такого каталога есть каталог topology, в нём файл physical_package_id, в котором записан номер физического процессора, которому принадлежит ядро

Т.е. надо пройтись по всем таким каталогам и суммарно наскрести всю информацию о разнообразии физических процессоров и на основании этого посчитать, сколько физических процессоров есть (но скорее всего речь пойдёт о включенных процессорах, а не обо всех)

Т.е. приказ

Code
grep . /sys/devices/system/cpu/cpu*/topology/physical_package_id | cut -d: -f2 | sort | uniq | wc -l
Как это сделать на Си? Я бы сделал скрипт, содержащий такую команду, положил его в определённое место на файловой системе, из программы запустил бы этот скрипт и посмотрел его выдачу. Если топорно, то через функцию system. Если по умному, то через функции fork + execvp + pipe + read
1
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,910
25.03.2019, 16:35
Цитата Сообщение от Evg Посмотреть сообщение
Он же специально указал "количества ФИЗИЧЕСКИХ процессоров (не ядер )"
Имелось в виду на серверных и других экзотических системах что ли?
Если так, для чего это может понадобиться?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
25.03.2019, 20:58
Для полноты картины. Количество ядер - man get_nprocs_conf
0
3 / 3 / 0
Регистрация: 08.12.2015
Сообщений: 249
25.03.2019, 23:35  [ТС]
COKPOWEHEU, в дальнейшем для регуляции вентиляторов на процессорах

Добавлено через 23 секунды
Evg, спасибо , полажу ,буду пробовать=)
0
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,910
26.03.2019, 10:48
Цитата Сообщение от Evg Посмотреть сообщение
Количество ядер - man get_nprocs_conf
Только это количество потоков, а не ядер.
0
153 / 148 / 66
Регистрация: 20.02.2014
Сообщений: 556
26.03.2019, 11:39
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Только это количество потоков
У вас какой-то специальный ман?
NAME
get_nprocs, get_nprocs_conf - get number of processors

SYNOPSIS
#include <sys/sysinfo.h>

int get_nprocs(void);
int get_nprocs_conf(void);

DESCRIPTION
The function get_nprocs_conf() returns the number of processors configured by the operating system.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
26.03.2019, 12:34
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Только это количество потоков, а не ядер
Это количество сущностей, на которые можно поставить задачу на исполнение (т.е. с точки зрения ОС). Ну может быть это ещё можно назвать словом "количество виртуальных ядер". Но не применяй идиотский маркетинговый термин "поток" в контексте программирования, тебя большинство людей не поймут

Цитата Сообщение от Вованя Посмотреть сообщение
У вас какой-то специальный ман?
Операционная система в режиме SMP (симметричная многопроцессорность) каждую такую сущность называет словом "процессор" (точнее "processor"). Т.е. на низком уровне что-то проинициализировано и в итоге оказывается, что у тебя в наличии доступно 16 попугаев, на которые можно поставить на исполнении задачу. Каково конкретной устройство этих попугаев - начиная с некоторого момента роли не играет. Во всех перечисленных ниже случаях ядро ОС будет работать одинаково:

1. В системе четыре одноядерных процессора без гипетрединга
2. В системе один четырёхядерный процессор без гипертрединга
3. В системе один двухядерный процессор с гипертредингом
4. В системе два одноядерных процессора с гипертредингом

Во всех случаях ядро ОС может поставить на исполнение одновременно 4 процесса или программных потока

Под словом "гипетрединг" тут подразумевается любая сущность, порождающая два виртуальных ядра на одно физическое ядро: гпетрединг (то, что на современных Intel), SMT (то, что на AMD Ryzen), процессорные модули (то, что на AMD FX) и ещё бог весть какие технологии, которые существуют в природе и работают с аналогичным смыслом
2
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,910
26.03.2019, 13:27
Цитата Сообщение от Evg Посмотреть сообщение
Во всех перечисленных ниже случаях ядро ОС будет работать одинаково:
В том-то и дело, что нет. Лично у меня во время экспериментов получилось, что производительность 4 виртуальных ядер всего на 30% больше, чем 2 физических, а вовсе не на 100%.
Если вам не нравится термин "поток" - я за него не цепляюсь, пусть будут виртуальные ядра если считаете что такое название лучше отражает суть.

Не по теме:

Хотя вообще-то, русскоязычный "поток" и без того довольно многозначное понятие: и поток ввода-вывода (stdin/stdout), и потоки выполнения (thread)

0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
26.03.2019, 16:39
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Лично у меня во время экспериментов получилось, что производительность 4 виртуальных ядер всего на 30% больше, чем 2 физических, а вовсе не на 100%.
А именно так и должно быть. Ядро ставит две задачи на два виртуальных ядра. А дальше процессор сам корячится, по очереди их исполняя на одном и том же физическом ядре

Важным является то, что планировщик ОС не знает о том, что эти ядра - виртуальные. Он просто видит N processor'ов и раскидывает между ними задачи, абсолютно не разбираясь в том, где там и что. В случае гипертрединга требуются напильники, чтобы это работало эффективно. Например, постоянная ротация задач по ядрам. В случае нескольких физических процессоров включаются какие-то дополнительные механизмы, учитывающие, что перекидывать задачу между ранзными процессорами намного дольше по времени, да и кэши там физически разведены. А если ещё и память распределённая (NUMA), то требуются ещё напильники

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Если вам не нравится термин "поток" - я за него не цепляюсь, пусть будут виртуальные ядра если считаете что такое название лучше отражает суть
Лично мне всё равно. Но после общения с людьми из железячных тем я предпочитаю термины "программный поток" и "виртуальное ядро". Маркетологи настолько всем заездили мозги "потоками" в процессоре, что люди начинают неправильно понимать смысл написанного. Собственно, для того они (маркетологи) и начали использовать термин "поток", что это помогает сбить с толку людей, читающих материал о программных потоках
2
 Аватар для COKPOWEHEU
4083 / 2681 / 432
Регистрация: 09.09.2017
Сообщений: 11,910
26.03.2019, 16:58
Цитата Сообщение от Evg Посмотреть сообщение
Важным является то, что планировщик ОС не знает о том, что эти ядра - виртуальные. Он просто видит N processor'ов и раскидывает между ними задачи, абсолютно не разбираясь в том, где там и что.
А что ему еще остается, он же не знает о конкретном алгоритме пользователя и не может это оптимизировать. Правда, не уверен, что информация о количестве реальных и виртуальных ядер как-то поможет и пользователю, но мало ли... Где-то краем уха слышал, что можно подсказать ОС на каком ядре запускать данный процесс. Но особо темой не интересовался, может и не работает это.
С чего все началось-то. В системе может быть несколько физических процессоров, в каждом из них несколько физических ядер, в каждом из них несколько виртуальных. Это уже 3 разных числа. Не работал с кластерами, но интуитивно кажется что одна система еще и может работать на нескольких компьютерах, тогда чисел целых 4, и все разные.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
26.03.2019, 20:34
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
А что ему еще остается, он же не знает о конкретном алгоритме пользователя и не может это оптимизировать
Если под "алгоритмом" ты имеешь в виду планирование, то пользователь сам всё может настроить. Там есть система приоритетов и ещё какие-то функции, связанные с настройкой планирования. Правда большинство из этого скорее всего только под суперпользователем (root, Администратор) работает

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Где-то краем уха слышал, что можно подсказать ОС на каком ядре запускать данный процесс. Но особо темой не интересовался, может и не работает это
В linux'е - "taskset -c". В винде - в диспетчере задач ПКМ - "задать соответствие". Правда в случае гипертрединга и подобных технологий надо ещё правильно разобраться, как там правильно нумеруются виртуальные ядра

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
С чего все началось-то. В системе может быть несколько физических процессоров, в каждом из них несколько физических ядер, в каждом из них несколько виртуальных. Это уже 3 разных числа
Да. Количества всего этого барахла и есть processor'ы в описании "The function get_nprocs_conf() returns the number of processors configured by the operating system." - в терминах планировщика ОС. В посте #14 фраза "Во всех перечисленных ниже случаях ядро ОС будет работать одинаково" имелся в виду планировщик ОС. А функция get_nprocs_conf - это для тех, кто хочет ручками сам всё распихать по процессорным ядрам, чтобы планировщик ОС не занимался жонглированием по своим правилам

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
Не работал с кластерами, но интуитивно кажется что одна система еще и может работать на нескольких компьютерах, тогда чисел целых 4, и все разные
Да, может (так называемые "распределённые вычисления"). Но это обычно отдельная программная прослойка. Машины объединяются по сети. С точки зрения ОС на одной машине есть только она и больше никто. О существовании других машин в кластере обычно знает только софт, но не ОС. "Знает" в смысле "управляет". Т.е. это именно софтина раскидывает задачи по машинам, а не планировщик ОС. Хотя может быть и специализированные операционки есть, когда общение между машинами ведётся на уровне ядер ОС, а не на уровне софта
0
3 / 3 / 0
Регистрация: 08.12.2015
Сообщений: 249
28.03.2019, 13:58  [ТС]
Evg,
Я здесь полазил и нашел файл online ,путь к нему :/sys/devices/system/cpu/online
Может возможно в нем считать ,у меня вроде верно отображает 0-7,8-15,16-23,24-31
То есть 4 физических процессора по 8 ядер.
Просто нет возможности проверить на других машинах.
0
725 / 224 / 73
Регистрация: 01.03.2011
Сообщений: 643
28.03.2019, 17:04
Цитата Сообщение от fascio27 Посмотреть сообщение
Может возможно в нем считать ,у меня вроде верно отображает 0-7,8-15,16-23,24-31
Нет. Линукс так выводит на печать любые битмэпы, в том числе и cpuset/cpumask
Цитата Сообщение от fascio27 Посмотреть сообщение
в дальнейшем для регуляции вентиляторов на процессорах
звучит феерично.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.03.2019, 17:04
Помогаю со студенческими работами здесь

i7 3770 видит 2 физических ядра и 4 потока из 4 физических ядер и 8 потоков
i7 3770 видит 2 физических ядра и 4 потока из 4 физических ядер и 8 потоков Выставлял настройки в MSConfig, в BIOS показывает 4 ядра ...

Количество физических HDD
Желательно wmi Как на C# вывести кол физических HDD, кол-во cd-dvd устройств??? для вывода использую textbox.

Получить количество физических дисков
Здравствуйте! Подскажите, пожалуйста! Как программно получить количество физических дисков на компьютере? Сейчас считаю диски...

Как посмотреть реальное количество физических ядер?
Народ подскажите ото я запутался совсем. Мне нужно определить количество ядер на текущей ос Ubuntu 12.04. Я по гуглил и нашел несколько...

Программно узнать количество физических ядер процессора
Есть ли простой способ получить количество физических ядер в системе?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru