Как уменьшить количество промахов в кэше в очереди SPSC, объединив выборку индекса и выборку данных?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как уменьшить количество промахов в кэше в очереди SPSC, объединив выборку индекса и выборку данных?

Сообщение Anonymous »

Я работаю над оптимизацией очереди Single Producer Single Consumer (SPSC) на C++. Текущая реализация моей функции pop выглядит следующим образом:

Код: Выделить всё

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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»