Документ взят из кэша поисковой машины. Адрес оригинального документа : http://www.snto-msu.net/showflat.php?Number=6897550&src=arc&showlite=
Дата изменения: Unknown
Дата индексирования: Wed Apr 13 13:56:02 2016
Кодировка: Windows-1251
Оптимизируются ли тривиальные операции? - Public forum of MSU united student networks
Root | Google | Yandex | Mail.ru | Kommersant | Afisha | LAN Support
  
Technical >> Development (Archive)

Страницы: 0 | 20 | 40 | 60 | показать все
Forest
Carpal Tunnel

Рег.: 29.08.2002
Сообщений: 11597
Рейтинг: 795
  Re: Оптимизируются ли тривиальные операции? [re: Xanderus]
      18.11.2007 22:24
 

В ответ на:

А насчет умножения на 0 - если оно не целочисленное, то результат может и не нулем быть.



Это как это?
Если так происходит - это ошибка :(
Или процы уже дошли до того, что нулем как таковым не оперируют, а оперируют минимальным числом?

monoid

Рег.: 14.02.2004
Сообщений: 1689
Из: ГЗ::Б::12
Рейтинг: 1331
  Re: Оптимизируются ли тривиальные операции? [re: Forest]
      18.11.2007 23:20
4

Многие процессоры при реализации вещественной арифметики следуют стандарту IEEE 754 (иногда с отклонениями), в котором есть представления "бесконечностей" различных знаков и "не-числа":
code:
$ cat nan.c #include <stdio.h> int main(void) { double inf_p = 1.0/0.0, inf_n = (-1.0)/0.0, nan = 0.0/0.0; printf ("+INF: %g, +INF*0: %g, -INF: %g, -INF*0: %g, NaN: %g, NaN*0: %g\n", inf_p, inf_p*0.0, inf_n, inf_n*0.0, nan, nan*0.0); return 0; } $ gcc nan.c $ ./a.out +INF: inf, +INF*0: nan, -INF: -inf, -INF*0: nan, NaN: nan, NaN*0: nan


Кстати, любопытный факт: нули в IEEE 754 тоже разных знаков, и нейтральным элементом относительно сложения является именно отрицательный ноль:
(+0) + (+0) = (+0)
(-0) + (-0) = (-0)
(-0) + (+0) = (+0)

Fj_, DarkGray, Xanderus: я знаю про такое явление как параллелизм на уровне команд, спасибо. Вы что, ребята, вообще? Я не хотел превращать тред в разгоряченный спор со взаимными оскорблениями. Извините. Но молча пропустить неправильное утверждение тоже не смог. Еще раз. Есть конкретное понятие "латентности операции". Для большинства арифметических операций она постоянна. Для загрузки числа из памяти, например, латентность переменна, так как оно может лежать в кеше или в оперативке. Утверждение про "умножение занимает один такт" в контексте параллелизма на уровне команд некорректно, хотя бы потому, что никак не ссылается на то, лежит ли это умножение на критическом пути вычислений, или нет. Вот если я скажу, что поскольку декодеры команд популярных процессоров пропускают не более трех инструкций за такт, поэтому при достаточном параллелизме на уровне команд можно считать, что умножение занимает треть такта, как вы к этому отнесетесь?



#
DizzyDen
достаточно добр

Рег.: 04.03.2003
Сообщений: 51430
Из: http://лакалхвост
Рейтинг: 13545
  Re: Оптимизируются ли тривиальные операции? [re: monoid]
      19.11.2007 13:51
 

Quote:

Вот если я скажу, что поскольку декодеры команд популярных процессоров пропускают не более трех инструкций за такт, поэтому при достаточном параллелизме на уровне команд можно считать, что умножение занимает треть такта, как вы к этому отнесетесь?



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



If stateless paradigm is good for your code, why shouldn't it be for your country?
DarkGrayМодератор
Carpal Tunnel

Рег.: 30.09.2002
Сообщений: 31421
Рейтинг: 8956
  Re: Оптимизируются ли тривиальные операции? [re: monoid]
      19.11.2007 18:18
-1

Quote:

поэтому при достаточном параллелизме на уровне команд можно считать, что умножение занимает треть такта, как вы к этому отнесетесь?




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


LazyBehemoth

Рег.: 08.06.2006
Сообщений: 923
Рейтинг: 997
  Re: Оптимизируются ли тривиальные операции? [re: DarkGray]
      19.11.2007 21:53
-2

Лингвистически такая конструкция выглядит странно. Что физически могло выполниться за треть такта? oO

DizzyDen
достаточно добр

Рег.: 04.03.2003
Сообщений: 51430
Из: http://лакалхвост
Рейтинг: 13545
  Re: Оптимизируются ли тривиальные операции? [re: LazyBehemoth]
      20.11.2007 12:47
1

Ты не поверишь - операция с вещественными аргументами! :ooo:



If stateless paradigm is good for your code, why shouldn't it be for your country?
LazyBehemoth

Рег.: 08.06.2006
Сообщений: 923
Рейтинг: 997
  Re: Оптимизируются ли тривиальные операции? [re: DizzyDen]
      20.11.2007 14:29
 

Ага ) В это точно не поверю :-D

Но я всегда думал, что такт задает наименьший промежуток между стационарными состояниями на процессоре. И только в этих состояниях ясно, что операция начала выполняться или выполнилась. Это не так?

Fj_
Carpal Tunnel

Рег.: 12.09.2004
Сообщений: 8795
Рейтинг: 3287
  Re: Оптимизируются ли тривиальные операции? [re: LazyBehemoth]
      20.11.2007 20:34
 

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

А хз. Тактовая частота == Clock frequency, то есть это частота центрального кварца на процессоре, не больше и не меньше. Разумеется, внутри процессора есть тыща умножителей и делителей частоты, которые синхронизируют разнообразные процессы, так что хотя некая корреляция между тактовой частотой и реальной латентностью операций есть, статуса закона у нее нет.

Моноид, конечно, прав, говоря, что понятие латентности (то есть минимального времени выполнения данной операции in respect to clock frequency на данном конкретном процессоре) вполне определено, наиболее соответствует неформальному определению "длительность операции" и у операции умножения на исследованных нами современных процах латентность вовсе не 1 такт. И, кстати, видимо меньше, чем у условного перехода. Окей, я был терминологически неправ!

Что касается усредненного времени, я теперь даже и не знаю. Я проверил - в том же коде дописывание if (k != 0) (я смотрел в листинг, ничего не отоптимизировалось) тоже параллелится с самим умножением (укладываясь в те же три такта, независимо от того, чему равно k). Пытаться построить сложный случай, чтобы выяснить, как джамп влияет на кэш инструкций и предсказатель переходов, мне влом.



The data is the error (c)IIS FTP Server.
blind
still alive

Рег.: 16.01.2004
Сообщений: 23129
Из: Хамовники
Рейтинг: 16483
  Re: Оптимизируются ли тривиальные операции? [re: Fj_]
      21.11.2007 00:46
2

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

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



13/37 =)
Страницы: 0 | 20 | 40 | 60 | показать все

Technical >> Development (Archive)

Дополнительная информация
2 зарегистрированных и 0 анонимных пользователей просматривают этот форум.

Модераторы:  DarkGray 

Печать темы

Права
      Вы можете создавать новые темы
      Вы можете отвечать на сообщения
      HTML отключен
      UBBCode включен

Рейтинг:
Просмотров темы:

Переход в