Как и когда выравнивать размер строки кэша?C++

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

Сообщение Anonymous »

В превосходной ограниченной очереди mpmc Дмитрия Вьюкова, написанной на C++
См.: http://www.1024cores.net/home/lock-free ... mpmc-queue

Он добавляет несколько переменных-дополнителей. Я предполагаю, что это сделано для того, чтобы привести его в соответствие со строкой кэша для повышения производительности.

У меня есть несколько вопросов.
  • Почему это сделано именно так?
  • Это переносимый метод, который будет
    работать всегда
  • В каких случаях лучше всего использовать __attribute__
    ( (выровнено (64))) вместо этого.
  • почему заполнение перед указателем буфера может повысить производительность? разве в кеш не загружается просто указатель, так что на самом деле это всего лишь размер указателя?

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

    static size_t const     cacheline_size = 64;
    typedef char            cacheline_pad_t [cacheline_size];
    
    cacheline_pad_t         pad0_;
    cell_t* const           buffer_;
    size_t const            buffer_mask_;
    cacheline_pad_t         pad1_;
    std::atomic     enqueue_pos_;
    cacheline_pad_t         pad2_;
    std::atomic     dequeue_pos_;
    cacheline_pad_t         pad3_;
    
Будет ли эта концепция работать под gcc для кода C?

Подробнее здесь: https://stackoverflow.com/questions/846 ... -line-size
Ответить

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

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

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

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

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