Мне нужен простой и переносимый способ явной предварительной выборки данных. Я не хочу использовать конкретную функцию какого-либо конкретного компилятора или платформы, просто что-то общее, чтобы работать на разных платформах и компиляторах.Переносная явная предварительная выборка
Одно очень наивное решение, которое приходит на ум, просто перемещает байт/int из области памяти в регистр, что «должно» поднять этот сегмент памяти в кеш процессора, чтобы заполнить строку, по крайней мере, это то, что Я логически предполагаю. Но может быть, это будет не так просто? Одна из возможностей заключается в том, что компилятор должен оптимизировать работу, если эти данные не доступны в конкретной области, поэтому предварительная выборка не произойдет.
Вам нужно следить за тем, как компилятор оптимизирует вашу память, так как будет думать, что они ничего не делают. –
Нет никакого переносимого способа сделать это в c или C++, потому что нет гарантии, что вы компилируете собственный код на машине регистрации. например интерпретируется C++ - http://root.cern.ch/drupal/content/cling и компиляция в jvm - http://nestedvm.ibex.org – user1937198
'_mm_prefetch' должна быть достаточно переносимой. Вопреки тому, что говорит на странице MSDN, встроенные функции SSE не являются специфичными для Microsoft и доступны по крайней мере из нескольких наиболее популярных компиляторов (GCC, Clang, Intel, MSVC). – user2802841