尝试查找打开的 CL 代码的运行时时出错
Error when trying to find the runtime of open CL code
我有一个探路者程序,我正在使用 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
提前致谢
您收到 linker 错误,而不是执行错误。
发生这种情况是因为您没有 link 您的应用程序具有提供 clock_gettime
功能的库(这个是 librt
)。
所以,你只需要 link 一个带有 -lrt
标志的库:
g++ -o pathfinder main.o OpenCL.o -L/opt/AMDAPP/lib/x86_64/ -lOpenCL -lrt
我有一个探路者程序,我正在使用 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
提前致谢
您收到 linker 错误,而不是执行错误。
发生这种情况是因为您没有 link 您的应用程序具有提供 clock_gettime
功能的库(这个是 librt
)。
所以,你只需要 link 一个带有 -lrt
标志的库:
g++ -o pathfinder main.o OpenCL.o -L/opt/AMDAPP/lib/x86_64/ -lOpenCL -lrt