OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Суббота, 27 Апрель, 2024 12:51

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 65 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Re: Whetstone Benchmark
СообщениеДобавлено: Воскресенье, 23 Декабрь, 2007 05:58 

Зарегистрирован: Четверг, 12 Июль, 2007 23:18
Сообщения: 1982
Откуда: Узбекистан, Чирчик
AVC писал(а):
У кого-нибудь есть интеловский компилятор? (Чтобы воспроизвести результат и заглянуть в ассемблерный листинг.)
Можете скачать бесплатную версию для линукса... :о)
У меня есть под винду, но она требует VS2003, которой у меня нет, увы...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Whetstone Benchmark
СообщениеДобавлено: Воскресенье, 23 Декабрь, 2007 17:23 

Зарегистрирован: Понедельник, 29 Январь, 2007 19:00
Сообщения: 370
Откуда: Украина, Запорожье
Info21 писал(а):
В общем, фигня все эти измерения -- ясно же, что оптимизируется -- какие там могут быть чудеса...

Скорее наоборот -- не оптимизируется ни в BlackBox, ни в GCC. В BlackBox нет и более простых оптимизаций, странно, если бы была оптимизация вычислений с плавающей точкой...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Whetstone Benchmark
СообщениеДобавлено: Воскресенье, 23 Декабрь, 2007 20:12 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Vlad писал(а):
batyrmastyr писал(а):
Когда-то, в гонке java-компиляторов (или рантаймов), для получения скорости в 2-3 (вместо 10-30) раза меньше native кода, было популярно загонять в компилятор (или рантайм) умение находить код популярных тестов и очень жестоко его оптимизировать.


Чтобы "жестоко оптимизировать" (на порядок), надо чтобы было куда :) Современные компиляторы оптимизируют так, что далеко не каждый программист на ассемблере напишет лучше.

Ага, если программист должен писать CISC код для фактически RISC процессора - только зная как и в каком порядке надо ставить команды, чтобы RISC-ядро работало без простоя. Вот поэтому то Intel и может так наоптимизировать. Только они доподлинно знают как CISC команды отображаются в RISC нутро.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Whetstone Benchmark
СообщениеДобавлено: Воскресенье, 23 Декабрь, 2007 21:49 

Зарегистрирован: Среда, 28 Февраль, 2007 00:08
Сообщения: 142
Откуда: Нижний Новгород
Евгений Темиргалеев писал(а):
Vlad писал(а):
batyrmastyr писал(а):
Когда-то, в гонке java-компиляторов (или рантаймов), для получения скорости в 2-3 (вместо 10-30) раза меньше native кода, было популярно загонять в компилятор (или рантайм) умение находить код популярных тестов и очень жестоко его оптимизировать.


Чтобы "жестоко оптимизировать" (на порядок), надо чтобы было куда :) Современные компиляторы оптимизируют так, что далеко не каждый программист на ассемблере напишет лучше.

Ага, если программист должен писать CISC код для фактически RISC процессора - только зная как и в каком порядке надо ставить команды, чтобы RISC-ядро работало без простоя. Вот поэтому то Intel и может так наоптимизировать. Только они доподлинно знают как CISC команды отображаются в RISC нутро.

Честно говоря, я этот вариант упустил :)

Надо было заключить слова "жестоко оптимизировать" в кавычки: java оптимизации были подобны драйверным трюкам Ati и Nvidia (когда найдя известный бенчмарк драйвер подменял одни объекты изображения другими, с ужасающей картинкой на мониторе) - стоило переставить пару строчек местами и скорость подала до обычного 10-30 кратного проигрыша native коду.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Whetstone Benchmark
СообщениеДобавлено: Понедельник, 24 Декабрь, 2007 08:39 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
PGR писал(а):
Info21 писал(а):
В общем, фигня все эти измерения -- ясно же, что оптимизируется -- какие там могут быть чудеса...

Скорее наоборот -- не оптимизируется ни в BlackBox, ни в GCC. ...


Имелось в виду вообще -- что может быть оптимизировано.
Но ББ некоторые мелочи, кажется, все-таки оптимизирует.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Whetstone Benchmark
СообщениеДобавлено: Понедельник, 24 Декабрь, 2007 09:33 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1429
Wilipedia писал(а):
The Whetstone benchmark is a synthetic benchmark for evaluating the performance of computers...and was designed to defeat compiler optimizations...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Whetstone Benchmark
СообщениеДобавлено: Понедельник, 24 Декабрь, 2007 11:15 

Зарегистрирован: Понедельник, 29 Январь, 2007 19:00
Сообщения: 370
Откуда: Украина, Запорожье
AVC писал(а):
И что, это единственный компилятор, который так делает?
Я напомню цифры: 8000 MIPS у Интела против 1379 MIPS у Майкрософта.

Вот что об этом компиляторе пишут разработчики библиотеки ATLAS:
Цитата:
In particular we tried the Intel compiler icc (called icl on Windows) on Intel x86 platforms, and overall performance was lower than gcc. Even worse, from the documentation icc does not seem to have any firm IEEE floating point compliance unless you want to run so slow that you could compute it by hand faster. This means that whenever icc achieves reasonable performance, I have no idea if the error will be bounded or not.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Whetstone Benchmark
СообщениеДобавлено: Понедельник, 24 Декабрь, 2007 14:03 

Зарегистрирован: Среда, 31 Октябрь, 2007 18:58
Сообщения: 252
Откуда: Austria, Bruck
AVC писал(а):
hothing писал(а):
Провел тест на рабочей машине с двумя версиями ЧЯ.
Вот результаты :
BB 1.5 Lyceum : 816 MIPS
BB 1.6 RC5 : 671 MIPS

Ожидал обратного результата. Что сделали с компилятором?


Не думаю, что его ухудшили.
У меня тоже сначала BB 1.6 показывал 750 MIPS, а потом вдруг он же стал показывать 895 MIPS.
С этими измерениями как-то все неустойчиво...


У меня результаты стабильные. +-1. И последовательные запуски (5 подряд) и через некотрое время(5 раз). Думаю вся программа целиком помещается в кеш. О! Попробую по Линем через Вайн.

Сколько выдает МИПСов Компонентный Паскаль - не так важно. Конечно, хотелось бы чтобы был на уровне с GCC... Но для этого, мне кажется, придется переделать компилятор заново, чтобы можно было использовать особенности процессоров. ЭЭЭ...

Энтузиастов нет? :roll:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Whetstone Benchmark
СообщениеДобавлено: Понедельник, 24 Декабрь, 2007 16:36 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Нет, не весь компилятор, а только бэкенд-кодогенератор. OP2 сделан по двухплановой архитектуре.
И нужны тут не просто энтузиасты, а ещё и опыт в этой области. Вот если б у AVC руки дошли, то мне кажется, что-то могло бы получиться :-)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Whetstone Benchmark
СообщениеДобавлено: Понедельник, 24 Декабрь, 2007 17:00 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1429
Не так все просто. Например, переменные в регистрах размещать нельзя - отладчик офигеет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Whetstone Benchmark
СообщениеДобавлено: Понедельник, 24 Декабрь, 2007 17:17 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Ну, можно сделать опционально. Перед выпуском приложения "в свет" отдельные модули компилируется со спец. оптимизирующим бэкендом.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Whetstone Benchmark
СообщениеДобавлено: Понедельник, 24 Декабрь, 2007 17:33 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Илья Ермаков писал(а):
Ну, можно сделать опционально. Перед выпуском приложения "в свет" отдельные модули компилируется со спец. оптимизирующим бэкендом.


А как же "добраться до любой переменной через рефлекшн"? ;)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Whetstone Benchmark
СообщениеДобавлено: Понедельник, 24 Декабрь, 2007 18:41 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Поэтому я и говорю - оптимизируем конкретные модули. В "числодробительных" вещах применение рефлекшну трудно найти.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Whetstone Benchmark
СообщениеДобавлено: Понедельник, 24 Декабрь, 2007 21:08 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Илья Ермаков писал(а):
Поэтому я и говорю - оптимизируем конкретные модули. В "числодробительных" вещах применение рефлекшну трудно найти.


Т.е. поведение программы будет зависеть от опций компиляции. Это мы уже проходили в C. Я категорически против :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Whetstone Benchmark
СообщениеДобавлено: Вторник, 25 Декабрь, 2007 06:00 

Зарегистрирован: Вторник, 29 Ноябрь, 2005 21:41
Сообщения: 1030
Илья Ермаков писал(а):
Нет, не весь компилятор, а только бэкенд-кодогенератор. OP2 сделан по двухплановой архитектуре.
И нужны тут не просто энтузиасты, а ещё и опыт в этой области. Вот если б у AVC руки дошли, то мне кажется, что-то могло бы получиться :-)
Можно и готовый использовать. Если очень нужно. Но подозреваю, что не очень.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Whetstone Benchmark
СообщениеДобавлено: Вторник, 25 Декабрь, 2007 10:18 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8500
Откуда: Троицк, Москва
Подозреваю, что главная часть оптимизации, поразившей AVC (8000), состоит в использовании векторных инструкций.
Наверное, проще всего их предоставлять библиотекой? Для ясности. А то плохо не знать, что там компилятор творит.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Whetstone Benchmark
СообщениеДобавлено: Вторник, 25 Декабрь, 2007 12:04 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
GUEST писал(а):
Можно и готовый использовать. Если очень нужно. Но подозреваю, что не очень.

А готовый - это как это? Есть универсальные бэкенды-оптимизаторы? Хотя, мда - GCC, например. Или ещё что имеется в виду?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Whetstone Benchmark
СообщениеДобавлено: Вторник, 25 Декабрь, 2007 14:30 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1429
Info21 писал(а):
Подозреваю, что главная часть оптимизации, поразившей AVC (8000), состоит в использовании векторных инструкций.

Есть и другие возможности :-)
Код:
(* Module 8: Procedure calls *)
PROCEDURE P3(X,Y : REAL; VAR Z : REAL);
VAR X1, Y1 : REAL;
BEGIN
   X1 := X;
   Y1 := Y;
   X1 := T * (X1 + Y1);
   Y1 := T * (X1 + Y1);
   Z := (X1 + Y1) / T2;
END P3;

T2 := 2.0;
X := 1.0; Y := 1.0; Z := 1.0;
FOR I:=1 TO N8 DO
   P3 (X,Y,Z)
END;

инлайним P3
Код:
T2 := 2.0;
X := 1.0;
Y := 1.0;
Z := 1.0;
FOR I:=1 TO N8 DO
   X1 := X;
   Y1 := Y;
   X1 := T * (X + Y);
   Y1 := T * (X + Y);
   Z := (X1 + Y1) / T2;
END;

упрощаем
Код:
T2 := 2.0;
X := 1.0;
Y := 1.0;
Z := 1.0;
FOR I:=1 TO N8 DO
   Z := (T * (X + Y) + T * (X + Y)) / T2;
END;

находим константы
Код:
Z := 1.0;
FOR I:=1 TO N8 DO
   Z := (2.0 * (1.0 + 1.0) + 2.0 * (1.0 + 1.0)) / 2.0;
END;

упрощаем
Код:
Z := 1.0;
FOR I:=1 TO N8 DO
   Z := 4.0;
END;

выносим из цикла
Код:
Z := 1.0;
Z := 4.0;
FOR I:=1 TO N8 DO END;

убираем бесполезный код
Код:
Z := 4.0;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Whetstone Benchmark
СообщениеДобавлено: Вторник, 25 Декабрь, 2007 16:16 

Зарегистрирован: Среда, 04 Июль, 2007 16:43
Сообщения: 247
Vlad писал(а):
Илья Ермаков писал(а):
Поэтому я и говорю - оптимизируем конкретные модули. В "числодробительных" вещах применение рефлекшну трудно найти.


Т.е. поведение программы будет зависеть от опций компиляции. Это мы уже проходили в C. Я категорически против :)


Поведение программы написанной на Блэкбоксе может изменяться непредсказуемым образом и без оптимизаций: берем, например, первый тест из Whetstone Benchmark

Код:
MODULE TestWhet1;
IMPORT Log := StdLog, Services;
TYPE ARRAY4 = ARRAY 5 OF REAL;
VAR E1 : ARRAY4;
T, T1, T2 : REAL;
J, K, L : INTEGER;
time0, time1 : LONGINT;
PROCEDURE Do*;
   VAR NLoop, I, II, JJ : INTEGER;
          N1, N2, N3, N4, N5, N6, N7, N8, N9, N10, N11 : INTEGER;
          X1, X2, X3, X4, X, Y, Z : REAL;
   BEGIN
      time0:=Services.Ticks();
(* The actual benchmark starts here. *)
      T := 0.499975; (* T := 0.499975;  *)
      NLoop := 100;
      II := 8000;
      FOR JJ:=1 TO II DO
(* Establish the relative loop counts of each module. *)
         N2 := 12 * NLoop;
(* Module 2: Array elements *)
         E1 [1] := 1.0;
         E1 [2] := -1.0;
         E1 [3] := -1.0;
         E1 [4] := -1.0;
         FOR I:=1 TO N2 DO
            E1 [1] := (E1 [1] + E1 [2] + E1 [3] - E1 [4])*T;
            E1 [2] := (E1 [1] + E1 [2] - E1 [3] + E1 [4])*T;
            E1 [3] := (E1 [1] - E1 [2] + E1 [3] + E1 [4])*T;
            E1 [4] := (-E1 [1] + E1 [2] + E1 [3] + E1 [4])*T;
         END;
(* THIS IS THE END OF THE MAJOR LOOP. *)
      END;
(* Stop benchmark timing at this point. *)
      time1:=Services.Ticks();
      Log.RealForm (E1[1], 5, 14, 2,8FX);
      Log.RealForm (E1[2], 5, 14, 2,8FX);
      Log.RealForm (E1[3], 5, 14, 2,8FX);
      Log.RealForm (E1[4], 5, 14, 2,8FX);
      Log.Ln; Log.String ('Time: '); Log.Int(time1-time0); Log.String (' msec'); Log.Ln;
END Do;
END TestWhet1.


Тест выполняется за 521 msec (PIII). Раскомментируем одну строку, т.е. вместо
Код:
(* The actual benchmark starts here. *)
      T := 0.499975; (* T := 0.499975;  *)

выполняем одно и то же присваивание 2 раза:
Код:
(* The actual benchmark starts here. *)
      T := 0.499975; T := 0.499975;

Теперь тест выполняется за 1292 msec...

С одной стороны, для неоптимизирующего компилятора такое может происходить по многим причинам - например, из-за выравнивания, попадания/непопадания в кэш, регистры и т.п. И можно с этим просто смириться. С другой стороны, когда при добавлении нового теста внезапно меняется скорость предыдущих, это всё-таки как-то глупо. Может быть изменение бэкенд-кодогенератора могло бы чем-то помочь и в этом случае?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Whetstone Benchmark
СообщениеДобавлено: Вторник, 25 Декабрь, 2007 16:47 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Trurl писал(а):
Info21 писал(а):
Подозреваю, что главная часть оптимизации, поразившей AVC (8000), состоит в использовании векторных инструкций.

Есть и другие возможности :-)
Код:
Z := 4.0;

Интересно 8000 -- это максимальная теоретически достижимая для данного процессора скорость или Интеловскому компилятору ещё есть куда расти?.. :D

Я однажды таким способом вручную раскрутил тест Drystone (где-то на progz.ru писал) так оказалось, что лучшие компиляторы работали медленнее теоретического максимума в несколько раз (раза в три или в семь, не помню).


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 65 ]  На страницу Пред.  1, 2, 3, 4  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB