Présentation de cuda-checkpoint
La fonctionnalité de checkpoint de CUDA, fournie par le pilote fermé de NVIDIA, permet de figer un processus CUDA en cours d'exécution, de sérialiser son état de la mémoire GPU dans la mémoire hôte et de le restaurer plus tard sur la GPU exactement dans son état précédent.
Fonctionnement de cuda-checkpoint
Le processus de checkpoint implique plusieurs étapes, notamment la création d'un état de sauvegarde de la mémoire GPU du processus cible. L'outil cuda-checkpoint utilise une machine à états pour gérer ces étapes. La commande cuda-checkpoint --action lock déplace le processus de l'état en cours d'exécution à l'état verrouillé, puis cuda-checkpoint --action checkpoint le déplace de l'état verrouillé à l'état de sauvegarde.
cuda-checkpoint --action lock --pid $P
cuda-checkpoint --action checkpoint --pid $P
En utilisant des outils tels que strace et nvidia-smi, on peut observer que l'état de sauvegarde est stocké dans une zone de mémoire anonyme du processus, qui peut être inspectée et modifiée directement.
Implications et limites de cuda-checkpoint
La compréhension du fonctionnement interne de cuda-checkpoint permet d'optimiser les performances et de réduire les temps de démarrage des applications qui utilisent cette fonctionnalité. Cependant, les limitations de cette fonctionnalité, telles que la nécessité d'un accès direct à la mémoire du processus cible, doivent être prises en compte pour une utilisation efficace.
strace -f -e trace=openat,read,write cuda-checkpoint --action checkpoint --pid $P
Les résultats montrent que l'outil cuda-checkpoint utilise des appels système pour interagir avec le processus cible et extraire son état de mémoire GPU, mais les détails précis de cette interaction restent dans le code source fermé du pilote NVIDIA.