пример неправильного разворота цикла
Почему?! Да потому что образуется паразитная зависимость по данным. Процессор не может выполнять "+ p[a+1]" пока не завершится сложение crc с p[a+0] и вычислительный конвейер вынужден простаивать в ожидании!
В моей книге "техника оптимизации программ" (фрагменты которой можно скачать с ftp://nezumi.org.ru) описано множество трюков высокоуровневой оптимизации, основанных на архитектурных особенностях железа (DRAM-банков, контроллеров памяти, процессора), учет которых дает значительный выигрыш даже без использования ассемблера!