[an error occurred while processing this directive]
|
Я бы так однозначно не сказал бы про проигрыш (в части 64/67). Для 55 вообще ничего не скажу - не писал на С. Про 67/64 - там оптимизатор компилятора во многих случаях очень хорошо делает циклические структуры, особенно если применять intrinsic'и. Все дело в программной конвейеризации и распараллеливании задачи на 8 фугкциональных блоков. Система такая - если не устраивает код, сгенеренный из С при условии "правильного писания", то следует переход на линейный ассемблер. Если линейный ассемблер не дает желаемого (а сам чувствуешь, что тут можно еще взять) - то следует переход на параллельный ассемблер с последующим закипанием мозгов от 8-ми параллельных инструкций. И при писании вручную обычно ориентируешься на результат С или линейного асма.
А вот в линейном коде (без циклов) С компилер проигрывает ручной кодировке на параллельном асме от 2 до 6 раз примерно.
Честно говоря, если бы я интересовался умением оптимизировать на 6000 асме, то попросил бы... Написать функцию memcpy. Должно получиться 1 такт на одну пересылку. плюс общей оверхид на кажется 5 тактов. Но для этого надо самому хорошо разбираться в ассемблере этих монстров.
E-mail: info@telesys.ru