我正在尝试使用google benchmark对一些 CUDA 代码进行基准测试。首先,我没有编写任何 CUDA 代码,只是想确保我可以对使用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();
我编译:
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
我已经明确指出nvcc
并使用g++-4.9
并重现了两个版本的问题。g++-4.8
-ccbin g++-4.x
g++
这里有什么明显的错误吗?如何解决问题?
如果重要的话,我使用的是 Ubuntu 17.04 和 NVIDIA 驱动程序版本 375.82。
更新:我安装g++-5
了,核心转储消失了。