Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Delphi 7 на многопроцессорном компьютере  [new]
BorodaOleg
Member

Откуда:
Сообщений: 74
Доброго дня!

Имеется ли какая-либо возможность заставить многопоточное приложение, компилированное на Delphi 7 заставить работать на многопроцессорном компьютере, так, что-бы процессы работали на других ядрах, отличных от основного потока? Всего потоков - штук 60, реально работают 12 - 15. На картинке видно - загружается только 1 процессор, остальные еле-еле шевелятся. В главном окне мышь реагирует через 10-15 секунд :(

К сообщению приложен файл. Размер - 110Kb
24 май 21, 15:42    [22326297]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 32405

24.05.2021 15:42, BorodaOleg пишет:
> Имеется ли какая-либо возможность заставить многопоточное приложение, компилированное на Delphi 7 заставить работать на многопроцессорном компьютере, так, что-бы процессы работали на других ядрах, отличных от основного потока? Всего потоков - штук 60, реально работают 12 - 15. На картинке видно - загружается только 1 процессор, остальные еле-еле шевелятся. В главном окне мышь реагирует через 10-15 секунд :(

Этим занимается планировщик Винды.
Если есть непреодолимое желание ему помешать, играйся с SetThreadAffinityMask()

Posted via ActualForum NNTP Server 1.5

24 май 21, 15:52    [22326306]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
rgreat
Member

Откуда:
Сообщений: 6711
BorodaOleg,

Открой для себя потоки и TThread.
24 май 21, 15:53    [22326309]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 62816
BorodaOleg> Имеется ли какая-либо возможность заставить
BorodaOleg> многопоточное приложение ... работать на
BorodaOleg> многопроцессорном компьютере, так, что-бы
BorodaOleg> процессы работали на других ядрах, отличных от основного потока?


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

См. в коде, есть ли привязка к процессору
(ну и может у тебя реально вся работа в
основном потоке делается, а остальные ждут).

Posted via ActualForum NNTP Server 1.5

24 май 21, 15:57    [22326312]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
DmSer
Member

Откуда: Пенза
Сообщений: 1376
Если в одном приложении куча потоков, которые занимаются вычислениями, то лучше поставить им приоритет Lower, тогда главный поток программы не будет подвисать. При этом приоритет Lower никак не будет мешать ходу вычислений (при таком количестве ядер).

И желательно до минимума сократить работу с динамическими массивами, строками, как можно реже создавать/уничтожать объекты, вызывать GetMem, FreeMem.

Или подключить многопоточный менеджер памяти, например tcMalloc (не знаю, как он прицепится к Delphi 7).

Сообщение было отредактировано: 24 май 21, 16:02
24 май 21, 16:08    [22326324]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
Zelius
Member

Откуда: Россия, Москва
Сообщений: 1552
BorodaOleg,

Ищи Synchronize, Люк!
24 май 21, 16:12    [22326330]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
Valery_B
Member

Откуда: Москва
Сообщений: 2046
BorodaOleg

заставить работать на многопроцессорном компьютере, так, что-бы процессы работали на других ядрах

Нельзя.
Это делает операционная система.
В теории, можно спуститься на более низкий уровень, но это не правильный путь.

BorodaOleg

Всего потоков - штук 60, реально работают 12 - 15. На картинке видно - загружается только 1 процессор

Значит они реально не работают и написаны очень плохо.
Напиши лабу с TStuppidThread и создай 10 потоков.
procedure TStuppidThread.Execute;
begin
  while not Terminated do;
end;
24 май 21, 16:15    [22326332]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
rgreat
Member

Откуда:
Сообщений: 6711
Valery_B
Значит они реально не работают и написаны очень плохо.

Ну я так и сказал, что человеку надо открыть для себя потоки. ;)

Скриншот таск мэнеджера об этом говорит вполне очевидно.

Сообщение было отредактировано: 24 май 21, 16:18
24 май 21, 16:26    [22326342]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
BorodaOleg
Member

Откуда:
Сообщений: 74
Юмористы, млин :)

Synchronize нет, все делается через CriticalSection, TThreadList, Semaphore и пр.

В потоках - коннект с COM/GSM/GPRS соединениями, несложная обработка (расшифровка HEX последовательностей от 15 до 1000 байт) и запись в БД firebird.
Отдельным потоком лог - тут понятно, жрет не мелко.

Если бы винда нормально распределила было бы как минимум 3 потока с "запредельными" нагрузками - Основной поток, лог и FB - сейчас только один и загружен по шею.
24 май 21, 16:38    [22326350]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
Fr0sT-Brutal
Member

Откуда:
Сообщений: 755
BorodaOleg

В потоках - коннект с COM/GSM/GPRS соединениями, несложная обработка (расшифровка HEX последовательностей от 15 до 1000 байт) и запись в БД firebird.
Отдельным потоком лог - тут понятно, жрет не мелко.

А чему тут жрать-то? Если загрузки нет, ищи блокировки главного потока

Сообщение было отредактировано: 24 май 21, 16:37
24 май 21, 16:46    [22326354]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 32405

24.05.2021 16:38, BorodaOleg пишет:
> и запись в БД firebird.

какой коннект?
какой протокол?
сколько коннектов у процесса?

Posted via ActualForum NNTP Server 1.5

24 май 21, 16:46    [22326355]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
rgreat
Member

Откуда:
Сообщений: 6711
BorodaOleg,

Проблема не в винде а в твоем коде.
24 май 21, 16:46    [22326356]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
_Vasilisk_
Member

Откуда: Украина, Харьков
Сообщений: 12901
BorodaOleg
Если бы винда нормально распределила
Некорректное высказывание. Корректное "Если бы программа была написана правильно"
BorodaOleg
сейчас только один и загружен по шею.
Значит остальные потоки его ждут. И судя по
BorodaOleg
В главном окне мышь реагирует через 10-15 секунд :(
ищите таки Synchronize. У вас главный поток чем-то сильно загружен
24 май 21, 16:50    [22326359]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
DmSer
Member

Откуда: Пенза
Сообщений: 1376
При создании каждого потока пишите в лог ThreadId и название класса объекта-потока. Потом откройте ProcessExplorer, откройте для Вашего процесса список потоков и смотрите на загрузку. По ID потока сможете определить, что это за поток и отдельно исследовать, почему он так грузит процессор.
24 май 21, 16:52    [22326360]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
DmSer
Member

Откуда: Пенза
Сообщений: 1376
автор
Отдельным потоком лог - тут понятно, жрет не мелко.


Нужно обязательно буферизовать данные перед записью в лог-файл. Т.е. не писать в лог-файл каждую строку отдельно, а сначала соединить все строки, которые требуется записать, и сохранить их в лог одним действием.
У меня в программе очень большой объем записи в лог, но я не могу сказать, что в этом месте есть какая-то проблема с производительностью.
24 май 21, 16:56    [22326362]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 2572
Битва экстрасенсов, мля...
24 май 21, 17:12    [22326375]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
BorodaOleg
Member

Откуда:
Сообщений: 74
DmSer,

Спасибо за совет. ThreadId и ThreadHandle собираю в TList уже давно, не думал что они совпадают c системными.
А с логом точно что-то делать нужно, и да, пишется он по 1 строчке
24 май 21, 17:13    [22326376]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
DmSer
Member

Откуда: Пенза
Сообщений: 1376
ThreadId - глобальный,
ThreadHandle - у каждого процесса независимая нумерация хэндлов.
24 май 21, 17:16    [22326381]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4654
BorodaOleg
Если бы винда нормально распределила было бы как минимум 3 потока с "запредельными" нагрузками - Основной поток, лог и FB - сейчас только один и загружен по шею.
Ну, чтож.. Переустанови винду, раз она плохо потоки менеджерит. Я бы так и сделал, будь у меня такие проблемы!
24 май 21, 17:17    [22326382]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
DarkMaster
Member

Откуда: Donetsk,Ukraine
Сообщений: 6505
YuRock
BorodaOleg
Если бы винда нормально распределила было бы как минимум 3 потока с "запредельными" нагрузками - Основной поток, лог и FB - сейчас только один и загружен по шею.
Ну, чтож.. Переустанови винду, раз она плохо потоки менеджерит. Я бы так и сделал, будь у меня такие проблемы!


Попахивает "вредными советами" от Остера :)
24 май 21, 17:24    [22326385]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 4654
DarkMaster
YuRock
пропущено...
Ну, чтож.. Переустанови винду, раз она плохо потоки менеджерит. Я бы так и сделал, будь у меня такие проблемы!

Попахивает "вредными советами" от Остера :)
Какие утверждения/предположения - такие и советы :)
24 май 21, 17:39    [22326393]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
rgreat
Member

Откуда:
Сообщений: 6711
YuRock
Ну, чтож.. Переустанови винду, раз она плохо потоки менеджерит. Я бы так и сделал, будь у меня такие проблемы!
Может быть конфликт винды и железа.
Надо еще железо новое купить.

Обязательно с NVidia RTX 3090, а то без рей-трейсинга многопоточность будет не полной.
24 май 21, 17:53    [22326408]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 32405

24.05.2021 17:53, rgreat пишет:
>
> Обязательно с NVidia RTX 3090, а то без рей-трейсинга многопоточность будет не полной.

кстати, да!
поддерживаю.

Posted via ActualForum NNTP Server 1.5

24 май 21, 17:54    [22326409]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
Zelius
Member

Откуда: Россия, Москва
Сообщений: 1552
BorodaOleg,

Если нет Synchronize, то надо выяснить на чем тормозит главный поток: жми паузу (Run\Program Pause) и изучай стек главного и прочих потоков (View\Debug Windows\Threads)

и возможно там увидешь скрытый Synchronize! от какого нить комопнента с свойством RunEventInMainThread

Сообщение было отредактировано: 24 май 21, 18:00
24 май 21, 18:08    [22326415]     Ответить | Цитировать Сообщить модератору
 Re: Delphi 7 на многопроцессорном компьютере  [new]
DarkMaster
Member

Откуда: Donetsk,Ukraine
Сообщений: 6505
Мимопроходящий

24.05.2021 17:53, rgreat пишет:
>
> Обязательно с NVidia RTX 3090, а то без рей-трейсинга многопоточность будет не полной.

кстати, да!
поддерживаю.


Эх... Жаль у него D7, а не Лазарь + Дельфя :( Советов бы было больше......
24 май 21, 18:32    [22326428]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Delphi Ответить