2009-11-23 9 views
3

Je marchais à travers un code C/CUDA dans le débogueur, quelque chose comme:Les boucles avec et sans parenthèse sont-elles traitées différemment dans C?

for(uint i = threadIdx.x; i < 8379; i+=256) 
    sum += d_PartialHistograms[blockIdx.x + i * HISTOGRAM64_BIN_COUNT]; 

Et j'étais complètement confus parce que le débogueur passait en une seule étape, bien que la sortie était correcte. J'ai réalisé que lorsque je mettais des accolades autour de ma boucle comme dans l'extrait suivant, il se comportait dans le débogueur comme prévu.

for(uint i = threadIdx.x; i < 8379; i+=256) { 
    sum += d_PartialHistograms[blockIdx.x + i * HISTOGRAM64_BIN_COUNT]; 
} 

Il en est ainsi sont entre parenthèses sans pour les boucles traitées différemment en C ou dans le débogueur, ou peut-être il est particulièrement CUDA.

Merci

+0

Je suis juste curieux ... est-ce que les deux auront une différence de vitesse? –

Répondre

10

Le débogueur exécute une instruction à la fois. Check this out:

int sum = 0;       /* one assignment statement */ 
for (int k = 0; k < 10; k++) sum += k; /* one for statement */ 

et comparer avec ce

int sum = 0;       /* one assignment statement */ 
for (int k = 0; k < 10; k++) 
{          /* for statement with the body 
              in a block of statements */ 
    sum += k;       /* assignment statement */ 
} 

Dans le premier exemple ci-dessus, la sum += k fait partie intégrante de la déclaration for; Dans le deuxième exemple, il s'agit d'une déclaration complète en soi.

4

Il n'y a pas de différence d'exécution entre une instruction unique suivant le "for" ou un bloc contenant une instruction. En regardant votre code, réalisez-vous que je ne suis pas réellement incrémenté? Peut-être que vous vouliez mettre i + = 256. En ce qui concerne le débogueur, les parenthèses constituent quelque chose d'autre à "emménager" alors que la ligne simple est juste une ligne unique (comme une instruction if sans bloc).

+0

Désolé, c'était i + = 256, j'ai juste fait une erreur en copiant le code ici – zenna