2017-10-11 8 views
-2

私はgoogle benchmarkを使っていくつかのCUDAコードをベンチマークしようとしています。はじめに、私はCUDAコードを書いておらず、nvccでコンパイルされたホスト関数をベンチマークできることを確認したいだけです。私はプログラムを実行すると、私は次のエラーを取得するベンチマークCUDA with googlebenchmarkコアダンプ

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

./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 

私はg++-4.9g++-4.8nvccを明示的に指摘しているmain.cuでは私が使用してコンパイル

#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(); 

を持っています-ccbin g++-4.xを使用して、g++の両方のバージョンで問題を再現しました。

明らかに間違っていますか?どのようにして問題を解決できますか?

私はUbuntu 17.04とNVIDIAドライババージョン375.82を使用しています。

アップデートg++-5をインストールしました。コアダンプが消えました。

+0

nvccではなくg ++でコードを直接コンパイルすると、コアダンプが発生しますか? – talonmies

+0

いいえ、そうではありません。私はg ++ - 5を使ってコアダンプをしないので閉じようとしています。 – user14717

+0

私はこの質問を閉じるつもりですが、Ubuntu 17.でnvcc + gcc-4 segfaultsを知っている人には全く役に立たないわけではありません。 。あなたの意見を理解してください。 – user14717

答えて

-2

このエラーは、あなたが何かを壊したか、破損したメモリゾーンにアクセスしている(スタック制限を超えて再帰が多すぎる)ことを意味します。

Valgrindやお気に入りのIDEデバッガなどの無料ツールを使用して、これが起こっている理由とその理由をヒントしてください。

関連する問題