Программе необходимо использовать все ядра/потоки ЦПУ
Всех приветствую! Помогите по проблеме: Есть некоторая программа, которой необходимо использовать все ядра/потоки ЦПУ при необходимости, ей доступно лишь одно ядро и один поток, программа имеется в исполнении как для Windows так и для Linux, в Windows все нормально, т.е. ей доступны для задействования все ядра и потоки моего ЦПУ а Linux только одно ядро и один его поток, а именно пробовал в Kubuntu 16.04 и 18.04 в других линуксах пока не пробовал, хотя есть вероятность что и в остальных такое же может быть, процессор у меня AMD Ryzen 7 и видимо для ЦПУ от AMD, для подобной программы, требуется какая то дополнительная настройка через настройки устройств системы в псевдофайловой системе Sysfs, я в этом не силен, может поможет кто советом? Т.к. с процессорами от Intel c задействованием ядер/потоков в линуксе ни у этой ни у каких либо других программ проблем нет
barmaley99
09.09.18 12:05:04 MSK
← 1 2 →
нужно несколько функций int __ryzen main(), по количеству ядер
Harald ★★★★★
( 09.09.18 12:07:37 MSK )
Ответ на: комментарий от Harald 09.09.18 12:07:37 MSK
Куда эту функцию вставить?
barmaley99
( 09.09.18 12:26:47 MSK ) автор топика
которой необходимо использовать все ядра/потоки ЦПУ при необходимости
Она написана специально с расчётом на это? libpthread в выводе ldd путь/к/исполняемому/файлу есть?
ей доступно лишь одно ядро и один поток
Откуда это известно?
anonymous
( 09.09.18 12:31:06 MSK )
Ох уж этот заветный потанцевал.
anonymous
( 09.09.18 12:36:34 MSK )
Ответ на: комментарий от barmaley99 09.09.18 12:26:47 MSK
Deleted
( 09.09.18 12:38:49 MSK )
Ответ на: комментарий от Deleted 09.09.18 12:38:49 MSK
Harald ★★★★★
( 09.09.18 12:39:14 MSK )
Ответ на: комментарий от anonymous 09.09.18 12:31:06 MSK
Короче это прога-майнер, XMRig, вот отсюда https://github.com/xmrig/xmrig/releases Там же и исходники есть, в принципе там есть файлики — Cpu.cpp, Cpu.h, Cpu_unix.cpp, в них видимо и надо код допиливать А доступно ей лишь одно ядро-поток это мне видно по результатам её работы — её производительность в линуксе ровно в 8 раз меньше чем в винде ( у меня 8 ядер — 16 потоков)
barmaley99
( 09.09.18 12:45:04 MSK ) автор топика
Ответ на: комментарий от Harald 09.09.18 12:39:14 MSK
barmaley99
( 09.09.18 12:46:05 MSK ) автор топика
Ответ на: комментарий от barmaley99 09.09.18 12:46:05 MSK
/sys, /proc смонтированы? Ты там не из-под голого ядра его запускаешь?
anonymous
( 09.09.18 12:48:50 MSK )
Ответ на: комментарий от barmaley99 09.09.18 12:46:05 MSK
пиши в гитхаб аффтарам, у них спрашивай, почему у тебя в 8 раз меньше производительсность на линуксе, мы откуда знаем тут
Harald ★★★★★
( 09.09.18 12:49:54 MSK )
Ответ на: комментарий от Harald 09.09.18 12:49:54 MSK
Писал без ответа, вот думаю может систему надо поднастроить
barmaley99
( 09.09.18 12:51:09 MSK ) автор топика
Ответ на: комментарий от anonymous 09.09.18 12:48:50 MSK
Стандартно установленная Убунта(кубунта точнее), без самодеятельности, вся система на одном томе — /, /Home на втором, свап на третьем, sys и proc на томе с системой как я вижу имеются
barmaley99
( 09.09.18 12:53:21 MSK ) автор топика
Ответ на: комментарий от barmaley99 09.09.18 12:53:21 MSK
может там видеокарта нужна
Harald ★★★★★
( 09.09.18 12:53:37 MSK )
Ответ на: комментарий от Harald 09.09.18 12:53:37 MSK
Нет, это только CPU майнер, для видюх у этих авторов отдельная прога
barmaley99
( 09.09.18 12:54:52 MSK ) автор топика
Ответ на: комментарий от barmaley99 09.09.18 12:54:52 MSK
может у амдкукурузенов AVX инструкций нет, а сабж их активно использует?
Harald ★★★★★
( 09.09.18 12:59:20 MSK )
Ответ на: комментарий от Harald 09.09.18 12:59:20 MSK
В винде то XMrig работает нормально — выдает около 500-600 H/s В линуксе мне выдает около 50-60 H/s AVX у меня на Ryzen’е есть
barmaley99
( 09.09.18 13:05:11 MSK ) автор топика
Ответ на: комментарий от barmaley99 09.09.18 13:05:11 MSK
А самой программы настройки посмотреть? Там можно жёстко задать и кол-во ядер/потоков, и даже какие именно по счёту. Например тут посмотреть https://xmr.ru/mining/xmrig/
anonymous
( 09.09.18 13:29:18 MSK )
Ответ на: комментарий от anonymous 09.09.18 13:29:18 MSK
А я все эти настройки и смотрел и в конфиге прописывал, ничего не изменилось
barmaley99
( 09.09.18 13:37:22 MSK ) автор топика
Ответ на: комментарий от barmaley99 09.09.18 13:37:22 MSK
А top например, что пишет по загруженности ядер? Может быть не в ядрах и дело.
anonymous
( 09.09.18 13:47:13 MSK )
Ответ на: комментарий от anonymous 09.09.18 13:47:13 MSK
В смысле что другие процессы могли загрузить ядра и проге ничего не осталось? Вряд ли в этом дело, как бы только на свежеустановленной системе запускал прогу, больше ничего особенно лишнего в системе не устанавливал и не запускал, откуда там столько лишней нагрузки сразу на все 8 ядер возьмется, сейчас вот к сожалению не могу посмотреть, снес систему чтобы другие линуксы перепробовать, хотя есть сомнения что это чтото изменит Также по инструкции включал поддержку больших страниц в памяти
On Linux you will need to configure large page support and increase your ulimit -l.
To set large page support, add the following lines to /etc/sysctl.conf:
To increase the ulimit, add following lines to /etc/security/limits.conf:
* soft memlock 262144 * hard memlock 262144
You WILL need to log out and log back in for these settings to take affect on your user (no need to reboot, just relogin in your session).
Вообщем явно XMRig почему то не может использовать больше одного ядра, кстати качал с инета другие майнер-проги для Monero (XMR) под ЦПУ, тоже для линукса, и на них тоже такой же результат, производительность в 8-10 раз меньше чем на винде, у людей же у которых intel’ы в линуксе все норм. Явно надо в системе еще чтото допилить настройках
Включить все ядра процессора в Windows 10/11
15.02.2023

Max

Windows 10, Windows 11, Вопросы и ответы

комментариев 46
Почти на всех современные процессоры являются многоядерными. Все современные версии Windows поддерживают мультипроцессорные CPU и все ядра на них по умолчанию активны.
В Windows есть ограничение на максимальное поддерживаемое количество физических CPU и ядер (логических процессоров) в зависимости от версии и редакции:
Сколько процессоров и ядер доступно в Windows?
Проще всего проверить, сколько физических CPU, ядер и логических процессоров доступно в Windows с помощью Task Manager.
- Запустите taskmgr.exe и перейдите на вкладку Performance;
- Выберите CPU;
- В правом окне указано количество доступных процессоров (sockets), физических ядер (24 cores) и логических процессоров (logical processors).
Логические процессоры показывают число доступных ядер с учетом того, что на компьютере включен HyperThreading.

В диспетчере устройств ( devmgmt.msc ) также отображается количество доступных логических ядер.

Также информация о физических CPU и количестве ядер на них отображается в разделе Processor утилиты msinfo32.exe
Processor Intel(R) Xeon(R) CPU E5-2673 v3 @ 2.40GHz, 2394 Mhz, 12 Core(s), 24 Logical Processor(s) Processor Intel(R) Xeon(R) CPU E5-2673 v3 @ 2.40GHz, 2394 Mhz, 12 Core(s), 24 Logical Processor(s)

Вы можете получить информацию о количестве ядер и логических процессорах с помощью PowerShell:
Get-WmiObject -class Win32_processor | ft NumberOfCores,NumberOfLogicalProcessors
NumberOfCores NumberOfLogicalProcessors ------------- ------------------------- 12 24 12 24

В переменной окружения Windows также есть информация о количестве логических процессоров в Windows:
![]()
Как включить все ядра процессора в Windows?
Если в Windows недоступны все ядра CPU, проверьте включены ли они в настройках BIOS/UEFI. Здесь могут быть два параметра:
- HyperThreading – возможность использовать оба логических процессора ядра CPU
- Active Processor Cores – разрешено ли использовать все ядра процессора
Перезагрузите Windows и войдите в настройки BIOS (обычно для этого используются клавиши F2 , Del , F10 или F1 .
Конкретные названия пунктов и их наличие зависит от версии BIOS и модели процессора. В моем случае все ядра и логические процессоры включены в разделе Processor Configuration:
- Hyper-Threading ALL: Enabled
- Active Processor Cores: All

Эти настройки могут находится в разделах Advanced, Extreme Tweaker и называться Processor Options, AMD Core Select, Processor Core, Active Processor Cores, Core Multi-Processing, CPU Cores и т.д.
Как запускать программу в Windows только на определенных ядрах?
В Windows вы можете разрешить программе выполняться только на одном или нескольких ядрах. По-умолчанию запущенное приложение Windows может выполняться на любом ядре.
Если вам нужно привязать программу к определенным ядрам, можно воспользоваться функцией Processor Affinity. Это может понадобится, если вы хотите ограничить использование CPU программой, или запускать программу только на одном ядре (это бывает нужно для запуска старых приложений, которые некорректно работают на многоядерных компьютерах.
Вы можете изменить привязку запущенного приложения к ядрам с помощью Task Manager:
-
Перейдите на вкладку Details;


Если нужно сразу запустить приложение на одном ядре, например, CPU0. Воспользуйтесь командой:
cmd.exe /c start «Acrobat DC» /affinity 1 «C:\Program Files\MyApp\yourappname.exe»
Включить все ядра Windows при загрузке
В Windows при загрузке компьютера всегда используется одно ядро. Вы можете разрешить использовать все ядра при загрузке Windows через System Configuration:

- Запустите утилиту msconfig ;
- Перейдите на вкладку Boot и выберите загрузочную запись вашей Windows;
- Нажмите Advanced options;
- Включите опцию Number of processors в окне BOOT Advanced Options;
- Выберите количество логических процессоров (потоков), которые можно использовать при загрузке .
Вы не заметите существенного ускорения загрузки Windows, если увеличите число доступных процессоров. Кроме того, в некоторых случаях эта опция может вызвать проблемы с загрузкой Windows, особенно при включении опции PCI lock (ошибка загрузки BAD SYSTEM CONFIG INFO). Поэтому в большинстве случаев не рекомендуется включать и настраивать эту опцию.
Предыдущая статья Следующая статья
Работает только одно ядро процессора. Как запустить остальные?
После обновления ядра, от процессора работает только одна восьмая.
При сборке пакета, с ядром kernel-genkernel-x86_64-4.1.6-gentoo cpupower показывает
|Mperf || Idle_Stats CPU | C0 | Cx | Freq || POLL | C1 | C2 0| 99.99| 0.01| 3887|| 0.00| 0.00| 0.00 1| 99.99| 0.01| 3888|| 0.00| 0.00| 0.00 2| 99.99| 0.01| 3887|| 0.00| 0.00| 0.00 3| 99.99| 0.01| 3888|| 0.00| 0.00| 0.00 4| 99.99| 0.01| 3887|| 0.00| 0.00| 0.00 5| 98.50| 1.50| 3888|| 0.00| 0.00| 1.48 6| 99.99| 0.01| 3887|| 0.00| 0.00| 0.00 7| 99.99| 0.01| 3887|| 0.00| 0.00| 0.00
А с новым kernel-genkernel-x86_64-4.2.0-gentoo-r1 при сборке того же пакета
|Mperf || Idle_Stats CPU | C0 | Cx | Freq || POLL | C1 | C2 0| 99.97| 0.03| 3886|| 0.00| 0.00| 0.00 1| 0.00|100.00| 3448|| 0.00| 0.00|100.00 2| 0.00|100.00| 2212|| 0.00| 0.00|100.00 3| 0.01| 99.99| 1770|| 0.00| 0.00| 99.99 4| 0.03| 99.97| 1806|| 0.00| 0.00| 99.97 5| 0.02| 99.98| 1778|| 0.00| 0.00| 99.98 6| 0.02| 99.98| 1822|| 0.00| 0.00| 99.98 7| 0.00|100.00| 1839|| 0.00| 0.00|100.00
В diff .config ядра ничего необычного. Я, обычно, соглашаюсь с умолчаниями.
diff kernel-config-x86_64-4.1.6-gentoo kernel-config-x86_64-4.2.0-gentoo-r1 3c3 < # Linux/x86 4.1.6-gentoo Kernel Configuration --- ># Linux/x86 4.2.0-gentoo-r1 Kernel Configuration 51d50 < CONFIG_X86_HT=y 100d98 < CONFIG_GENERIC_IRQ_LEGACY_ALLOC_HWIRQ=y 103a102 >CONFIG_IRQ_DOMAIN_HIERARCHY=y 104a104 > CONFIG_GENERIC_MSI_IRQ_DOMAIN=y 145a146 > # CONFIG_RCU_EXPERT is not set 152,155d152 < CONFIG_RCU_FANOUT=64 < CONFIG_RCU_FANOUT_LEAF=16 < # CONFIG_RCU_FANOUT_EXACT is not set < # CONFIG_RCU_FAST_NO_HZ is not set 157,158d153 < # CONFIG_RCU_BOOST is not set < CONFIG_RCU_KTHREAD_PRIO=0 270a266 >CONFIG_ARCH_WANTS_DYNAMIC_TASK_STRUCT=y 300a297 > CONFIG_HAVE_COPY_THREAD_TLS=y 320a318 > CONFIG_MODULES_TREE_LOOKUP=y 372,373c370,373 < CONFIG_ARCH_USE_QUEUE_RWLOCK=y < CONFIG_QUEUE_RWLOCK=y --- >CONFIG_ARCH_USE_QUEUED_SPINLOCKS=y > CONFIG_QUEUED_SPINLOCKS=y > CONFIG_ARCH_USE_QUEUED_RWLOCKS=y > CONFIG_QUEUED_RWLOCKS=y 499a500 > CONFIG_ARCH_SUPPORTS_DEFERRED_STRUCT_PAGE_INIT=y 566a568 > CONFIG_ACPI_REV_OVERRIDE_POSSIBLE=y 590a593 > # CONFIG_ACPI_NFIT is not set 672a676 > CONFIG_PCI_MSI_IRQ_DOMAIN=y 719a724 > CONFIG_NET_INGRESS=y 761c766 < CONFIG_GENEVE=m --- >CONFIG_GENEVE_CORE=m 811a817 > CONFIG_NETFILTER_INGRESS=y 1093a1100 > # CONFIG_NET_CLS_FLOWER is not set 1163a1171 > CONFIG_BT_RTL=m 1165a1174 > CONFIG_BT_HCIBTUSB_RTL=y 1217a1227 > CONFIG_MAC80211_STA_HASH_MAX_SIZE=0 1271a1282 > # CONFIG_OF is not set 1309d1319 < # CONFIG_BLK_DEV_PMEM is not set 1374a1385,1389 ># CONFIG_SCIF_BUS is not set 1383a1403 > # CONFIG_CXL_KERNEL_API is not set 1456a1477 > # CONFIG_SCSI_SNIC is not set 1645a1667 > CONFIG_GENEVE=m 1649a1672 > # CONFIG_TUN_VNET_CROSS_LE is not set 1676a1700 > # CONFIG_VHOST_CROSS_ENDIAN_LEGACY is not set 1718a1743,1747 > CONFIG_NET_VENDOR_CAVIUM=y > # CONFIG_THUNDER_NIC_PF is not set > # CONFIG_THUNDER_NIC_VF is not set > # CONFIG_THUNDER_NIC_BGX is not set > # CONFIG_LIQUIDIO is not set 1747a1777 > CONFIG_NET_VENDOR_EZCHIP=y 1816a1847 > CONFIG_NET_VENDOR_RENESAS=y 1876a1908 > # CONFIG_DP83867_PHY is not set 2052a2085 > # CONFIG_WL_MEDIATEK is not set 2072a2106 > CONFIG_INPUT_LEDS=m 2202a2237 > # CONFIG_TOUCHSCREEN_WDT87XX_I2C is not set 2259a2295 > # CONFIG_INPUT_DRV2665_HAPTICS is not set 2547a2584 > # CONFIG_CHARGER_BQ24257 is not set 2548a2586 > # CONFIG_CHARGER_BQ25890 is not set 2550a2589 > # CONFIG_CHARGER_RT9455 is not set 2583a2623 > # CONFIG_SENSORS_DELL_SMM is not set 2675a2716 > # CONFIG_SENSORS_TC74 is not set 2701a2743 > # CONFIG_THERMAL_WRITABLE_TRIPS is not set 2704a2747 > # CONFIG_THERMAL_DEFAULT_GOV_POWER_ALLOCATOR is not set 2708a2752 > # CONFIG_THERMAL_GOV_POWER_ALLOCATOR is not set 2711a2756 > CONFIG_INTEL_SOC_DTS_IOSF_CORE=m 2729a2775 > # CONFIG_MAX63XX_WATCHDOG is not set 3093a3140 > # CONFIG_VIDEO_DT3155 is not set 3302a3350 > CONFIG_DVB_CX24120=m 3403a3452 > # CONFIG_DRM_AMDGPU is not set 3417a3467 > # CONFIG_DRM_VIRTIO_GPU is not set 3546a3597 > CONFIG_SND_PROC_FS=y 3551d3601 < CONFIG_SND_KCTL_JACK=y 3643d3692 < CONFIG_SND_HDA_PREALLOC_SIZE=64 3647d3695 < # CONFIG_SND_HDA_INPUT_JACK is not set 3663a3712 >CONFIG_SND_HDA_PREALLOC_SIZE=64 3799a3849 > # CONFIG_USB_ULPI_BUS is not set 4012a4063 > # CONFIG_MMC_MTK is not set 4040a4092 > # CONFIG_LEDS_TLC591XX is not set 4080d4131 < # CONFIG_MLX5_INFINIBAND is not set 4088a4140,4141 >CONFIG_EDAC_ATOMIC_SCRUB=y > CONFIG_EDAC_SUPPORT=y 4093d4145 < CONFIG_RTC_SYSTOHC=y 4094a4147,4148 >CONFIG_RTC_SYSTOHC=y > CONFIG_RTC_SYSTOHC_DEVICE="rtc0" 4161d4214 < # CONFIG_RTC_DRV_XGENE is not set 4202a4256 ># CONFIG_UIO_PRUSS is not set 4230a4285 > # CONFIG_DELL_RBTN is not set 4264a4320 > # CONFIG_INTEL_PMC_IPC is not set 4307a4364 > # CONFIG_SUNXI_SRAM is not set 4339a4397,4398 > # CONFIG_STK8312 is not set > # CONFIG_STK8BA50 is not set 4370a4430 > # CONFIG_M62332 is not set 4409a4470 > # CONFIG_ACPI_ALS is not set 4412a4474 > # CONFIG_BH1750 is not set 4422a4485 > # CONFIG_STK3310 is not set 4435a4499 > # CONFIG_MMC35240 is not set 4436a4501 > # CONFIG_BMC150_MAGN is not set 4481a4547,4548 > # CONFIG_PHY_PXA_28NM_HSIC is not set > # CONFIG_PHY_PXA_28NM_USB2 is not set 4491a4559,4563 > CONFIG_LIBNVDIMM=y > # CONFIG_BLK_DEV_PMEM is not set > CONFIG_ND_BLK=y > CONFIG_ND_BTT=y > CONFIG_BTT=y 4510a4583 > CONFIG_EFI_ESRT=y 4633a4707 > # CONFIG_PROC_CHILDREN is not set 4717,4718c4791 < CONFIG_SUNRPC_XPRT_RDMA_CLIENT=m < CONFIG_SUNRPC_XPRT_RDMA_SERVER=m --- >CONFIG_SUNRPC_XPRT_RDMA=m 4729a4803 > # CONFIG_CIFS_SMB311 is not set 4842d4915 < CONFIG_KASAN_SHADOW_OFFSET=0xdffffc0000000000 4861a4935 >CONFIG_SCHED_INFO=y 4899a4974 > # CONFIG_RCU_EQS_DEBUG is not set 4997a5073 > # CONFIG_DEBUG_ENTRY is not set 4999a5076,5077 > CONFIG_X86_DEBUG_FPU=y > # CONFIG_PUNIT_ATOM_DEBUG is not set 5059a5138 > CONFIG_CRYPTO_RNG_DEFAULT=m 5061a5141,5143 > CONFIG_CRYPTO_AKCIPHER2=y > CONFIG_CRYPTO_AKCIPHER=m > CONFIG_CRYPTO_RSA=m 5081a5164 > # CONFIG_CRYPTO_CHACHA20POLY1305 is not set 5082a5166 > CONFIG_CRYPTO_ECHAINIV=m 5112a5197 > # CONFIG_CRYPTO_POLY1305 is not set 5156a5242 > # CONFIG_CRYPTO_CHACHA20 is not set 5174a5261 > # CONFIG_CRYPTO_842 is not set 5182c5269,5274 < # CONFIG_CRYPTO_DRBG_MENU is not set --- >CONFIG_CRYPTO_DRBG_MENU=m > CONFIG_CRYPTO_DRBG_HMAC=y > # CONFIG_CRYPTO_DRBG_HASH is not set > # CONFIG_CRYPTO_DRBG_CTR is not set > CONFIG_CRYPTO_DRBG=m > CONFIG_CRYPTO_JITTERENTROPY=m 5186a5279 > # CONFIG_CRYPTO_USER_API_AEAD is not set 5234a5328 > CONFIG_PERCPU_RWSEM=y 5302a5397 > CONFIG_ARCH_HAS_PMEM_API=y
Как сделать, чтобы программа использовала для работы определенное ядро процессора
Назначение логических процессоров определенной программе в Windows 7 и Windows 8
Указанные функции работают в Windows 7, Windows 8 и Windows Vista. О последней я не говорю, так как ее мало кто использует у нас в стране.
Запустите Диспетчер Задач Windows и:
- В Windows 7 откройте вкладку «Процессы»
- В Windows 8 откройте «Подробности»

Кликните правой клавишей мыши по интересующему Вас процессу и выберите в контекстном меню пункт «Задать сходство». Появится окно «Соответствие процессоров», в котором Вы можете указать, какими ядрами процессора (или, вернее, логическими процессорами) программе разрешено пользоваться.

Вот и все, теперь процесс использует только те логические процессоры, которые ему разрешили. Правда происходит это ровно до следующего его запуска.
Как запустить программу на определенном ядре процессора (логическом процессоре)
В Windows 8 и Windows 7 имеется также возможность запустить приложение так, чтобы сразу после запуска оно использовало определенные логические процессоры. Для того, чтобы сделать это, запуск приложения нужно осуществлять с указанием соответствия в параметрах. Например:
c:\windows\system32\cmd.exe /C start /affinity 1 software.exe
В этом примере будет запущено приложение software.exe с использованием 0-го (ЦП 0) логического процессора. Т.е. цифра после affinity указывает номер логического процессора + 1. Эту же команду Вы можете записать в ярлык приложения, чтобы оно всегда запускалось с использованием определенного логического процессора. К сожалению, мне не удалось найти информации, как передать параметр таким образом, чтобы приложение использовало не один логический процессор, а сразу несколько.
UPD: нашел как запустить приложение на нескольких логических процессорах с помощью параметра affinity. Указываем маску в шестнадцатеричном формате, например требуется использовать процессоры 1, 3, 5, 7, соответственно, это будет 10101010 или 0xAA, передаем в виде /affinity 0xAA.

А вдруг и это будет интересно:
- Лучшие бесплатные программы для Windows
- Как скачать msvcr100.dll x64 и x86 для Windows 11/10/8.1/7 и исправить ошибку при запуске игр и программ
- Загрузка с флешки в БИОС и UEFI
- Как проверить оперативную память компьютера или ноутбука
- Как подключить ноутбук к телевизору
- Как отключить Secure Boot
- Windows 11
- Windows 10
- Android
- Загрузочная флешка
- Лечение вирусов
- Восстановление данных
- Установка с флешки
- Настройка роутера
- Всё про Windows
- В контакте
- Одноклассники
-
frenor 04.04.2015 в 01:37
- Dmitry 05.04.2015 в 12:51
