Сравнение производительности с плавающей и целочисленной арифметикой на современных микросхемах

Рассмотрим декодер Витерби на аддитивной модели. Он тратит свое время на дополнения и сравнения. Теперь рассмотрим два: один с C / C ++ float в качестве типа данных, а другой с int. Ожидаете ли вы, что на современных микросхемах int будет работать значительно быстрее, чем float? Или чудеса конвейерной обработки (и отсутствие умножения и деления) уравняют все?


person bmargulies    schedule 06.01.2010    source источник
comment
Обычно я бы сказал, что вы должны измерить оба подхода и посмотреть, какой из них быстрее. Однако это более полезно / реалистично, если у вас есть доступ к процессорам, на которые вы хотите настроить таргетинг, или если у вас есть симуляторы для них.   -  person Chris Jester-Young    schedule 06.01.2010
comment
CPU у меня есть. Я надеялся, что кто-то другой был здесь для сопоставимых вычислений, прежде чем я возьмусь за свои измерения.   -  person bmargulies    schedule 06.01.2010


Ответы (1)


Зависит от того, что вы имеете в виду под словом значительно. Обычно я ожидаю, что ints будут работать примерно в 2 раза быстрее, но все зависит от того, что еще происходит. Современные процессоры, которые могут обрабатывать набор инструкций AMD64 (AMD / Core2), обычно могут эффективно выполнять 1 операцию с плавающей запятой за цикл , если они могут поддерживать конвейерную подачу

Также они обычно могут выполнять 2 или 3 целочисленных операции за одно и то же время. и даже может делать и то, и другое одновременно.

Но написать код, который останавливает конвейер, не так уж и сложно, вы должны избегать использования результата вычисления сразу после его завершения, иначе конвейер остановится, и вы получите больше, чем 3 цикла на умножение, а не 1.

Инструкции на цикл для PowerPC в большинстве случаев такие же или лучше, чем у AMD / Intel.

Дополнение:

Кстати, вы можете обнаружить, что сравнения (или, скорее, ветви, которые подразумевают сравнения) в конечном итоге обходятся намного дороже, чем добавления. неверно предсказанные ответвления обходятся дорого, особенно на процессоре Pentium 4.

person John Knoeller    schedule 06.01.2010
comment
Некоторые компиляторы реализуют сравнения с использованием инструкций SETcc, а не инструкций Jcc, и в этом случае ветвление не выполняется, и вы не получаете штраф за неправильное предсказание ветвления. - person Chris Jester-Young; 09.01.2010