J'observe des accélérations substantielles dans le transfert de données lorsque j'utilise la mémoire épinglée pour les transferts de données CUDA. Sous Linux, l'appel système sous-jacent pour y parvenir est mlock. Dans la page de manuel de mlock, il est indiqué que le verrouillage de la page empêche sa sortie par swapping :
mlock() verrouille les pages dans la plage d'adresses commençant à addr et continuant sur len octets. Toutes les pages qui contiennent une partie de la plage d'adresses spécifiée sont garanties d'être résidentes en RAM lorsque l'appel revient avec succès ;
Lors de mes tests, j'avais quelques gigaoctets de mémoire libre sur mon système, il n'y avait donc aucun risque que les pages de mémoire puissent être échangées, mais j'ai quand même observé une accélération. Quelqu'un peut-il m'expliquer ce qu'il se passe réellement ici ? toute idée ou information est la bienvenue.
0 votes
Avez-vous mesuré le temps du mlock lui-même ?
0 votes
Non, le temps réel pris pour exécuter l'appel mlock est supposé être négligeable (si c'est ce que vous demandez). Le véritable surcoût est le transfert de données réel, qui, dans mon algorithme, représente une fraction significative du temps de cycle total.
0 votes
Quelle est votre unité centrale ? Peut-être que les nœuds compatibles NUMA ne bénéficieront pas d'un traitement simple.
mlock()
.0 votes
Processeur AMD Phenom(tm) II X4 970