Война миров - ассемблер против си

         

влияние кратности разворота цикла на производительность на различных типах процессоров


Выполнить разворот цикла можно как на ассемблере (на MASM'е за счет поддержки развитой системы макрокоманд он реализуется особенно легко), так и на… любом языке высокого уровня, действуя в обход компилятора.

После "ручной" оптимизации исходный текст нашей программы будет выглядеть так:

if ((a=n)>3)

       // обрабатываем первые n

– (n % 4) итераций

       for (a = 0; a < n - 3; a += 4)

       {

              crc_1 += p[a+0];

              crc_2 += p[a+2];

              crc_3 += p[a+3];

              crc_4 += p[a+4];

       }

// обрабатываем оставшийся "хвост"

for (a = n - x % 4; a < x; a++) crc += p[a];

// складываем все воедино

crc += crc_1 + crc_2 + crc_3 + crc_4;



Содержание раздела