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




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 16 
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Member
Статус: Не в сети
Регистрация: 16.04.2004
Откуда: [MSK.RU]
Возникла необходимость посмотреть, сколько тактов в среднем уходит на выполнение простейших арифметических операций у CPU.
Были написаны подобные простенькие функции (в Borland C++ Builder 6):

Код:
Cardinal __fastcall DepALUM(Cardinal count)
{
 Cardinal ttsca1,ttsca2,ttscd1,ttscd2;
 Cardinal rnd1=random(0x000011FF);
 Cardinal rnd2=random(0x000011FF);
 Cardinal rnd3=random(0x000011FF);
 asm
  {
   pushad
   mov ecx,count
   mov esi,rnd1
   mov ebx,rnd3
   rdtsc
   mov ttsca1,eax
   mov ttscd1,edx
   mov eax,1
   @rp:
   mul eax,rnd3
   mul eax,esi
   mul eax,eax
   mul eax,rnd2
   mul eax,ebx
   dec ecx
   jnz @rp
   rdtsc
   mov ttsca2,eax
   mov ttscd2,edx
   popad
  }
 return ((0xFFFFFFFF*(ttscd2-ttscd1)+(ttsca2-ttsca1)));
}

для add/sub,mul,fadd,fmul,fdiv.
И отдельно функция с пустым циклом для измерения затрат на организацию этого цикла.

Что получилось в результате:
1. FPU у К7 и К8 обладают одинаковыми показателями такты/инструкции (с точностью до 2 знака после запятой). ALU у К7 в 1,5-2 раза медленнее, чем у К8.
2. FPU Pentium MMX медленнее K7 и К8 в 5 раз. ALU - в 2 раза медленнее, чем у К7.
3. ALU Pentium 4 находится между К7 и К8, а вот FPU - в 10 раз медленнее, чем у Pentium MMX.

Насколько справедливы такие выводы? Неужели и правда FPU у Р4 такое жуткое? Может, мне надо было пару лет назад это написать и показать Северу НН?
Или это какая-то ерунда в идее/алгоритме/реализации функции?



Партнер
 

Member
Статус: Не в сети
Регистрация: 07.05.2004
Откуда: Rostov-on-Don
Tod Schwarzkaiser писал(а):
Северу НН

не поминай в суе.....подальше от греха
Tod Schwarzkaiser писал(а):
И отдельно функция с пустым циклом для измерения затрат на организацию этого цикла.

может дело в этом, пока пень подготавливает свой длинющий конвеер к циклу этож уйма времени.
Кроме того, из-за той же причины, выполнение простейших операций также дело доолгое.
инструкция попала в конвеер за 3-4 такта выполнилась, а пока до конца дошла.... скоко у пня ступеней конвеер 20-30, а потом перезагрузка в случае неправильного предсказания ветвления.
В теории можно написать такой код, не шибко сложный но который будет постоянно преводить к перезагрузке конвеера, что теоритически может сделать из пня 4 - пень 2

_________________
Первичность разума над материей? Существует ли материя без разума? И наоборот?


 

Member
Статус: Не в сети
Регистрация: 14.01.2004
Откуда: Киев, Украина
Tod Schwarzkaiser тут похоже наложилось все. Все-таки цикл, т.е. условные переходы, а это значит прямое влияние эфективности блока предсказания ветвлений.

_________________
Ку ку


 

Member
Статус: Не в сети
Регистрация: 16.04.2004
Откуда: [MSK.RU]
merlex, Daemon
Относительно предсказания ветвлений у меня было такое соображение: теоретически, если у процессора % правильных предсказаний около 95 и есть некоторый порог срабатывания БПВ, то после некоторого количества итераций предсказание ветвлений значимого влияния не оказывает.
Но могу ошибаться, ибо далеко не бог и не микроархитектор... :)

Судя по значениям, ALU начинает показывать стабильный результат где-то с 40-48 итераций, а FPU - с 16-24.


 

Member
Статус: Не в сети
Регистрация: 30.01.2003
Откуда: Москва
Конвейер не будет тут задействован, поскольку (если :) ) идет постоянное чтение-запись в одну и ту же ячейку FPU стека. Когда-то давно проводил такие опыты, и для того, чтобы P4 мог обогнать K8, надо было использовать чуть ли не весь стек :)
Предсказания тоже не должны были влиять...тут нет никаких исключений из правил перехода, практически все время переход выполняется.

Может быть по умолчанию разная точность вычислений?


 

Member
Статус: Не в сети
Регистрация: 04.01.2004
Откуда: 31
Если я не ошибаюсь, то здесь есть ответ:
http://www.fcenter.ru/online.shtml?arti ... sors/12033
Tod Schwarzkaiser писал(а):
Может, мне надо было пару лет назад это написать и показать Северу НН?

Бесполезно. :)


 

Member
Статус: Не в сети
Регистрация: 16.04.2004
Откуда: [MSK.RU]
S.Q.Lapp
Цитата:
здесь есть ответ

Да... Ответ есть. Но на другой вопрос. А именно - на вопрос про отвратительное поведение П4 в тесте ПСП. Но в данном случае операнды грузятся в регистры до первого снятия TSC, поэтому здесь реплей не должен вмешиваться.

Asteroid
Цитата:
Может быть по умолчанию разная точность вычислений?

Это намёк на то, что Пень в 10 раз точнее? ;)
И как мне эту версию проверить?

Ещё странно то, что целочисленное умножение почти в 7 раз медленнее у П4 происходит. Странно потому, что, вроде бы, у него Fast ALU есть... Похоже, что оно у него тоже чисто маркетинговое...


 

Member
Статус: Не в сети
Регистрация: 30.01.2003
Откуда: Москва
Tod Schwarzkaiser писал(а):
S.Q.Lapp
Asteroid
Цитата:
Может быть по умолчанию разная точность вычислений?

Это намёк на то, что Пень в 10 раз точнее? ;)
И как мне эту версию проверить?


Set8087CW( 0x037F ) - Double Extended Precision (64 bits)
Set8087CW( 0x027F ) - Double Precision (53 bits)
Set8087CW( 0x007F ) - Single Precision (24 bits)

Это по IA-32 Intel Architecture Software Developer's Manual Vol. 1 (Basic Architecture), глава 8.


 

Member
Статус: Не в сети
Регистрация: 16.04.2004
Откуда: [MSK.RU]
Asteroid
Цитата:
IA-32 Intel Architecture Software Developer's Manual Vol. 1 (Basic Architecture)

Хорошая идея. Надо будет почитать...

Вот ещё вопрос.
Являются эти последовательности зависимыми или нет?
1.
Код:
fdiv st(0),st
fdiv st(1),st
fdiv st(2),st
fdiv st(3),st
fdiv st(4),st

2.
Код:
fdiv st,st(0)
fdiv st,st(1)
fdiv st,st(2)
fdiv st,st(3)
fdiv st,st(4)


Результаты по этим цепочкам у К7/К8 такие (64бит; 53бит; 24бит):
AVG (1) FDIV, ticks/op 21,84; 17,84; 13,84
AVG (2) FDIV, ticks/op 23,63; 19,63; 15,63

То есть, это явно не разы - у Р4 там 1130/1150 тактов на операцию (у Рentium ММХ - 105/103)...

А по FMUL и FADD результаты от точности не зависят вообще никак...


 

Member
Статус: Не в сети
Регистрация: 14.04.2005
Tod Schwarzkaiser
А ты уверен что у тебя там исключения возникают? Хотя б и замаскированные. Вообще же fdiv [практически] не перекрывается, так что зависимые или нет - пофиг.


 

Member
Статус: Не в сети
Регистрация: 25.01.2003
Откуда: UA
Не факт что этот код на современных CPU работает так как должен.
Распаралеливание может привести к тому что rdtsc будет выполнена _раньше_ чем завершен цикл. Я когда писал модуль подсчета тактов для увеличения точности создавал в памяти сегмент размером ~40kb и забивал его нужными инструкциями, получается линейный код который хочешь-нехочешь а придется выполнить, последняя команда возврат туда куда нам нужно. Попробуй, в этом случае точно никакие издержки цикла и суперскалярность мешать не будут.


 

Member
Статус: Не в сети
Регистрация: 14.01.2004
Откуда: Киев, Украина
KaYot достаточно делать это в потоке, который четко закрепленн за определенным процессором с помощью SetThreadAffinityMask.

_________________
Ку ку


 

Advanced member
Статус: Не в сети
Регистрация: 30.08.2003
Откуда: Санкт-Петербург
Цитата:
Tod Schwarzkaiser

результаты сильно скачут у пня? см. цикл статей на f-center про внутренню микроархитектуру П4, в частности:
http://www.fcenter.ru/cgi-bin/sitemanag ... urlid=4577
это скорость может добить окончательно :(

_________________
{:€ дед в законе :-) нородный окодемег
почетный пользователь OpenSuSE 11.3
Ремонт и модернизация ноутбуков IBM (Lenovo) ThinkPad


 

Member
Статус: Не в сети
Регистрация: 25.01.2003
Откуда: UA
Daemon
Я не про многопоточность. Даже в одном потоке суперскалярный CPU может изменить последовательность выполнения команд, естественно на разных камнях алгоритмы перекомпиляции и исполнения 'наперед' разные.


 

Member
Статус: Не в сети
Регистрация: 14.01.2004
Откуда: Киев, Украина
KaYot но мы же не на VLIW'ах работаем ;)

_________________
Ку ку


 

Member
Статус: Не в сети
Регистрация: 25.01.2003
Откуда: UA
Daemon
Разница только в названии.


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 16 
-

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


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

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


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

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan