Языки и компиляторы. Сравнение быстродействия.

Программирование, Хакинг, Безопасность, Софт, Железо, а также всё связанное с компьютерами
Аватара пользователя
Андрей Карпишин
Архитектор
Сообщения: 9193
Зарегистрирован: 06 май 2015, 14:10
Откуда: Чехов, МО
Благодарил (а): 1214 раз
Поблагодарили: 556 раз

Языки и компиляторы. Сравнение быстродействия.

Сообщение Андрей Карпишин »

March 10, 2014, 09:04:05 pm
Текст на английском с форума Lazarus
http://forum.lazarus.freepascal.org/ind ... 875.0.html
Recently I met with the Lazarus.
I had an old console program such bruteforce numeric values.
It was compiled on Delphi 6. It was recompiled on 32-bit Lazarus 1.2.0.
The program showed increased performance. 13 seconds on 70 "cubes". (Delphi 6 = 25 sec.)
(Than more cubes then longer bruteforce.)

I also begin to learn С++ and translate all program to C++ in Microsoft Visual Studio 2008 and compile it there.
I'm beginner in C++ but translation was "1 to 1" such logic, such functions (except syntax).
Program showed 40 seconds on 70 "cubes". С++ disappoint. Lazarus respect!!!

Files (sources and binaries) attached in ZIP. Comments and explanations are welcome!
Недавно я познакомился с Lazarus.
У меня есть старая консольная программа по перебору числовых значений.
Она была скомпилирована на Delphi 6. Она была перекомпилирована на 32-bit Lazarus 1.2.0.
Программа показала увеличенное быстродействие. 13 секунд на 70 "кубиках". (Delphi 6 = 25 сек.)
(Чем больше кубиков, тем дольше перебор.)

Я также начал изучать С++ и перевёл всю программу на этот язык в Microsoft Visual Studio 2008 и скомпилировал в ней.
Я новичок в C++ но трансляция была "один к одному": та же логика, те же функции (кроме синтаксиса, естественно).
Программа показала 40 секунд на 70 "кубиках". С++ разочаровал; респект, Лазарус!

Файлы (исходники и экзешники) во вложении ZIP, очень интересны комментарии и объяснения!
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Андрей Карпишин
Архитектор
Сообщения: 9193
Зарегистрирован: 06 май 2015, 14:10
Откуда: Чехов, МО
Благодарил (а): 1214 раз
Поблагодарили: 556 раз

Re: Языки и компиляторы. Сравнение быстродействия.

Сообщение Андрей Карпишин »

Добавлю, что в программе основная вещь - рекурсия, она (алгоритм) заменяет (моделирует) N вложенных циклов,
чем больше кубиков, тем больше вложенных циклов нужно. Предполагаю, идёт интенсивная работа с памятью, со стеком.

А ведь когда-то, на предприятии, где я работал 10 лет, наши ребята - программисты написали Корпоративную Систему
Оперативное Управление Производством, и не вывели на рынок только из-за того (по словам главного разработчика), что Borland Developer Studio, на котором она делалась, был нелицензионный.
А если бы это был Лазарус? Подозреваю, что сложнее было бы прикрутить к нему Fast Report и БД-шные и табличные
моды-расширения, но результат того бы стоил.

Интересна проверка-сравнение компиляторов, например, Delphi 7 и последней версии Lazarus, на какой-нибудь другой
процессорозависимой задаче.
Аватара пользователя
Андрей Карпишин
Архитектор
Сообщения: 9193
Зарегистрирован: 06 май 2015, 14:10
Откуда: Чехов, МО
Благодарил (а): 1214 раз
Поблагодарили: 556 раз

Re: Языки и компиляторы. Сравнение быстродействия.

Сообщение Андрей Карпишин »

Ещё добавлю, что показанные секунды считались мной на процессоре Intel i5-2500K,
сейчас я счастливый обладатель i7-4790K, поэтому секунды ещё немного меньше приведённых.
Аватара пользователя
BDK
Сообщения: 6835
Зарегистрирован: 17 май 2015, 23:27
Откуда: Беларусь
Благодарил (а): 196 раз
Поблагодарили: 1018 раз

Re: Языки и компиляторы. Сравнение быстродействия.

Сообщение BDK »

Не сравнивал. Цифры конечно выглядят интересно - присмотрюсь к Lazarus. Видимо всё дело в оптимизации, какой компилятор лучше оптимизирует код. Так же может случиться что один компилятор лучше оптимизирует одно, другой другое. В целом же для быстродействия я делаю прицел на GPU, а центральный процессор для высокоуровневых управляющих функций которые на быстродействие сильно не влияют. Т.е. все программы я оптимизирую таким образом чтобы массивные вычисления делались на GPU а умные вычисления на CPU и на оптимальном взаимодействии того и другого, чтобы получить одновременно и умную и быструю программу.
Ещё добавлю, что показанные секунды считались мной на процессоре Intel i5-2500K,
сейчас я счастливый обладатель i7-4790K, поэтому секунды ещё немного меньше приведённых.
Как я и предполагал - i7 лишь НЕМНОГО быстрей i5-го :) А цена прилично больше. Я сейчас тоже занимаюсь апгрейдом своего домашнего компа. Закупил материнку и память. Осталось проц. И вот я смотрю на процессоры и цены на них, читаю характеристики, и понимаю что даже нет смысла брать i3. Нет смысла переплачивать ради несущественного повышения быстродействия. В то же время позже возможно и возьму проц помощней когда цены снизятся. А пока мне хватит celeron или pentium (видно у интел фантазия кончилась и они начали новые процы называть именами 20 летней давности :) )

Я свой комп не апгрейдил с 2006-го года. Там вообще древнее железо.
Последний раз редактировалось BDK 22 май 2015, 08:11, всего редактировалось 1 раз.
Аватара пользователя
Андрей Карпишин
Архитектор
Сообщения: 9193
Зарегистрирован: 06 май 2015, 14:10
Откуда: Чехов, МО
Благодарил (а): 1214 раз
Поблагодарили: 556 раз

Re: Языки и компиляторы. Сравнение быстродействия.

Сообщение Андрей Карпишин »

Чтобы объяснить расхождение в компиляторах, Кодер предлагал мне отключить консольный вывод текста во всех вариантах,
а также заменить в C++ двумерный массив, одномерным.
Всё это я проделывал, соотношение в скорости осталось практически неизменным.

Интересно было бы сделать эту программу под GPU, и, опять же, сравнить.

Вообще, мне интересно как делать код под GPU.

Я знаю программу перебора паролей под Wi-Fi, она показывала на ноутбуке i3-Core + GeForce 710-730 практически одинаковый результат по скорости перебора, что при помощи использования CPU, что GPU.
Аватара пользователя
Андрей Карпишин
Архитектор
Сообщения: 9193
Зарегистрирован: 06 май 2015, 14:10
Откуда: Чехов, МО
Благодарил (а): 1214 раз
Поблагодарили: 556 раз

Re: Языки и компиляторы. Сравнение быстродействия.

Сообщение Андрей Карпишин »

BDK писал(а):Цифры конечно выглядят интересно - присмотрюсь к Lazarus.
Советую, ведь это тот же самый Дельфи (Free Pascal Compiler) - только бесплатный.
https://ru.wikipedia.org/wiki/Lazarus

Мы могли бы вести совместные разработки именно на нём. Есть 64-битная версия даже.
Аватара пользователя
BDK
Сообщения: 6835
Зарегистрирован: 17 май 2015, 23:27
Откуда: Беларусь
Благодарил (а): 196 раз
Поблагодарили: 1018 раз

Re: Языки и компиляторы. Сравнение быстродействия.

Сообщение BDK »

Вообще, мне интересно как делать код под GPU.
Варианты есть разные:
1.Cuda
2.OpenCL
3.Direct Compute
4.язык шейдеров в Open GL 4
и кажется еще существуют какие-то вещи.

Cuda хороша всем кроме одного обстоятельства - она работает только на видеокартах от nVidia
OpenCL работает на всём но пока показывает хуже быстродействие, иногда сильно хуже - ждем пока разработчики его доведут до ума.
Direct Compute очень хорош и интересен, быстродействие местами выше чем у всех предыдущих (если верить тестам которые есть в сети), но одна проблема - я не нашел толковых описаний на русском языке. А на английском мне пока изучать сложно.
Open GL 4 - это тот вариант который использую я. Он позволяет дать быстродействие максимальное или близкое к максимальному (Cuda в качестве эталона), по нём есть много описания и обучения на русском языке в открытом доступе. Единственно - он рассчитан не на вычисления общего характера а на графику, поэтому вычисления нужно делать посредством графических механизмов. Например вместо массивов использовать текстуры, вместо параллельных процессов пиксельные шейдеры:) Т.е. все понятия из графики. Но если приспособиться то это в принципе ни на что не влияет и для вычислений общего характера использовать можно.


И да - нужно упомянуть важную особенность всех этих систем и она связана с характером архитектуры видеокарт - на GPU невозможно делать любые алгоритмы как на CPU. Например там проблематично реализовывать алгоритмы с большим количеством ветвлений. Вернее реализовать то можно но быстродействие можно получить даже хуже чем на CPU (хотя в новых видеокартах ситуация в этой области становится всё лучше). А вот если правильно оптимизировать программы под архитектуру GPU то можно получить быстродействие до сотни раз а то и больше чем на CPU. Но именно отдельные блоки массивных вычислений нужно делать на GPU, полностью всю программу на GPU делать не целесообразно, т.е. нужно грамотно оптимизировать программу и распределить - что будет считаться на GPU а что на CPU, максимальная эффективность достигается именно в связке GPU и CPU.

Я с использованием GPU сделал движок музыкального синтезатора. Это позволило мне на бюджетном ноутбуке за 240 $ получить синтезатор с полифонией в 65536 тональных сигналов, каждый из которых управляется отдельно и из этой всей полифонии можно получать очень интересные звучания и эффекты - полифонический аддитивный синтез в реальном времени. например можно получать 256 голосов по 256 гармоник на голос. Или на практике более подходящий вариант - 32 голоса по 2048 гармоник (напоминаю - это на бюджетном нетбуке :) ). С таким количеством гармоник можно получить практически любые звучания, притом управляемые в реальном времени.

Так же начал делать в декабре прошлого года графический движок на основе рэй-трэйсинга и разреженного октодерева - совершено другой принцип рендера чем был принят раньше - в нем отсутствует понятие полигонов и можно рендерить неограниченную детализацию в реальном времени. Но пока этот проект не завершен и ждет пока я его продолжу. Т.е. я пока сделал на CPU, начал перевод на GPU но еще не доделал это поскольку есть более приоритетные задачи на сейчас. Версию для CPU можно посмотреть здесь: https://yadi.sk/d/8QU0B3QadR7gv
Аватара пользователя
BDK
Сообщения: 6835
Зарегистрирован: 17 май 2015, 23:27
Откуда: Беларусь
Благодарил (а): 196 раз
Поблагодарили: 1018 раз

Re: Языки и компиляторы. Сравнение быстродействия.

Сообщение BDK »

Советую, ведь это тот же самый Дельфи (Free Pascal Compiler) - только бесплатный.
https://ru.wikipedia.org/wiki/Lazarus

Мы могли бы вести совместные разработки именно на нём. Есть 64-битная версия даже.
Я очень даже за. Тем более что я практически не использую всех ресурсов Delphi (в частности визуальные компоненты) а пишу практически как на обычном паскале. ООП использую но не очень активно. Где есть возможность без потерь удобства обойтись без ООП - там я обхожусь без ООП. Поэтому мои программы даже на простом паскале в большинстве можно откомпилировать.
Аватара пользователя
Андрей Карпишин
Архитектор
Сообщения: 9193
Зарегистрирован: 06 май 2015, 14:10
Откуда: Чехов, МО
Благодарил (а): 1214 раз
Поблагодарили: 556 раз

Re: Языки и компиляторы. Сравнение быстродействия.

Сообщение Андрей Карпишин »

А открыл глаза на Лазарус мне товарищ, с которым мы вместе коротали время в местах не столь отдалённых.

Нашёл на почте исходник его тогдашнего проекта-игры, к созданию коего тоже руку немного приложил, перекомпилировал на 1.4.0:
http://www.bmcsoft.ru/files/ShakhBoi.rar
Аватара пользователя
BDK
Сообщения: 6835
Зарегистрирован: 17 май 2015, 23:27
Откуда: Беларусь
Благодарил (а): 196 раз
Поблагодарили: 1018 раз

Re: Языки и компиляторы. Сравнение быстродействия.

Сообщение BDK »

Я lazarus однажды пробовал. Просто не втянулся. Но можно и вернуться к нему раз выгоды есть.