влияние кратности разворота цикла на производительность на различных типах процессоров
Выполнить разворот цикла можно как на ассемблере (на 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;