OberonCore
https://forum.oberoncore.ru/

Сравнение компиляторов f95, ifort, xds, blackbox
https://forum.oberoncore.ru/viewtopic.php?f=61&t=4482
Страница 1 из 2

Автор:  QWERTYProgrammer [ Четверг, 05 Сентябрь, 2013 14:30 ]
Заголовок сообщения:  Сравнение компиляторов f95, ifort, xds, blackbox

(модератор) выделено из viewtopic.php?f=114&t=3836 согл. п. 3.3

Не уверен, стоит ли создавать новую тему, но утверждение в Blackbox-List
Иван Денисов писал(а):
The ifort Intel compiler is 50 times!!! faster than BlackBox in for loops tasks and 10 times faster than XDS Oberon Compiler with maximum optimisation. That can make sense then you make physics science.

хотелось бы уточнить, например посмотреть на пример такого FOR лупа. 50 раз это все-таки очень много. Или речь идет о тривиальной оптимизации, типа выноса вычислений из тела цикла?

Автор:  Alexey Veselovsky [ Четверг, 05 Сентябрь, 2013 14:32 ]
Заголовок сообщения:  Re: Красноярская сборка BlackBox 1.6rc6

QWERTYProgrammer писал(а):
Не уверен, стоит ли создавать новую тему, но утверждение в Blackbox-List
Иван Денисов писал(а):
The ifort Intel compiler is 50 times!!! faster than BlackBox in for loops tasks and 10 times faster than XDS Oberon Compiler with maximum optimisation. That can make sense then you make physics science.

хотелось бы уточнить, например посмотреть на пример такого FOR лупа. 50 раз это все-таки очень много. Или речь идет о тривиальной оптимизации, типа выноса вычислений из тела цикла?


Скорее всего векторизация + более внятное использование регистров процессора.
Вот тут немного экспериментального материала: http://oberspace.dyndns.org/index.php/topic,484.0.html

Автор:  Иван Денисов [ Пятница, 06 Сентябрь, 2013 18:41 ]
Заголовок сообщения:  Re: Красноярская сборка BlackBox 1.6rc6

QWERTYProgrammer писал(а):
Не уверен, стоит ли создавать новую тему, но утверждение в Blackbox-List
Иван Денисов писал(а):
The ifort Intel compiler is 50 times!!! faster than BlackBox in for loops tasks and 10 times faster than XDS Oberon Compiler with maximum optimisation. That can make sense then you make physics science.

хотелось бы уточнить, например посмотреть на пример такого FOR лупа. 50 раз это все-таки очень много. Или речь идет о тривиальной оптимизации, типа выноса вычислений из тела цикла?

Стоит вынести в отдельную тему «Сравнение компиляторов f95, ifort, xds, blackbox»

Вот код для фортрана, который использовался для небольшой рабочей проверки, про которую я говорил.
Код:
program bench;

DOUBLE PRECISION, DIMENSION (1000,1000) :: x
INTEGER :: i,j,k,n,m
DOUBLE PRECISION, DIMENSION (1000) :: f
DOUBLE PRECISION :: summ

do i=1,1000
   do j=1,1000
      x(i,j) = 0
   end do
end do
do k=1,1000
   f(k) = 0
end do
n = 1
m = 1
do i=1,1000
   do j=1,1000
      x(i,j) = m*m+n*n+1
      do k=1,1000
         f(k)=f(k)+x(i,j)/(x(i,j)+2.0/m)
      end do
      m = m + 1
   end do
   n = n + 1
end do
summ = 0
do k=1,1000
   summ = summ + f(k)
end do
write(*,*) summ
end program bench


Код не претендует на сколько-либо внятный тест. Делалось для себя, чтобы понимать достоинства, недостатки и область применимости инструмента BlackBox.

Компилятор ifrot успешно ставил как на Ubuntu, так и на Red Hat, он доступен бесплатно для академической работы с сайта Intel. Для XDS и компонентного паскаля у меня код не сохранился, к сожалению.

Привожу свою цитату из нашего рабочего блога от 12.05.2013.
Цитата:
После семинара в эту субботу у ZIM в очередной раз возник вопрос, почему я использую Компонентный Паскаль для своих приложений. Ну и слово за слово, решили сравнить скорость с языком Фортран-95. Точнее сравниваются в данном случае не языки, а компиляторы. Написали один пример, который использует массивы, циклы, сложение, умножение, деление. При этом в тест не вошли работы с указателями, обращение к процедурам и т.п.

Результаты таковы: Блэкбокс выполнил процедуру на Компонентном Паскале за 17355мс, приложение с использованием компилятора F95 потратило такое-же время в 17352. Удивительно точное совпадение времени, конечно.

Затем в ход пошли оптимизаторы кода. Для оптимизации компилятора F95 использовался ключ -O3 (оптимизация доступа к памяти и циклов), для получения оптимизированного кода для языка Оберон-2 использовался компилятор XDS (кстати, Новосибирская разработка). Так Фортран улучшил свои показатели примерно в 22 раза (~773мс), а Оберон-2 примерно в 14 раз (~1250мс).

Как видно отсюда, по рутиной производительности Оберон-2 вполне соревнуется с Фортраном-95. Технический результат проделанной работы в том, что действительно имеет смысл переносить часть вылизанного кода в оптимизированные библиотеки собранные в XDS, например.

ZIM подготовил приложение на платном компиляторе фирмы Интел (за 60000р, хотя есть и академический вариант), что дало колоссальный прирост скорости примерно в 50 раз! Что конечно супер. Если потребуется разрабатывать суперэффективные приложения для процессоров Intel, то очевидно надо выбирать ifort для разработки наиболее поддающихся оптимизации кусков вычислений. Или с тем-же успехом переносить код на C++ и компилировать его для графических процессоров с использованием технологии CUDA.

Но язык это не только заготовка для компилятора, язык программирования еще и Язык. И если Фортран-95 отягощен 60-летним мусором и только начинает поддерживать ООП. То Компонентный Паскаль (наследник Оберона-2) — очень компактный и современный язык, поддерживающий как ООП, так и КОП. Подробное сравнение с Фортраном-90 и С++ сделано Берндом Мёсли [Mösli B. A Comparison of C++, FORTRAN 90 and Oberon-2 for Scientific Programming // GISI. 1999. Vol. 95. P. 740–748].

Поэтому пока не буду спешить со сменой инструмента, ну а потом видно будет. Про известные недостатки Оберона скажут лучше его недоброжелатели.

Статьи по Оберону находятся на этом сайте: http://www.oberon2005.oberoncore.ru/.

Оберон — «простой как автомат Калашникова» берет начала в Высшей Политехнической школе ETH в Цюрихе, где учились Альберт Эйнштейн и Джон фон Нейман. Автор языка Никлаус Вирт.


После того как я попробовал компилятор ifort, я просто не поверил, что можно посчитать это так быстро. http://software.intel.com/en-us/non-com ... evelopment
мое письмо коллеге :) писал(а):
Не Андрей не может быть 0m0.302s :) он наверное все заранее посчитал и выдает результат. Если это оптимизирующий компилятор, то такое возможно, ведь эта процедура не от чего не зависит. Надо делать тогда программу с входными параметрами, чтобы он не мог заранее посчитать.

Тогда коллега по моей просьбе подготовил код, который считывает входящие параметры и использует их для вычисления. Т.е. заранее посчитать уже не так просто все тело цикла. Результат по скорости был примерно такой-же.

Поскольку я прекрасно понимаю, что такая штука хорошо оптимизирует только циклы, то не спешу списывать BlackBox. Для науки у них немного разные задачи.

Автор:  Илья Ермаков [ Пятница, 06 Сентябрь, 2013 19:40 ]
Заголовок сообщения:  Re: Красноярская сборка BlackBox 1.6rc6

Вы учитывайте, что Интеловские компиляторы используют полное знание о внутренней архитектуре проца.
Ведь внутри Интела сидит RISC со своей системой команд - а над ним крутится микропрограмма. Зная нутро, очень легко сделать такие оптимизации, которые никто из внешнего мира не сделает.

Автор:  Alexey Veselovsky [ Пятница, 06 Сентябрь, 2013 19:47 ]
Заголовок сообщения:  Re: Красноярская сборка BlackBox 1.6rc6

Иван Денисов писал(а):
QWERTYProgrammer писал(а):
Не уверен, стоит ли создавать новую тему, но утверждение в Blackbox-List
Иван Денисов писал(а):
The ifort Intel compiler is 50 times!!! faster than BlackBox in for loops tasks and 10 times faster than XDS Oberon Compiler with maximum optimisation. That can make sense then you make physics science.

хотелось бы уточнить, например посмотреть на пример такого FOR лупа. 50 раз это все-таки очень много. Или речь идет о тривиальной оптимизации, типа выноса вычислений из тела цикла?

Стоит вынести в отдельную тему «Сравнение компиляторов f95, ifort, xds, blackbox»


Я правильно понимаю, что f95 это gcc?

Автор:  Иван Денисов [ Пятница, 06 Сентябрь, 2013 19:51 ]
Заголовок сообщения:  Re: Красноярская сборка BlackBox 1.6rc6

Илья Ермаков писал(а):
Вы учитывайте, что Интеловские компиляторы используют полное знание о внутренней архитектуре проца.
Ведь внутри Интела сидит RISC со своей системой команд - а над ним крутится микропрограмма. Зная нутро, очень легко сделать такие оптимизации, которые никто из внешнего мира не сделает.
Верно говорите, этот компилятор под очень узкие задачи, например считать физику на кластере или что-то типа того. Еще забыл уточнить, что проверка проводилась на достаточно современных интеловских процессорах. В то время как оптимизация XDS сделана для достаточно старых моделей. Илья, интересно, а возможна ли какая-то оптимизация в BlackBox компиляторе? Скажем, коды XDS открыты, если перетащить оттуда алгоритмы, или заново, по литературе разбираясь, додумывать...

Автор:  Иван Денисов [ Пятница, 06 Сентябрь, 2013 19:54 ]
Заголовок сообщения:  Re: Красноярская сборка BlackBox 1.6rc6

Alexey Veselovsky писал(а):
Я правильно понимаю, что f95 это gcc?

Затрудняюсь ответить. Встроенный в Ubuntu компилятор... Вот что мне про него сказали «Gfortran очень ущербный.» Команда f95 входит в пакет gfortran.

Вот что выдает информация о нем
Код:
divan@hp:~$ f95 -v
Используются внутренние спецификации.
COLLECT_GCC=f95
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-linux-gnu/4.6/lto-wrapper
Целевая архитектура: i686-linux-gnu
Параметры конфигурации: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.3-1ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --enable-targets=all --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu
Модель многопоточности: posix
gcc версия 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)

Автор:  Alexey Veselovsky [ Пятница, 06 Сентябрь, 2013 20:22 ]
Заголовок сообщения:  Re: Красноярская сборка BlackBox 1.6rc6

Иван Денисов писал(а):
Alexey Veselovsky писал(а):
Я правильно понимаю, что f95 это gcc?

Затрудняюсь ответить. Встроенный в Ubuntu компилятор... Вот что мне про него сказали «Gfortran очень ущербный.» Команда f95 входит в пакет gfortran.

Вот что выдает информация о нем
Код:
divan@hp:~$ f95 -v
Используются внутренние спецификации.
COLLECT_GCC=f95
COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-linux-gnu/4.6/lto-wrapper
Целевая архитектура: i686-linux-gnu
Параметры конфигурации: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.3-1ubuntu5' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --enable-targets=all --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu
Модель многопоточности: posix
gcc версия 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)


gcc и есть. По моему опыту (я кидал ссылку) gcc оптимизирует лучше чем MSVS (по крайней мере в случае С++). Там где MSVS не может сделать векторизацию цикла, там gcc справляется. Не знаю что там с фортрановский фронтендом у gcc конечно... Скажем на Аде - та же картина. GNAT'овский код рвет C++/MSVS как тузик грелку (в 4 раза). С gcc/c++ gcc/ada (gnat) идет ноздря в ноздрю (если проверки у Ады поотключать). Но если при этом gcc все еще считается ущербным...

В общем, вы меня побудили скачать пробную версию интеловского компилятора (для С++) и погонять там мои актуальные (далеко не те что по ссылке) алгоритмы. Мне как раз сейчас требуется их ускорить хотя бы разика в 4, а лучше в 10.

Автор:  Jordan [ Пятница, 06 Сентябрь, 2013 20:37 ]
Заголовок сообщения:  Re: Красноярская сборка BlackBox 1.6rc6

Те кто используют фортран, знают для чего его использовать. Фортран не только язык, но и множество библиотек с отлаженными и проверенными функциями. Здесь ещё нужно ставить вопрос, не только языка, но и окружения.

Такие алгоритмы можно и на руби или питоне писать, если скорость не важна. Плюс автоматом кросплатформенность. Ну и java есть.

Автор:  Jordan [ Пятница, 06 Сентябрь, 2013 20:45 ]
Заголовок сообщения:  Re: Красноярская сборка BlackBox 1.6rc6

Если пускать ББ под wine, вся производительность тю тю. Нужно ещё учитывать, под какой системой будут разрабатывать.

К языку притензий нет.

Автор:  Jordan [ Пятница, 06 Сентябрь, 2013 20:48 ]
Заголовок сообщения:  Re: Красноярская сборка BlackBox 1.6rc6

Цитата:
Поэтому пока не буду спешить со сменой инструмента, ну а потом видно будет. Про известные недостатки Оберона скажут лучше его недоброжелатели.


Да не в языке дело. На данный момент, среда ББ как спущенный якорь. Доделать консольный вариант проще и быстрее, чем разбираться в ББ, как оно там функционирует. Писать можно и в нотепаде.

Автор:  Александр Ильин [ Пятница, 06 Сентябрь, 2013 20:57 ]
Заголовок сообщения:  Re: Красноярская сборка BlackBox 1.6rc6

Иван Денисов писал(а):
Скажем, коды XDS открыты
Неужели?

Автор:  Jordan [ Пятница, 06 Сентябрь, 2013 21:05 ]
Заголовок сообщения:  Re: Красноярская сборка BlackBox 1.6rc6

Поправка. Под wine скорость не упадёт.

Автор:  Иван Денисов [ Пятница, 06 Сентябрь, 2013 21:48 ]
Заголовок сообщения:  Re: Красноярская сборка BlackBox 1.6rc6

Александр Ильин писал(а):
Иван Денисов писал(а):
Скажем, коды XDS открыты
Неужели?
Туплю :)

Автор:  Иван Денисов [ Пятница, 06 Сентябрь, 2013 21:56 ]
Заголовок сообщения:  Re: Красноярская сборка BlackBox 1.6rc6

Jordan писал(а):
Цитата:
Поэтому пока не буду спешить со сменой инструмента, ну а потом видно будет. Про известные недостатки Оберона скажут лучше его недоброжелатели.

Да не в языке дело. На данный момент, среда ББ как спущенный якорь. Доделать консольный вариант проще и быстрее, чем разбираться в ББ, как оно там функционирует. Писать можно и в нотепаде.
Jordan, без этого вам ненавистного каркаса, ББ уже бы давно никто не использовал, на мой взгляд. Консольный компилятор на основе ББ сделать не представляет большого труда, и уже пара рабочих у народа есть, если ничего не путаю. По крайней мере, я видел уже один ConsCompiler в работе viewtopic.php?f=34&t=1159&p=74483&hilit=ConsCompiler#p74483 от Александра Ширяева.
Jordan писал(а):
Поправка. Под wine скорость не упадёт.
Иногда даже шустрее работает. 99% времени работаю с ББ через Wine.

Автор:  Alexey Veselovsky [ Пятница, 06 Сентябрь, 2013 22:57 ]
Заголовок сообщения:  Re: Сравнение компиляторов f95, ifort, xds, blackbox

Ну что я могу сказать? Волшебства не произошло - на боевой задаче интеловский компайлер показал ту же производительность что и мелкомягкий.

Так что придется думать головой (и возможно на IPP переписывать часть алгоритмики).

Автор:  QWERTYProgrammer [ Понедельник, 09 Сентябрь, 2013 22:00 ]
Заголовок сообщения:  Re: Красноярская сборка BlackBox 1.6rc6

Иван Денисов писал(а):
Вот код для фортрана, который использовался для небольшой рабочей проверки, про которую я говорил.
...

Как говорится, я не собираюсь критиковать, но я просто не понимаю, как с помощью этого бессмысленного теста можно сделать какие-бы то ни было выводы о работе компиляторов вообще:-(

1) при вычислении m*m очевидно происходит целочисленное переполнение.

2) поскольку суммируемые элементы внутреннего цикла не зависят от k, выносом этого цикла наружу достигается ускорение по сравнению с исходной оптимизированной (-O3) программой еще в 10 раз:
Код:
program bench;
IMPLICIT NONE
DOUBLE PRECISION, DIMENSION (1000,1000) :: x
INTEGER :: i,j,k,n,m
DOUBLE PRECISION, DIMENSION (1000) :: f
DOUBLE PRECISION :: sum
do i=1,1000
   do j=1,1000
      x(i,j) = 0
   end do
end do
n = 1
m = 1
f(1) = 0
do i=1,1000
   do j=1,1000
      x(i,j) = m*m+n*n+1
      f(1)=f(1)+x(i,j)/(x(i,j)+2.0d0/m)
      m = m + 1
   end do
   n = n + 1
end do
do k=2,1000
   f(k) = f(1)
end do
sum = 0
do k=1,1000
   sum = sum + f(k)
end do
write(*,*) sum, x(1000,1000)
end program bench

При этом код работает одинаково быстро как при компиляции с оптимизацией (-O3) так и без нее (-O0) - около 0.09 сек.

3) поскольку в фортране массивы хранятся по столбцам изменение очередности i и j циклов должно бы привести к дополнительному ускорению работы программы.

Для теста использовался gfortran.

И векторизация тут похоже не при чем.

Автор:  Info21 [ Четверг, 12 Сентябрь, 2013 10:58 ]
Заголовок сообщения:  Re: Красноярская сборка BlackBox 1.6rc6

Иван Денисов писал(а):
оптимизация XDS сделана для достаточно старых моделей.
Оптимизация XDS сделана на "логическом" уровне (логика формул в программе и логика FP стека, которая не меняется с новыми процами), а оптимизации, опирающиеся на знание микропроцессора -- обычно крайне специфические (инженеры и делают процы с учетом стандартных тестов, чтобы можно было получить цифру).

Иван Денисов писал(а):
возможна ли какая-то оптимизация в BlackBox компиляторе?
ББ компилятор трогать отнюдь не полезно.

Оптимизирующий компилятор для КП может присутствовать как внешняя тулзовина. XDS могут это сделать, но нужно оплатить команде сколько-то месяцев (<= года) работы.

Автор:  Info21 [ Четверг, 12 Сентябрь, 2013 11:00 ]
Заголовок сообщения:  Re: Сравнение компиляторов f95, ifort, xds, blackbox

Alexey Veselovsky писал(а):
Волшебства не произошло - на боевой задаче интеловский компайлер показал ту же производительность что и мелкомягкий.
История упорно повторяется уже лет 30-40.

Автор:  Kemet [ Четверг, 12 Сентябрь, 2013 16:21 ]
Заголовок сообщения:  Re: Красноярская сборка BlackBox 1.6rc6

Иван Денисов писал(а):
а возможна ли какая-то оптимизация в BlackBox компиляторе?
"какая-то" там уже есть

Страница 1 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/