Как и когда выравнивать размер строки кэша?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

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