Код: Выделить всё
bool pop(int& val) {
const size_t write_index = (write_index_->value).load(); // 1 cache miss here
const size_t read_index = (read_index_->value).load();
if (read_index == write_index) {
return false;
}
val = *(data + read_index); // 1 cache miss here
size_t next = read_index + 1;
(read_index_->value).store(next);
return true;
}
При получении write_index.
При получении данных в read_index.
Я хочу оптимизировать это, чтобы уменьшить количество промахов в кеше. В идеале я хотел бы получить и write_index, и данные за один промах в кэше.
Я думал об использовании методов предварительной выборки, но не уверен, какой подход лучше всего подходит для этого сценария. .
Можно ли уменьшить количество промахов в кэше, одновременно извлекая и write_index, и данные read_index?
Существуют ли какие-либо конкретные стратегии размещения данных или соображения порядка памяти, которые могут помочь в минимизации промахов в кэше в этом контексте?
Подробнее здесь: https://stackoverflow.com/questions/787 ... nd-data-fe