Являются ли операции +,*, / одинаково трудоёмки на современных FPU?
Каким способом можно это оценить?открыть растактовку этих операций для современных процессоров
И убедиться, что время этих инструкций может зависеть от данных. Поэтому в таблицах указаны лишь интервалы.
я же написал - с плавающей точкой. если уж так хочется конкретики - то 80битные long double.
или имеется в виду что 2*5 и 4*200 будет выполняться разное количество тактов
А откуда берутся эти данные? Какие инструкции выполнялись перед рассматриваемой операцией? Были ли недавно переходы и были ли они предсказаны? Тут получается довольно многопараметрическая задачка, чтобы давать конкретный ответ. Поэтому и указывают интервалы.
На самом деле, как минимум деление само по себе зависит от значений аргументов.
Ну и 200 это еще по-божески, при пустом TLB наверное можно за тысячу тактов насчитать.
Поэтому в таблицах всегда указывается время выполнения команды при наиболее благоприятных условиях. Но даже при этом у fpu обычно указываются интервалы. Мне кажется, что не спроста.
+1, применительно к современным x86 процессорам говорить о цене той или иной команды ассемблера в отрыве от контекста и памяти бессмысленно.
http://www.agner.org/optimize/
если кратко, то * и + примерно одинаковы, а деление сильно хуже, по задержке раз в 6, по throughput — раз в 20-30
если интересно, можешь сходить сюда если кратко, то * и + примерно одинаковы, а деление сильно хуже, по задержке раз в 6, по throughput — раз в 20-30
насколько я помню с работы трехлетней давности, умножение и сложение конвееризируется, а деление нет.
/, мне кажется, в любом случае трудоемче.
Оставить комментарий
yolki
Чё-то у меня сомнения возникли.получается, что почти одинаковое время выполняется что сложение, что умножение. чуть-чуть (в два раза всего) отстаёт деление.
Каким способом можно это оценить?
//числа с плавающей точкой!