J'ai une carte Dual GPU nommée Titan Z. J'ai Matlab 2016a essayant de résoudre un ensemble d'équation Ax=b
clairsemé pour différentes valeurs 'b
'. Titan Z a deux GPU et 6 Go ram pour chaque GPUUtilisation de la mémoire Matlab Dual GPU
Voici le problème.
- Si je résous un problème
Ax=b
sur 1 GPU, disons une taille de matrice «A
» de 2 Go , copies Matlab cette matrice au VRAM de chaque GPU. rapports GPU-Z que chaque GPU dispose de 2 Go de données et seulement 1 GPU travaille - Si je résous deux problèmes
Ax=b
sur 2 GPU, disons que la taille de la matrice «A
» de 2 Go, Matlab encore des copies de cette matrice à chaque GPU vram deux fois. Maintenant GPU-Z rapporte que chaque GPU a 4 Go de données et que deux GPU fonctionnent simultanément. - Si j'essaye de résoudre un problème de '4GB' simultanément, le pilote de Nvidia se bloque en raison d'un Vram insuffisant. Mais je peux le résoudre sur un GPU. pas sur 2 GPU simultanément.
Le problème est des copies Matlab ces matrices deux fois, quand il est pas nécessaire, plus intéressant, il le fait lorsque deux GPU utilise exactement la même matrice « A
» mais différents vecteurs « b
».
Comment puis-je résoudre ce problème?
Pourriez-vous partager votre code? Utilisez-vous 'spmd' ou similaire? – Edric
C'est assez simple en fait. J'utilise gpuArray pour allouer et transférer et ensuite j'utilise la boucle parfor (i = 1: 2) pour résoudre l'ensemble d'équations. sur GPU. – coercion
Vous ne construisez donc pas 'gpuArray' dans la boucle' parfor'? Que se passe-t-il si vous construisez le 'gpuArray's dans' parfor'? – Edric