2017-10-11 12 views
-2

J'essaie d'étalonner du code CUDA en utilisant google benchmark. Pour commencer, je n'ai pas écrit de code CUDA, et je veux juste m'assurer que je peux comparer une fonction hôte compilée avec nvcc. En main.cu jeBenchmarking CUDA avec des décharges de base de googlebenchmark

#include <benchmark/benchmark.h> 

size_t fibr(size_t n) 
{ 
    if (n == 0) 
    return 0; 

    if (n == 1) 
    return 1; 

    return fibr(n-1)+fibr(n-2); 
} 

static void BM_FibRecursive(benchmark::State& state) 
{ 
    size_t y; 
    while (state.KeepRunning()) 
    { 
     benchmark::DoNotOptimize(y = fibr(state.range(0))); 
    } 
} 

BENCHMARK(BM_FibRecursive)->RangeMultiplier(2)->Range(1, 1<<5); 

BENCHMARK_MAIN(); 

Je compilez avec:

nvcc -g -G -Xcompiler -Wall -Wno-deprecated-gpu-targets --std=c++11 main.cu -o main.x -lbenchmark 

Quand je lance le programme, je reçois l'erreur suivante:

./main.x 
main.x: malloc.c:2405: sysmalloc: Assertion `(old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0)' failed. 
[1] 11358 abort (core dumped) ./main.x 

J'ai explicitement souligné nvcc à g++-4.9 et g++-4.8 en utilisant -ccbin g++-4.x et ont reproduit le problème avec les deux versions de g++.

Y at-il quelque chose qui cloche ici? Comment le problème peut-il être résolu?

Je suis sur Ubuntu 17.04 et la version du pilote NVIDIA 375.82, si c'est important.

Mise à jour: J'ai installé g++-5 et la mémoire principale s'est envolée.

+0

Si vous compilez le code directement avec g ++ plutôt que nvcc, est-ce que le vidage du noyau se produit? – talonmies

+0

Non, ce n'est pas le cas. Je vais fermer car il ne fait pas core dump en utilisant g ++ - 5. – user14717

+0

Je suis prêt à fermer cette question, mais il n'est pas totalement inutile pour les gens de savoir que nvcc + gcc-4 segfaults sur Ubuntu 17.. . Lemme connaître votre opinion. – user14717

Répondre

-2

Presque 99% du temps, cette erreur signifie que vous avez cassé quelque chose ou que vous accédez à des zones de mémoire corrompues (ou même que trop de récursivité dépassait la limite de la pile).

Utilisez des outils gratuits comme Valgrind ou votre débogueur IDE préféré pour obtenir un indice sur l'origine de ce problème et pourquoi.