Message d’erreur CUDA: échec de lancement non spécifié

Cela fait partie de mon code CUDA. Mais la dernière partie de ce code indique un message d’erreur.

unsigned int *mat_count; off_t *mat_position; unsigned int *matches_count; off_t *matches_position; ...... cudaMalloc ( (void **) &mat_count, sizeof(unsigned int)*10); cudaMalloc ( (void **) &mat_position, sizeof(off_t)*10); ...... matches_count = (unsigned int *)malloc(sizeof(unsigned int)*10); matches_position = (off_t *)malloc(sizeof(off_t)*10); for ( i = 0 ; i < 10 ; i++ ) { matches_count [i] = 0; matches_position[i] = 0; } ...... cudaMemcpy (mat_count, matches_count , sizeof(unsigned int)*10, cudaMemcpyHostToDevice ); cudaMemcpy (mat_position, matches_position, sizeof(off_t)*10, cudaMemcpyHostToDevice ); ...... match<<>>( reference_total, indextable_total, sequences, start_sequence, sequence_length, end_sequence, ref_base, idx_base, msk_base, mat_count, mat_position, reference, first_indexes, seqmaskc ); err=cudaGetLastError(); if(err!=cudaSuccess) { printf("\n1 %s\n", cudaGetErrorSsortingng(err)); } err= cudaMemcpy (matches_count , mat_count, sizeof(unsigned int)*10, cudaMemcpyDeviceToHost ); if(err!=cudaSuccess) { printf("\n2 %s\n", cudaGetErrorSsortingng(err)); } err= cudaMemcpy (matches_position, mat_position, sizeof(off_t)*10, cudaMemcpyDeviceToHost ); if(err!=cudaSuccess) { printf("\n3 %s\n", cudaGetErrorSsortingng(err)); } 

La partie de code suivante avait signalé ce message d’erreur “échec de lancement non spécifié”. Je ne sais pas pourquoi ce message d’erreur est signalé.

 err=cudaMemcpy (matches_position, mat_position, sizeof(off_t)*10, cudaMemcpyDeviceToHost ); if(err!=cudaSuccess) { printf("\n3 %s\n", cudaGetErrorSsortingng(err)); } 

Les éléments suivants font partie de la fonction match.

 __global__ void match(...) { ...... reference_blk = (THR_SIZE * blockIdx.x + threadIdx.x) * 32 + reference; ...... //-- added for parallize --// for (p = start_p ; p != last_p ; p++) { for ( s = start_sequence, sequence = sequences ; s != end_sequence ; s++, sequence += sequence_bytes ) { ref_off = *(((unsigned int*)(idx_base)) + p); shifted_in = 0; if((int)(first_indexes[s-start_sequence] % 8 - ref_off % 8) > shamt2; if( ( (*(unsigned long *)(seqmaskc + 16 * (s-start_sequence))) ^ mask_buffer ) <> shamt2; if( ( (*(unsigned long *)(seqmaskc + 16 * (s-start_sequence))) ^ mask_buffer ) << shamt2) continue; } //full compare if((int)(first_indexes[s-start_sequence] % 4 - ref_off % 4) < 0){ int shamt = (ref_off % 4 - first_indexes[s-start_sequence] % 4) * 2; memcpy(reference_blk, ref_base + ref_off / 4 - first_indexes[s-start_sequence] / 4, sequence_bytes); ...... //-- instead of memcmp --// int v = 0; char *p1 = (char *)sequence; char *p2 = (char *)reference_blk; int tmp_asd = sequence_bytes; while(tmp_asd!=0){ v = *(p1++) - *(p2++); if(v!=0) break; tmp_asd--; } if(v == 0){ mat_count[s - (int)start_sequence]++; /* Maintain count */ mat_position[s - (int)start_sequence] = ref_off-first_indexes[s-start_sequence]; /* Record latest position */ } } else if((int)(first_indexes[s-start_sequence] % 4 - ref_off % 4 )== 0){ memcpy(reference_blk, ref_base + ref_off / 4 - first_indexes[s-start_sequence] / 4, sequence_bytes); ....... //-- instead of memcmp --// int v = 0; char *p1 = (char *)sequence; char *p2 = (char *)reference_blk; int tmp_asd = sequence_bytes; while(tmp_asd!=0){ v = *(p1++) - *(p2++); if(v!=0) break; tmp_asd--; } if(v == 0){ mat_count[s - (int)start_sequence]++; /* Maintain count */ mat_position[s - (int)start_sequence] = ref_off-first_indexes[s-start_sequence]; /* Record latest position */ } } else { int shamt = 8 - (first_indexes[s-start_sequence] % 4 - ref_off % 4) * 2; memcpy(reference_blk, ref_base + ref_off / 4 - first_indexes[s-start_sequence] / 4 - 1, 32); ...... //-- instead of memcmp --// int v = 0; char *p1 = (char *)sequence; char *p2 = (char *)reference_blk; int tmp_asd = sequence_bytes; while(tmp_asd!=0){ v = *(p1++) - *(p2++); if(v!=0) break; tmp_asd--; } if (v == 0){ mat_count[s - (int)start_sequence]++; /* Maintain count */ mat_position[s - (int)start_sequence] = ref_off-first_indexes[s-start_sequence];/* Record latest position */ } } } } 

}

Un échec de lancement non spécifié est presque toujours une erreur de segmentation. Vous avez une erreur d’indexation quelque part dans votre kernel, probablement lors de l’access à la mémoire globale.

Je regarderais dans votre code, mais c’est légèrement incompréhensible …

Comstackz votre application avec les indicateurs de débogage nvcc -G -g et essayez de l’exécuter dans cuda-memcheck ou cuda-gdb . Cela pourrait vous donner une idée du problème.

Il suffit de courir

 cuda-memcheck ./yourApp