|
|
|
Параллелил параллелил и не выпараллелил20.04.2017, 03:40. Показов 3005. Ответов 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
|
|
|
Новые блоги и статьи
|
|||
|
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности.
Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
|
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version
Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
|
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер
На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
|
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/
TL DR
Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
|
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|