私は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.9
とg++-4.8
にnvcc
を明示的に指摘している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
をインストールしました。コアダンプが消えました。
nvccではなくg ++でコードを直接コンパイルすると、コアダンプが発生しますか? – talonmies
いいえ、そうではありません。私はg ++ - 5を使ってコアダンプをしないので閉じようとしています。 – user14717
私はこの質問を閉じるつもりですが、Ubuntu 17.でnvcc + gcc-4 segfaultsを知っている人には全く役に立たないわけではありません。 。あなたの意見を理解してください。 – user14717