Являются ли операции +,*, / одинаково трудоёмки на современных FPU?

yolki

Чё-то у меня сомнения возникли.
получается, что почти одинаковое время выполняется что сложение, что умножение. чуть-чуть (в два раза всего) отстаёт деление.
Каким способом можно это оценить?
//числа с плавающей точкой!

Dasar

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

SPARTAK3959

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

yolki

всмысле?
я же написал - с плавающей точкой. если уж так хочется конкретики - то 80битные long double.
или имеется в виду что 2*5 и 4*200 будет выполняться разное количество тактов :confused:

tamusyav

А откуда берутся эти данные? Какие инструкции выполнялись перед рассматриваемой операцией? Были ли недавно переходы и были ли они предсказаны? Тут получается довольно многопараметрическая задачка, чтобы давать конкретный ответ. Поэтому и указывают интервалы.

ppplva

Этак у тебя получатся весьма широкие интервалы. Например, сложение выполняется от 1 такта, до 200 (если данных в кеше нет). Умножение - от 3 (условно) до 200, и т.д. :grin:
На самом деле, как минимум деление само по себе зависит от значений аргументов.

ppplva

Ну и 200 это еще по-божески, при пустом TLB наверное можно за тысячу тактов насчитать.

SPARTAK3959

А еще fpu операция может вызвать исключение, что может привести к переключению процессов. Это где-то еще сотня тактов. :grin:
Поэтому в таблицах всегда указывается время выполнения команды при наиболее благоприятных условиях. Но даже при этом у fpu обычно указываются интервалы. Мне кажется, что не спроста.

vall

+1, применительно к современным x86 процессорам говорить о цене той или иной команды ассемблера в отрыве от контекста и памяти бессмысленно.

dron124

если интересно, можешь сходить сюда http://www.agner.org/optimize/
если кратко, то * и + примерно одинаковы, а деление сильно хуже, по задержке раз в 6, по throughput — раз в 20-30

rosali

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

apl13

/, мне кажется, в любом случае трудоемче.
Оставить комментарий
Имя или ник:
Комментарий: