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

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

24.03.2019, 19:37. Показов 4306. Ответов 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
4082 / 2680 / 432
Регистрация: 09.09.2017
Сообщений: 11,900
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
4082 / 2680 / 432
Регистрация: 09.09.2017
Сообщений: 11,900
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
4082 / 2680 / 432
Регистрация: 09.09.2017
Сообщений: 11,900
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
4082 / 2680 / 432
Регистрация: 09.09.2017
Сообщений: 11,900
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
4082 / 2680 / 432
Регистрация: 09.09.2017
Сообщений: 11,900
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
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru