【问题标题】:Error when trying to find the runtime of open CL code尝试查找打开的 CL 代码的运行时时出错
【发布时间】:2015-07-22 12:58:52
【问题描述】:

我有一个探路者程序,我正在使用 clock_gettime() 函数来发现这个特定代码部分的运行时间。但是,当我尝试执行代码时,我收到一个错误,我不确定如何修复。非常感谢任何建议。

struct timespec start, stop;
double accum;

if( clock_gettime( CLOCK_REALTIME, &start) == -1 ) {
  perror( "clock gettime" );
  exit( EXIT_FAILURE );
}

int src = 1, final_ret = 0;
for (int t = 0; t < rows - 1; t += pyramid_height)
{
    int temp = src;
    src = final_ret;
    final_ret = temp;

    // Calculate this for the kernel argument...
    int arg0 = MIN(pyramid_height, rows-t-1);
    int theHalo = HALO;

    // Set the kernel arguments.
    clSetKernelArg(cl.kernel(kn), 0,  sizeof(cl_int), (void*) &arg0);
    clSetKernelArg(cl.kernel(kn), 1,  sizeof(cl_mem), (void*) &d_gpuWall);
    clSetKernelArg(cl.kernel(kn), 2,  sizeof(cl_mem), (void*) &d_gpuResult[src]);
    clSetKernelArg(cl.kernel(kn), 3,  sizeof(cl_mem), (void*) &d_gpuResult[final_ret]);
    clSetKernelArg(cl.kernel(kn), 4,  sizeof(cl_int), (void*) &cols);
    clSetKernelArg(cl.kernel(kn), 5,  sizeof(cl_int), (void*) &rows);
    clSetKernelArg(cl.kernel(kn), 6,  sizeof(cl_int), (void*) &t);
    clSetKernelArg(cl.kernel(kn), 7,  sizeof(cl_int), (void*) &borderCols);
    clSetKernelArg(cl.kernel(kn), 8,  sizeof(cl_int), (void*) &theHalo);
    clSetKernelArg(cl.kernel(kn), 9,  sizeof(cl_int) * (cl.localSize()), 0);
    clSetKernelArg(cl.kernel(kn), 10, sizeof(cl_int) * (cl.localSize()), 0);
    clSetKernelArg(cl.kernel(kn), 11, sizeof(cl_mem), (void*) &d_outputBuffer);
    cl.launch(kn);
}

if( clock_gettime( CLOCK_REALTIME, &stop) == -1 ) {
  perror( "clock gettime" );
  exit( EXIT_FAILURE );
}

我收到的错误:

-bash-4.1$ make
g++ -I/opt/AMDAPP/include/  -c -g main.cpp OpenCL.cpp
g++ main.o OpenCL.o -L/opt/AMDAPP/lib/x86_64/ -lOpenCL -o pathfinder
main.o: In function `main':
/home/others/natasha/sac/rodinia_3.0/opencl/pathfinder/main.cpp:149: undefined reference to `clock_gettime'
/home/others/natasha/sac/rodinia_3.0/opencl/pathfinder/main.cpp:181: undefined reference to `clock_gettime'
collect2: ld returned 1 exit status
make: *** [a.out] Error 1

提前致谢

【问题讨论】:

  • C 不是 C++ 不是 C!
  • 道歉我不是故意点击错误的标签
  • 那你为什么回滚我的编辑?您应该知道您的代码是 C++,而不是 C!

标签: c++ time clock


【解决方案1】:

您得到的是链接器错误,而不是执行错误。 发生这种情况是因为您没有将应用程序与提供clock_gettime 函数的库链接(这个是librt)。 所以,你只需要用-lrt 标志再链接一个库:

g++ -o pathfinder main.o OpenCL.o -L/opt/AMDAPP/lib/x86_64/ -lOpenCL -lrt

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-28
    • 2014-06-06
    • 2022-10-05
    • 2014-05-13
    • 1970-01-01
    • 2020-01-13
    • 1970-01-01
    相关资源
    最近更新 更多