Индекс форумов |
Исходное сообщение |
---|
"Представлен GCC Exlorer, интерактивный компилятор на базе GC..." Отправлено solardiz, 25-Май-12 03:59 |
Я даже пошел по ссылке и глянул. Предположение, что дело в количестве операций над флагами мне видится странным (вряд ли на серьезном процессоре от Intel или AMD cmov* будет реализован на микрокоде или транслироваться в большое количество uop'ов - по идее, любой из cmov* должен на этих процессорах быть в железе и выполняться не более чем за один такт по throughput при отсутствии stall'ов). Более вероятным мне представляется, что один из вариантов условия более соответствовал конкретным входным данным, что, возможно, позволяло избежать data или output dependency stall (недавно измененный операнд оказывался невостребованным или же результат оставался неизменным) в большей части случаев. Если так, то это не то, что компилятор должен угадывать сам, без хотя бы profiler feedback'а. Если такая особенность данных закономерна (статистически таких наборов данных больше, чем "противоположных"), то вместо игр с a < b vs. b > a, которые не обязаны транслироваться именно в эти инструкции, может быть лучше использовать __builtin_expect() (сначала проверив на __GNUC__), чтобы передать совет компилятору явно. Ссылку на руководство от AMD тоже глянул - она почти не в тему - там только о том как cmov* лучше branch'ей. |
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования. |
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |