|
0 / 0 / 0
Регистрация: 17.03.2012
Сообщений: 11
|
|
Билдер и 4 ядра17.03.2012, 23:02. Показов 4983. Ответов 26
Метки нет (Все метки)
У меня 4-х ядерный процессор, и я использую CodeGear C++ Builder 11.
Приложение, над которым я работаю, вычислительноёмкое, и я хотел бы использовать процессор по максимуму. Но когда открываю Windows Task Manager, вижу, что потребляется лишь 25% процессорного времени. Есть подозрение, что задействуется только одно ядро, хотя может быть просто в билдере стоит ограничение. Вопрос: как сделать так, чтоб использовалось 90% процессора?
0
|
|
| 17.03.2012, 23:02 | |
|
Ответы с готовыми решениями:
26
нетбук с каким процом лучше n550(2 ядра )или C-50(2 ядра )? Помогайте выбрать: видюха 640М и проц i7 2.4Гц (4 ядра) или 750M и i7 2Гц (2 ядра) ? Что выбрать: Intel 2 ядра или AMD 4 ядра? |
|
2622 / 1633 / 266
Регистрация: 19.02.2010
Сообщений: 4,335
|
|
| 17.03.2012, 23:18 | |
|
Нет, в Билдере ограничений не стоит.
Надо "вручную" запрограммировать распределение вычислений на несколько потоков. Курите либо класс TThread, либо виндовозовские апишные функции (CreateThread() и прочие).
0
|
|
|
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
|
|||
| 17.03.2012, 23:19 | |||
|
0
|
|||
|
|
|
| 17.03.2012, 23:23 | |
|
TThread лучше наверное в нем синхронизация с компонентами реализована.
Как я понимаю если приложение однопоточно то выполняется оно с одинаково независимо от кол-ва ядер(тобиш выигрыша 0) И не факт что программу можно "разложить" на потоки.
0
|
|
|
0 / 0 / 0
Регистрация: 17.03.2012
Сообщений: 11
|
|
| 17.03.2012, 23:33 [ТС] | |
|
Потоки, значит...
Спасибо, попробую. Вроде должно получиться: у меня там массив объектов, и каждый объект вычисляется независимо. Значит, первым делом стоит TThread попробовать?
0
|
|
|
36 / 36 / 8
Регистрация: 10.11.2011
Сообщений: 94
|
||||||
| 18.03.2012, 12:24 | ||||||
|
увеличивать процессорное время выделяемое программе
код есть на Delphi, проблем переписать на С++ не составит
0
|
||||||
|
Технофашист
228 / 216 / 11
Регистрация: 11.03.2009
Сообщений: 887
|
||
| 18.03.2012, 13:00 | ||
Если ищешь более легкий путь, то советую использовать технологию MPI, которая как раз и создана для распараллеливания вычислительноемких задач. По сложности изучения, что MPI, что потоки примерно одинаковы, но вот использовать MPI гораздо проще и приятнее. К тому же, можно распараллеливать и на несколько компов. Если заинтересовало, то советую Реализация MPICH2 - http://parallel.ru/vvv/mpi.html
0
|
||
|
0 / 0 / 0
Регистрация: 17.03.2012
Сообщений: 11
|
|
| 19.03.2012, 22:49 [ТС] | |
|
Всем спасибо за советы. Я использовал TThread и получил полную загрузку. Это оказалось не сложно, так что библиотеки использовать видимо не буду.
А вот совет ББК, которому я последовал в первую очередь, не помог, что не удивительно: если в программе явно не расписана многопоточность, то воспользоваться дополнительными процессорами она не может, какой ты ей приоритет ни поставь. darkAngel, а упомянутые тобой примитивы синхронизации для чего используются? Про них у Архангельского не было упомянуто, поэтому я сделал по-простому: 4 потока, в каждом обрабатываю 1/4 массива объектов, а пятый, главный, поток следит, чтоб эти 4 потока выполнились, и тогда переходит к следующему циклу.
0
|
|
|
|
||
| 19.03.2012, 23:11 | ||
У Архангельского несколько книг в одной он TThread описывает и там есть о возможности этого класса синхронизировать доступ потоков к vcl- компонентам В другой книге (более продвинутой) дается описание WinApi -ф-ции и объектов синхронизации доступа к ресурсам (мютексы,семафоры,события и тп) Самое скверное это то что без синхронизации прога поначалу может работать нормально, но в непредвиденных ситуациях напрочь заглючивать.
0
|
||
|
0 / 0 / 0
Регистрация: 17.03.2012
Сообщений: 11
|
|
| 20.03.2012, 16:24 [ТС] | |
|
Avazart, а как называется эта "более продвинутая" книга?
Я сначала распараллелил независимое вычисление объектов, и всё работало нормально. Но потом распараллелил взаимодействие объектов, при котором они обращаются к полям друг друга, и всё стало зависать в произвольный момент времени. Похоже, надо разбираться в семафорах и прочем.
0
|
|
|
|
||
| 20.03.2012, 19:18 | ||
|
0
|
||
|
0 / 0 / 0
Регистрация: 17.03.2012
Сообщений: 11
|
||||||||||||
| 21.03.2012, 20:03 [ТС] | ||||||||||||
|
Хотя, мне кажется, что я исправил ситуацию. К сожалению, пришёл к решению интуитивно, а не в результате понимания ситуации. Может кто подскажет, почему всё зависало? А дело вот в чём. Мне казалось, что зависания эти происходят вовсе не из-за обращения к одному и тому же ресурсу. Потому что во-первых, данные читались, а не записывались, а во-вторых, зависания происходили либо с самого начала (после единиц циклов), либо в конце, когда популяция обсчитываемых объектов значительно уменьшалась. В остальное время всё отлично работало, а значит потоки не конфликтовали при чтении данных. И случайно я нашёл решение. Мне надо было понизить приоритет главного потока, чтоб цикл ожидания не мешал дочерним потокам считать объекты. И вдруг оказалось, что если поставить главному потоку минимальный приоритет, программа виснет сразу и в 100% случаев. А если дать ему максимальный приоритет, то программа не виснет. А было всё вот как организовано (опишу в псевдокоде):
И, собственно, вот как я поменял процедуру главного потока:
0
|
||||||||||||
|
|
|
| 22.03.2012, 17:14 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 17.03.2012
Сообщений: 11
|
|||||||
| 22.03.2012, 17:59 [ТС] | |||||||
|
переменная "с" становится ложью если все потоки засуспенжены
Кстати, после упомянутого мною в предыдущем посте нововведения с приоритетами, ситуация таки возникает, но никогда вначале, а только в том случае, когда число объектов становится небольшим, порядка десяти штук. Сейчас я просто добавил таймер, который суспендит незасуспендившийся поток по прошествии некоторого интервала. Но всё же хотелось бы понять причину ситуации и нейтрализовать её. Avazart Ладно, я у Шилдта нашёл эту тему.
0
|
|||||||
|
|
||||||
| 22.03.2012, 20:11 | ||||||
|
Zolden этот цикл грузил основной поток.
Попробуй так (пример использования объекта события):
0
|
||||||
|
0 / 0 / 0
Регистрация: 17.03.2012
Сообщений: 11
|
||||||
| 23.03.2012, 19:40 [ТС] | ||||||
|
kzru_hunter
Спасибо за код, кое-что новое для себя узнал. Я попробовал реализовать твой вариант, но он работал на порядок медленней варианта с TThread. Видимо, потому, что мне на каждой итерации главного потока надо было заново создавать массив дочерних потоков, а потом удалять. А это медленно. Впрочем, не уверен. Но было реально медлденно, по сравнению с вариантом с TThread, когда я приостанавливал-возобновлял потоки вместо их создания на каждом цикле. Поэтому я просто заменил свой вариант ожидания на предложенную тобой функцию WaitForSingleObject(). И снова программа начала виснуть: возникает ситуация, когда ни один из потоков не выполняется, но WaitForSingleObject не получает события продолжить работу. Ума не приложу, в чём дело. Так что, уже простите, приведу полный код двух моих классов, наследующих TThread, в надежде, что кто-то подскажет, что у меня с ними может быть не так. Вдруг тут есть акая-то очевидная ошибка, которую я, в силу неопытности, не замечаю.
0
|
||||||
|
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
|
||
| 23.03.2012, 19:48 | ||
|
0
|
||
| 23.03.2012, 19:48 | |
|
Помогаю со студенческими работами здесь
20
Что будет лучше i7 2630qm (2 Гц 4 ядра) vs i5 3230m (2,6 Гц 2 ядра) ?
Конструкторы С++ Билдер Задача по Си Билдер Портативный С++ Билдер Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
|
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/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|