2016-07-27 1 views
0

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.

  1. 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
  2. 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.
  3. 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?

+0

Pourriez-vous partager votre code? Utilisez-vous 'spmd' ou similaire? – Edric

+0

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

+0

Vous ne construisez donc pas 'gpuArray' dans la boucle' parfor'? Que se passe-t-il si vous construisez le 'gpuArray's dans' parfor'? – Edric

Répondre

0

Il est un peu tard répondre à ma propre question, mais voici la solution. La désactivation du mode multi-GPU dans le Panneau de configuration Nvidia a résolu le problème. Fondamentalement, il désactive le sli et gpus peut fonctionner indépendamment. C'était simple comme ça.