Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / float и int / 25 сообщений из 27, страница 1 из 2
15.12.2008, 10:56:05
    #35714001
Belevern
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
float и int
Вопрос не совсем в тему, но на сколько float и double медленней инта работает? Сколько тактов на эти операции уходит. В смысле умножение, сложение, деление вычитание.
...
Рейтинг: 0 / 0
15.12.2008, 11:12:41
    #35714046
Maykie
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
float и int
BelevernВопрос не совсем в тему, но на сколько float и double медленней инта работает? Сколько тактов на эти операции уходит. В смысле умножение, сложение, деление вычитание.
Вообще afair это пресильно зависит от конкретной марки cpu.
легче взять и замерить с использованием ОбобщенногоПрограммирования. Ну или рыскать по amd.com/intel.com в поисках нужных док
...
Рейтинг: 0 / 0
15.12.2008, 11:15:09
    #35714053
Belevern
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
float и int
Maykie,

думаю там не сильно Pentium 4 от AMD отличаются. на MOV 2 такта, эт я знаю. А вот на MUL, SUB и т.п. это хз... Ищу знающих людей. Вопрос в том нужно ли мне использовать float/double или int на 1000 делить всегда.
...
Рейтинг: 0 / 0
15.12.2008, 11:16:12
    #35714058
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
float и int
MaykieBelevernВопрос не совсем в тему, но на сколько float и double медленней инта работает? Сколько тактов на эти операции уходит. В смысле умножение, сложение, деление вычитание.Вообще afair это пресильно зависит от конкретной марки cpu.И очень сильно зависит от последовательности действий, попадания в кэши и т.п. Т.е. от вещей, не связанных напрямую с типом данных.
Имхо, если интересует точный результат, то нужно проверять на конкретном алогритме. Если интересует приблизительный, то - одинаково.
...
Рейтинг: 0 / 0
15.12.2008, 11:19:57
    #35714069
про герр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
float и int
BelevernMaykie,

думаю там не сильно Pentium 4 от AMD отличаются. на MOV 2 такта, эт я знаю. А вот на MUL, SUB и т.п. это хз... Ищу знающих людей. Вопрос в том нужно ли мне использовать float/double или int на 1000 делить всегда.

сама операция деления выполняется в 10 раз дольше, чем операция умножения.
...
Рейтинг: 0 / 0
15.12.2008, 11:22:00
    #35714073
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
float и int
про геррсама операция деления выполняется в 10 раз дольше, чем операция умножения.Вы уточняйте для какого процессора и в каких условиях. Т.к. в общем случае это неверно.
...
Рейтинг: 0 / 0
15.12.2008, 11:27:57
    #35714091
про герр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
float и int
miksoftпро геррсама операция деления выполняется в 10 раз дольше, чем операция умножения.Вы уточняйте для какого процессора и в каких условиях. Т.к. в общем случае это неверно.
без разницы. в двоичной арифметике нет деления, есть сложение, умножение, сдвиг. операция деления - комбинация сложений и сдвигов.
...
Рейтинг: 0 / 0
15.12.2008, 11:38:06
    #35714130
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
float и int
про геррбез разницы. в двоичной арифметике нет деления, есть сложение, умножение, сдвиг. операция деления - комбинация сложений и сдвигов.и как из этого следует число 10? или даже вообще отличие времени выполнения деления от времени выполнения умножения?
...
Рейтинг: 0 / 0
15.12.2008, 11:45:35
    #35714158
Алексей Морозов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
float и int
Belevern
на MOV 2 такта, эт я знаю. А вот на MUL, SUB и т.п. это хз...
Ищу знающих людей. Вопрос в том нужно ли мне использовать float/double или
int на 1000 делить всегда.


MOV выполняется за один такт.
И возможно, что за один такт выполнится параллельно 3 команды.

FLOAT и DOUBLE должны выполняться примерно одинакокое время, потому что
команда
умножения одна. Различные команды копирования между регистром и памятью (32,
64, 80-бит и т.п.)

http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/33425.pdf


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
15.12.2008, 11:49:02
    #35714172
про герр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
float и int
miksoftпро геррбез разницы. в двоичной арифметике нет деления, есть сложение, умножение, сдвиг. операция деления - комбинация сложений и сдвигов.и как из этого следует число 10? или даже вообще отличие времени выполнения деления от времени выполнения умножения?
бес попутал (насчет числа 10)
немного о другой архитектуре думал, в ней в частности оп-я умножения делается за 2 такта (сложение + сдвиг) а деление за 20 тактов. Не думаю что координально что то меняется из за архитектуры.

Модератор: Тема перенесена из форума "C++".
...
Рейтинг: 0 / 0
15.12.2008, 13:18:51
    #35714446
Алексей Морозов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
float и int
"Алексей Морозов" <nospam@sql.ru>; сообщил/сообщила в новостях следующее:
news:6570738@sql.ru...
Автор: Алексей Морозов

xhttp://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/33425.pdf

Не ту ссылку дал.
Время выполнения команд процессора для AMD приведено где то тут:

http://www.amd.com/us-en/Processors/TechnicalResources/0,,30_182_739_7203,00.html

Но мне проще проверить это командой RDTSC


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
15.12.2008, 13:26:06
    #35714478
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
float и int
Алексей МорозовНо мне проще проверить это командой RDTSCА попробуйте.
...
Рейтинг: 0 / 0
15.12.2008, 15:53:02
    #35715000
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
float и int
BelevernВопрос не совсем в тему, но на сколько float и double медленней инта работает? Сколько тактов на эти операции уходит. В смысле умножение, сложение, деление вычитание.
Сравнивать такты операций - неинтересно. Ведь производительность алгоритма будет зависеть не только от этих цифр.
...
Рейтинг: 0 / 0
15.12.2008, 16:25:49
    #35715119
Quartz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
float и int
Алексей МорозовНо мне проще проверить это командой RDTSCУгу... Время выполнения команды в тактах не считают (если мне не изменяет память) со времен P II, т.к. изобретение Форда оказалось востребованным и в процессорах. Сейчас информация о скорости выполнения приводится в количестве микроопераций.

2 Belevern:
Опишите задачу подробнее; возможно, оптимальным по производительности/точности будет использование потоковых SIMD-расширений.
...
Рейтинг: 0 / 0
15.12.2008, 17:31:49
    #35715347
Алексей Морозов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
float и int
Деление двух чисел до 1000:

INT - за 40 тактов.
DOUBLE - за 2 такта.
FLOAT - за 1 такт.


Так компилятор делит int:
Код: plaintext
1.
2.
3.
4.
5.
mov ecx,dword ptr [esp+34h]
mov eax,dword ptr [esp+28h]
cdq
idiv eax,ecx
 mov dword ptr [esp+28h],eax

Так компилятор делит double:


Код: plaintext
1.
2.
3.
4.
fld qword ptr [esp+34h]
fdiv qword ptr [esp+28h]
fstp qword ptr [esp+28h]


Так я проверяю скорость:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
  int t, mt;
  mt= 100000 ;
  for(int i= 0 ; i< 10000 ; i++) {
    volatile int ia, ib=rand()% 1000 , ic=rand()% 1000 + 1 ; // int - меняем на 
float, double
    _asm {
      rdtsc
      mov t, eax
    }
    ia = ib/ic;
    _asm {
      rdtsc
      sub t, eax
    }
    t=-t- 9 ;
    if(t> 0  && t<mt) mt=t;
  }
  MessageBox( 0 ,i2s(mt).c_str(), 0 , 0 );


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
15.12.2008, 19:07:53
    #35715567
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
float и int
Так я проверяю скорость:

Код: plaintext
1.
2.
3.
4.
5.
6.
  for(int i= 0 ; i< 10000 ; i++) {
    volatile int ia, ib=rand()% 1000 , ic=rand()% 1000 + 1 ; // int - меняем на 
float, double
...
  }
  MessageBox( 0 ,i2s(mt).c_str(), 0 , 0 );
[/quot]

Может стоит три массива завести и заполнить rand'ом ДО цикла?
...
Рейтинг: 0 / 0
15.12.2008, 19:26:27
    #35715596
акуз-программист
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
float и int
про геррсама операция деления выполняется в 10 раз дольше, чем операция умножения.
пусть делит на 1024:)) тогда быстрее будет.
...
Рейтинг: 0 / 0
15.12.2008, 19:41:30
    #35715628
Алексей Морозов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
float и int
АнатоЛойМожет стоит три массива завести и заполнить rand'ом ДО цикла?

Зачем?
...
Рейтинг: 0 / 0
15.12.2008, 21:56:45
    #35715792
АнатоЛой
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
float и int
Алексей МорозовАнатоЛойМожет стоит три массива завести и заполнить rand'ом ДО цикла?

Зачем?
Виноват. Привычка. :)
...
Рейтинг: 0 / 0
16.12.2008, 12:56:42
    #35716902
Quartz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
float и int
Алексей МорозовДеление двух чисел до 1000:

INT - за 40 тактов.
DOUBLE - за 2 такта.
FLOAT - за 1 такт. Какой у Вас проц?
...
Рейтинг: 0 / 0
16.12.2008, 13:41:01
    #35717085
Алексей Морозов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
float и int
Quartz Какой у Вас проц?

AMD Athlon 64 X2.

Я еще раз перепровирил на программе ниже , и получилось 3 такта.
Попробовал увеличить числа до 100000, получилось 4 такта.
Разместил 5 последовательностей команд (-fld-fdiv-fstp-), получилось 5x4
такта.

Выходит, что DOUBLE быстрее чем INT в 10 раз.

Код: plaintext
1.
2.
3.
4.
5.
6.
fld ib
fwait // ждет завершения работы математичесского сопроцессора (конвеера).
fdiv ic
fwait // ждет завершения работы математичесского сопроцессора
fstp ia
fwait // ждет завершения работы математичесского сопроцессора



Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
16.12.2008, 14:36:39
    #35717318
Алексей Морозов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
float и int
Попробовал для целых чисел очистить конвеер процессора 64-мя NOP-ами перед
командами деления, результат тот же.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
16.12.2008, 14:50:09
    #35717371
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
float и int
Алексей МорозовПопробовал для целых чисел очистить конвеер процессора 64-мя NOP-амиЧистить надо не NOP-ами, а условными переходами с невозможностью предсказания. Обычные NOP-ы, насколько я в курсе, давно игнорируются.

Да и вообще эти эксперименты, имхо, бессмыслены. Ибо в реальной ситуации другие факторы могут оказать большее влияние на время выполнения, нежели разница между float и int.
...
Рейтинг: 0 / 0
16.12.2008, 14:56:51
    #35717402
Quartz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
float и int
А компилятор? :). Просто сильно удивило отставание целочисленного блока аж на порядок.

У меня в (VS 2008, Core 2 Duo) получились примерно равные результаты c int и double. Если написать последовательность команд (аналог Вашего последнего примера), то целочисленные вычисления ожидаемо опережают по скорости FPU.

PS: Есть стойкое ощущение, что такого рода тесты слишком... синтетические, что ли. Все же логика работы современных "камней" весьма сложна, и, повторюсь, замер скорости отдельной операции вряд ли даст представление об общей скорости выполнения кода.
PPS: Завтра попробую дома на X2.
...
Рейтинг: 0 / 0
16.12.2008, 16:04:27
    #35717625
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
float и int
miksoftДа и вообще эти эксперименты, имхо, бессмыслены. Ибо в реальной ситуации другие факторы могут оказать большее влияние на время выполнения, нежели разница между float и int.
+1

Этот тест - вообще не показательный.
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / float и int / 25 сообщений из 27, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]