|
|
|
Параллелил параллелил и не выпараллелил20.04.2017, 03:40. Показов 2978. Ответов 30
Доброго многопотока всем!
Тестили тут мой конвертер pbf в kml на производительность процессоров разных. Всё бы ничего да вот он однопоточный. А на дворе тем временем 2017 год - 4 потока есть даже у бомжа. А тут ещё Ryzen вышел в мейнстрим со своими 16 потоками. И подумал я что будет круто прокачать свой скилл и попробывать выжать все соки из любого кремния. Тем более что задача мне знакома, а 1000 мелких деталей можно подсмотреть в своём же коде - решил переписать всё с нуля. После двух недель упорного и не очень кодинга, с новым подходом к программированию той же задачи, появилось на свет консольное приложение. Промежуточные тесты показали колоссальную прибавку! В разы! В предыдущей попытке был откровенный говнокод, подумал я, и был не далёк от истины. Но радость была подпорчена. Присмотревшись к загрузке процессора более детально заметил что приблизительно 1/3 времени проц загружен далеко не на 100%: 40-45% для Q9450(4 потока) и 17-20% для 6700К(8 потоков). Да, там есть однопоточные участки, но они коротки и полностью от них отказаться нельзя. Начал копать глубже. Расставив вспомогательные сообщения по этапам оказалось что медленный участок это второй и третий этап, алгоритмы которых я специально уже распараллелил. То есть по задумке проц в этих местах должен жарить на все 100, но что-то его держит. Покурив форумы пришёл к выводу, что, возможно, проблема в динамической памяти. Именно на этих этапах идёт обильное выделение мелких и не очень динамических переменных в том числе строки, листы, объекты. Как я понял, в Delphi чтобы выделить память нужно залочить ВСЁ и хоть там у тебя 100500 физических потоков, память в них выделяется последовательно, то есть привет однопоток! Как же это побороть? В общем случае, как я понял - никак! Тупо уменьшить кол-во выделений памяти на столько насколько это возможно. Энтузиазм под угас. Может у вас есть инфа по теме? ЗЫ: надеюсь вам было интересно читать так же как мне 2 недели назад начинать проект
0
|
|
|
|
|
| 24.04.2017, 12:23 [ТС] | |
|
YuryK, да, 51% я имел ввиду скорость выполнения, а не время.
Рассуждал так: Если скорость выполнения увеличить в 2 раза(+100%), то время выполнения уменьшится 2 раза, но в %, как вы подметили, время уменьшится всего лишь на 50%. Например, было 40 секунд стало 20. Отсюда можно сделать вывод что -100% по времени в принципе не достижимая цифра, так как в этом случае мне нужно сделать вычисления за 0 секунд. Поэтому ИМХО логичнее измерять именно скорость, а не время.
0
|
|
|
139 / 137 / 66
Регистрация: 15.05.2012
Сообщений: 518
|
|||||||||||
| 26.04.2017, 00:33 | |||||||||||
|
snake32, попробуй через профайлер - AQTime, там уже будет видно где на самом деле "подтормаживает". А так вычисления в одной строке я бы разбил, например:
Замечу, что это предположения - я не экстрасенс, код не видел). По поводу Tlist<T>, я бы убрал и заменил на array. packed, убрать - это не Сеть, тормозной.
0
|
|||||||||||
|
2083 / 1576 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 26.04.2017, 01:54 | ||
|
0
|
||
|
|
||||
| 26.04.2017, 17:07 [ТС] | ||||
![]() ЗЫ: Пока оставлю всё как есть и так профит получил не малый...
0
|
||||
|
|
|
| 26.04.2017, 23:16 [ТС] | |
|
dimank666, я не уверен что он обгонит мой 6700К. Тестили райзен ещё в однопотоке - всё печально!
Твой бывший FX - 60сек Мой I7 - 33сек Рузен у ребят с оверклокерс.ру - 50сек. То есть пол пути не прошёл Рузен от ФХ до I7. Но я ещё надеюсь что проблема в компиляторе - он у меня аж 2011 года. Я уже скачал новую дельфю берлин. Там по-моему 2016, хотя хз. В общем, есть вероятность что с Новым компилятором отрыв сократится.
0
|
|
|
|
|
| 27.04.2017, 00:23 [ТС] | |
|
dimank666, ну во-первых 60/50=1.2, то есть скорость Рузен на 20% быстрее фх. (время да на 16,66% уменьшилось)
Во-вторых, как есть так есть. Думаешь владельцы рузенов обрадовались? Хотя я их сразу предупредил что однопоток. Некоторые обозываться стали ))) Только почему-то забыли что интол в тех же условиях тестился. Добавлено через 13 минут Вообщем вся надежда AMD на свежий компилятор. Если и там будут болты, то AMD уже ничего не поможет. Буду хаить AMD пуще прежнего
0
|
|
|
|
||||||
| 28.04.2017, 15:59 [ТС] | ||||||
|
Решил ещё немного пооптимизировать так как пятница, сокращённый день и вообще последний рабочий день перед отпуском.
Написал свой вариант TList<T> с минимальными проверками, релокациями памяти, а так же с прямым доступом к массиву FItems. Меня кстати всё время раздражало что FItems сделали приватным в TList<T>. А ведь столько оптимизаций можно с ним сделать будь хотя бы он в секции protected. Приходилось писать обходные костыли типа таких:
Тестил на одном единственном этапе который выполняется на 4 потоках одновременно. Время этого этапа удалось уменьшить с 7,885 секунд до 3,097 (среднее время 6-ти прогонов), что дало +154,6% к скорости на Intel Q9450
0
|
||||||
|
|
|
| 29.04.2017, 02:39 | |
|
0
|
|
|
Новые блоги и статьи
|
|||
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ
Основная суть и тезисы по измерениям:
0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема.
Объект не может перемещаться в 0D.
1D (Первое измерение):. . .
|