Quand et comment aligner sur la ligne de mémoire cache taille?

Dans Dmitry Vyukov excellent délimitée mpmc file d'attente écrit en C++
Voir: http://www.1024cores.net/home/lock-free-algorithms/queues/bounded-mpmc-queue

Il en ajoute un rembourrage variables. Je présume que c'est pour s'aligner à une ligne de cache pour la performance.

J'ai quelques questions.

  1. Pourquoi est-il fait de cette façon?
  2. Est-il un portable méthode de
    toujours travailler
  3. Dans ce cas, il serait préférable d'utiliser __attribute__
    ((aligned (64)))
    à la place.
  4. pourquoi serait-rembourrage avant un pointeur de tampon aider avec l'exécution? ce n'est pas seulement le pointeur chargés dans le cache donc, c'est vraiment de la taille d'un pointeur?

    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<size_t>     enqueue_pos_;
    cacheline_pad_t         pad2_;
    std::atomic<size_t>     dequeue_pos_;
    cacheline_pad_t         pad3_;

Serait-ce le concept de travail en vertu de la gcc pour du code c?

InformationsquelleAutor Matt | 2011-12-12