Я думаю, что он просто генерирует одну FETCH
машинную инструкцию, которая в основном выбирает строковый кеш, размер которого зависит от процессора.
И вы можете использовать, например, __builtin_prefetch (con[i+3].Pfrom)
. По моему (небольшому) опыту, в таком цикле лучше заранее выбрать несколько элементов.
Не используйте __builtin_prefetch
слишком часто (т. Е. Не помещайте их много в цикл). Измерьте прирост производительности, если он вам нужен, и используйте оптимизацию GCC (не менее -O2
). Если вам очень повезет, ручное управление __builtin_prefetch
может увеличить производительность вашего цикла на 10 или 20% (но это также может повредить).
Если такой цикл имеет решающее значение для вас, вы можете рассмотреть возможность его запуска на графических процессорах с OpenCL или CUDA (но для этого требуется перекодировать некоторые подпрограммы на языке OpenCL или CUDA и настроить их на свое конкретное оборудование).
Используйте также недавний компилятор GCC (последний выпуск - 4.6.2 ), потому что он делает большой прогресс в этих областях.
(добавлено в январе 2018 года:)
Как аппаратные средства (процессоры), так и компиляторы достигли большого прогресса в отношении кешей, поэтому кажется, что использование __builtin_prefetch
сегодня менее полезно (в 2018 году). Обязательно бенчмарк.