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