Мне нужен простой и переносимый способ явной предварительной выборки данных. Я не хочу использовать конкретную функцию какого-либо конкретного компилятора или платформы, просто нечто достаточно общее для работы на разных платформах и компиляторах.
Одно очень наивное решение, которое приходит на ум, - это просто переместить байт /int из памяти в регистр, что "должно" привести этот сегмент памяти в кеш процессора, чтобы заполнить строку, по крайней мере, это то, что я логически предполагаю. Но может быть, это будет не так просто? Одна из возможностей заключается в том, что компилятор должен оптимизировать работу, если эти данные не доступны в конкретной области, поэтому предварительная выборка не произойдет.
Вообще говоря, предварительная загрузка и загрузка памяти - это не совсем то же самое. Существует несколько принципиальных различий:
Поэтому просто придерживайтесь __builtin_prefetch
и дайте компилятору тяжелую работу.
Кроме того, имейте в виду, что оптимизаторы компиляторов могут автоматически генерировать инструкции предварительной выборки. Я думаю, если они это сделают, тогда вам нужно будет убедиться, что вы не вмешиваетесь в это.
Еще одна интересная вещь заключается в том, что, в общем, явная предварительная выборка не улучшает производительность, но немного снижает ее. См. Эту статью LWN для подробностей и объяснений, почему предварительная выборка была полностью удалена из ядра Linux.
Надеюсь, поможет. Удачи!