Pourquoi est-CUDA épinglé mémoire si vite?

J'observe substantielle de la vitesse de transfert de données lorsque j'utilise épinglé mémoire pour CUDA transferts de données. Sur linux, le système sous-jacent appel pour la réalisation de ce est mlock. À partir de la page de man de mlock, il indique que le verrouillage de la page, il l'empêche d'être permutée:

mlock() verrouille pages dans la plage d'adresses de départ à l'addr et continue pour len octets. Toutes les pages qui contiennent une partie de l'adresse spécifiée de la gamme sont garantis d'être résident en mémoire lors de l'appel retourne avec succès;

Dans mes tests, j'ai eu un fews concerts de libérer de la mémoire sur mon système, donc il n'y a jamais aucun risque que les pages de mémoire peut avoir été échangé pourtant, j'ai toujours observé le speedup. Quelqu'un peut-il expliquer ce qui se passe réellement ici?, toute réflexion ou de l'info, c'est très apprécié.

  • Avez-vous mesurer le temps de mlock lui-même?
  • Non, le temps réel d'exécution de la mlock appel est présumé être négligeable(si c'est ce que vous demandez). Le réel des frais généraux est le transfert des données réelles, ce qui dans mon algorithme est une fraction significative de la durée totale du cycle.
  • Qu'est-ce que votre CPU? Peut-être, NUMA-activé les nœuds ne bénéficiera pas de la simple mlock().
  • AMD Phenom(tm) II X4 970 Processeur