Чем, на чём и под чем быстрее считать

Jun 28, 2017 15:38

У меня сейчас очень много работы по расчету эволюции различных конфигураций задачи трёх тел. Для моделирования несколько лет назад была написана программа, которая использует несколько специфических алгоритмических трюков, о которых я здесь не стану распространяться, позволяющих на порядки уменьшить ошибку численного интегрирования и избежать ( Read more... )

Астрономия, Программирование, Математика

Leave a comment

Comments 13

vitus_wagner June 28 2017, 12:58:48 UTC
Еще интересно попробоват убунту без виртуализации, например загрузившись с liveCD.

А еще можно GCC поновее взять. Потому что вообще-то уже 7.1 вышла.

Reply

al_pas June 28 2017, 13:13:39 UTC
Добавил в начало таблицы тест под «чистой» убунтой на той же машине.

Reply


vitus_wagner June 28 2017, 13:23:13 UTC
Еще есть такое ругательное слово clang. На некоторых бенчмарках, близких к поставленной задаче, там якобы ускорение процентов на 30 по сравнению с gcc 5.2.

Поскольку в дистрибутиве ubuntu clang есть, причем относительно недавней версии 3.8, можно и его еще попробовать.

Reply

al_pas June 28 2017, 13:51:47 UTC
Попробовал - под чистым линуксом в точности тот же результат, что и gcc. Видимо, у меня за годы код уже настолько оптимизирован, что компилятор его улучшить не в состоянии.

Reply


psilogic June 28 2017, 16:07:34 UTC
Мне visual studio 2015 подсказывает такие ключи оптимизации, которые могут имет отношение к скорости:
/O2 /Ob2 /Oi /Ot /Oy /GL /GS- /LTCG /fp:fast
а также, учитывая, что Вам надо оптимизировать на конкретной машине и можно пожертвовать портируемостью, то стоит поиграться с опцией /arch:...

Упоминание "питоновского скрипта" навело на мысль о том, что если он достаточно часто вызывает вторичные программы, то загрузка и запуски программ может убивать довольно много времени, а если просто пускает 4 программы, которые работают минут по 15 - тогда, конечно, это неважно

Reply

al_pas June 28 2017, 17:20:48 UTC
Основной прирост дают ключи /O2 и /fp:fast. Остальные в моём случае меняют производительность скомпилированной программы на доли процента. Для других алгоритмов это, возможно, будет не так.

Да, каждая нитка выполняется не менее 10 минут, пайтоновский скрипт попросту запускает их отдельными Popen (4 или 8 - в зависимости от того, сколько логических процессоров он обнаруживает) и собирает их stdout'ы в один файл и, как только один из логических процессоров освобождается, запускает следующий Popen.

Reply

psilogic June 28 2017, 18:42:51 UTC
Нам в сходной ситуации (требовалось оптимизировать математику функции шифрования), помнится, пришлось переходить на ассемблер и использовать расширенные наборы команд (SSE / AVX) Но при этом творилась "магия" - небольшое (и на первый взгляд эквивалентное) изменение алгоритма могло улучшить скорость вдвое, а потом другое изменение - ухудшить обратно вдвое.
З.Ы.
И, что касается магии, то иногда помогает смешение целочисленной и floating point-арифметики, т.к. компилятор тогда распараллеливает команды между процессором и сопроцессором.

Reply


caztd June 28 2017, 17:43:43 UTC
Попробуйте сравнить чистый CPU-time (по-крайней мере для Линукса).
По идее gcc должен генерировать одинаковый код для одного процессора.
Разница при виртуализации -- это разный thread scheduling и симуляция IO.
NTFS -- не самая лучшая система, поэтому gcc под VB,
где виртуальный диск очень хорош (какой кстати и какая file system?)
обгоняет родной gcc mingw, который использует NTFS.

Ну а gcc под линухом по любому самый быстрый -- так и должно быть ;)

Reply

al_pas June 28 2017, 20:16:40 UTC
Файловая система в моём случае роли не играет - у меня ввод/вывод чтение/запись происходят только в начале и в конце и занимают суммарно меньше секунды, всё остальное время программа крутится в оперативной памяти, только в конце выводя пару килобайт данных в stdout.

Reply

caztd June 28 2017, 20:35:56 UTC
Возможно. Но прежде чем анализировать скомпилированный код я все же бы посмотрел как минимум на cpu user / cpu kernel time. Если конечно действительно важно выяснить причину расхождений.

Reply


t_mike June 29 2017, 02:29:36 UTC
ещё варианты:
- добовить оптимизацию под процессор -march=native -mtune=native
- попробовать icc

Reply

al_pas June 29 2017, 18:10:48 UTC
Интел отказала мне в предоставлении компилятора для опенсорсных целей. Обоснование: они не обнаружили никаких подтверждений, что по указанному мной URL (www.astro.utu.fi) кто-либо занимается указанной мной задачей (3-Body problem).

Reply


Leave a comment

Up