Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.05.2015, 10:48
nikola129 nikola129 вне форума
Прохожий
 
Регистрация: 16.05.2015
Сообщения: 4
Версия Delphi: Delphi2006
Репутация: 10
По умолчанию Потоки в готовой программе

Есть готовая программа, в которой производятся расчеты по вложенным циклам.
На 4-х ядерном процессоре загрузка не превышает 25%.
Итак, вызываются несколько функций, примерно так:
a1:=f1(a,b,c);
a2:=f2(x,y,z);
.............
an:=fn(m,n,l);
Затем результаты объединяются. Можно ли направить эти функции в разные потоки?
И как? Заранее благодарен,
Ответить с цитированием
  #2  
Старый 16.05.2015, 17:21
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

И вы думаете разные потоки будут крутится на разных ядрах? А вот и нетушки.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 16.05.2015, 17:24
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Если вы хотите получить реальный прирост производительности при расчетах, то нагружать надо графический процессор. Там прирост будет в разы.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #4  
Старый 16.05.2015, 18:26
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Цитата:
И вы думаете разные потоки будут крутится на разных ядрах? А вот и нетушки.
Таки да. В любой нормальной ОС при наличии свободных ядер (а если активно занимает процессор только эта программа, то таковые имеются) потоки будут запущены на разных ядрах. Не далее, как неделю назад, запускал подсчет инфы от большого числа файлов: имел 24 ядра, запустил в 24 потока. Стало примерно в 20 раз быстрее. И загрузка процессора стала не 4%, а все 100%.

А потому можно сделать функцию, которая принимает агрументы и адерс функции вычисления (ведь все функции одинаковые по количеству и типу параметров), вызывает и сохраняет результат. После чего запустить много потоков (по числу ядер), передав соответствующие функции подсчета и аргументы.

А граф процессор, конечно, можно, но это уже не за 10 минут делается, это надо очень много курить все эти OpenMP и прочую жесть.
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 16.05.2015 в 22:05.
Ответить с цитированием
  #5  
Старый 16.05.2015, 20:10
nikola129 nikola129 вне форума
Прохожий
 
Регистрация: 16.05.2015
Сообщения: 4
Версия Delphi: Delphi2006
Репутация: 10
По умолчанию

Если можно, поподробнее.
Как к потоку привязать функцию?
Ответить с цитированием
  #6  
Старый 16.05.2015, 21:27
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Направление я дал. А переписывать в 1001-й раз учебник по потокам не собираюсь. По передачам функций тоже. Можно же хоть немного самому что-то поделать?
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 16.05.2015 в 22:03.
Ответить с цитированием
  #7  
Старый 17.05.2015, 02:37
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Bargest
... потоки будут запущены на разных ядрах...
Насколько мне известно (может что-то изменилось), но TThread не делит потоки на разные ядра. Увы. Автору читать про SetThreadAffinityMask.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:37.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025