> Насколько мне известно, когда используешь SSE2 набор, то не > можешь использовать FPU. Иными словами, эта система > подкоманд использует FPU. Опять неверно. Это же вроде прописные истины. Так было в MMX.
Регистры MMX есть регистры FPU x87 поэтому одновременно использовать
MMX и FPU команды, мягко говоря, не рекомендуется. Да, и MMX функционально не использует FPU. Для него есть отдельный Execution Unit.
Вообще говоря, каюсь, MMX содержит операции на 64битными целыми, но с указаными выше ограничениям. Прелесть SSE2 - в их отсутствии и в том,
что можно делать одновременно 2 операции над 64битным целым или одну над 128битным, если это сдвиг. Это важная фича для RC5 на этапе key expansion.
> Далее, если все это правда > (народ, что скажете?), то 64 битная целая арифметика всегда > была частью FPU. Т.е. начиная с 486 любая IA 32 содержит 64 > битную целую арифметику. > Неправда. И вывод неверный. В FPU можно эмулировать целочисленное
сложение, умножение и деление если режим его работы округление к нулю.
Но как насчет сдвигов? А ротейтов? Не выйдет. Сразу же - делать одни
операции в FPU потом скидывать в память потом читать в целочисленный регистр делать сдвиг и абратно в FPU слишком дорого. Лучше эмуляция
через пару 32битных числа.
Для пущей честности, левый сдвиг на k бит можно эмулировать умножением на 2^k в вещественной арифметике, правый сдиг на k - умножением на 2^(-k) с последущим конвертацией результата к целому с округлением к нулю (truncate). Соответственно, rotate можно эмулировать 2 предыдущими командами и сложением их результата. Операции с парой 32битных чисел все равно гораздно быстрей.
И по чей-то злостной воле упорно блуждают абсурднейшие слухи о том, что в P4 нет аппаратной инструкции rotate. Хоть отдельный FAQ пиши на эту тему. ;-(( Есть она! ЕСТЬ!!!!!!!.
> А ты погляди на SuSE Linux - его уже портировали на Hammer. > Вместе со многими вещами. Кстати, по-моему, где-то на АМД > есть Билкины обещания насчет Hammer. Здесь только могу > добавить, что это только обещания. Я на это могу ответить, что MS Visual C до сих пор даже MMX-коды делать
не научился. Отсюда вывод, что вряд ли x86-64 набору больше повезет.
Что же касается ПодЛинукса, то все равно GCC не обеспечит нужной производительности и надо будет писать на ASM'e. До сих пор я не видел у АМД толкового мануала о том, как что-либо оптимизировать под их процы.
Он есть, но в нем написаны вещи типа - делай такую макро-операцию так-то, проц знает эту последовательность машинных команд и выполнит ее быстро. А насчет универсальных приемов с упором на архитектуру - НЕТ.
Если я делаю какие-то нестандартные операции, отличные от перевода целого числа в вещественное или подсчет количества ненулевых битов регистре, то я остаюсь в полном безвестном творческом пPолете.
|