Grid3D Pb Parralèlisme - CUDA - GTX690

Grid3D Pb Parralèlisme - CUDA - GTX690 - C++ - Programmation

Marsh Posté le 03-07-2013 à 08:30:09    

Bonjour,
 
j'exécute un ptit program en cuda pour tester le parallèlisme des calcules ...
Je suis en grid 3D et sur une instruction simple, je lance de plus en plus de threads
 
Voilà mes résultats :
-Block(16,16,1) et Thread(32,32,1) -> 16 * 16 * 1 * 1024 = 262144 Threads, ce qui me donne 20 ms d'execution
-Block(16,16,2) et Thread(32,32,1) -> 16 * 16 * 2 * 1024 = 524288 Threads, ce qui me donne 40 ms d'execution
-Block(16,16,3) et Thread(32,32,1) -> 16 * 16 * 3 * 1024 = 786432 Threads, ce qui me donne 60 ms d'execution
-Block(16,16,4) et Thread(32,32,1) -> 16 * 16 * 4 * 1024 = 1048576 Threads, ce qui me donne 80 ms d'execution
 
et je me prend 20 ms à chaque fois que j'augmente le block.z
 
Ma carte est une GTX 690 avec 1536 Cuda Cores par GPU (DUAL), mono utilisation pour le moment.  
 
Chacun de mes blocks sont donc composés par 32*32 Threads, excuté pas en même temps (par Warp)
 
Voilà mes questions,  
quelle est la correlation entre Cuda Core et Thread ?  
quel est le facteur limitant ?
Pourquoi ce traitement séquentiel au niveau des blocks ? mes cores seraient déjà saturé ?
 
Merci pour vos réponses.
 
voilà la méthode globale :
 

Code :
  1. __global__ void computeDetection(int numberAircraft, int *deviceArrayC)
  2.  {
  3.   int indiceSlave = blockDim.y * blockIdx.y + threadIdx.y;
  4.   int indiceMaster = blockDim.x * blockIdx.x + threadIdx.x;
  5.   int indiceSample = blockIdx.z;
  6.   int localIdx = indiceMaster * numberAircraft + indiceSlave;
  7.   if (indiceMaster <= indiceSlave)
  8.    return;
  9.   if (indiceMaster > numberAircraft)
  10.    return;
  11.   deviceArrayC[localIdx] = -1;
  12.   int tmp = 10000;
  13.   for (int indVolumeMaster = 0; indVolumeMaster < 364; indVolumeMaster++)
  14.   {
  15.    for (int indVolumeSlave = 0; indVolumeSlave < 364; indVolumeSlave++)
  16.    {
  17.     tmp = (tmp < indVolumeSlave) ? tmp : indVolumeSlave;
  18.    }
  19.   }
  20.   deviceArrayC[localIdx * 120 + indiceSample] = tmp;
  21.  }


Message édité par jojoa69 le 03-07-2013 à 08:31:03
Reply

Marsh Posté le 03-07-2013 à 08:30:09   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed