【发布时间】:2013-11-29 09:39:10
【问题描述】:
我在一个 OpenCL 文件中有 24 个内核,我很想知道它们在我的 Nvidia 卡上使用了多少个寄存器。 OpenCL 使用开关 "-cl-nv-verbose" 构建内核,并将构建日志写入文件。查询日志的大小并在堆栈上为其分配内存。获取日志并将其写入磁盘上的文件。所有 OpenCL 命令均已检查并成功完成。问题是构建日志的大小似乎被限制为 4097 字节。
// Get build log
size_t build_log_size;
clGetProgramBuildInfo(program, device, CL_PROGRAM_BUILD_LOG, 0, NULL, &build_log_size);
std::cout << "Size of Build log: " << build_log_size << std::endl;
char *build_log = (char*) alloca(build_log_size);
clGetProgramBuildInfo(program, device, CL_PROGRAM_BUILD_LOG, build_log_size, build_log, NULL);
// Write out build log
std::string build_log_string(build_log);
std::ofstream build_log_file(STR_BUILD_LOG);
if (!build_log_file.is_open()) {
std::cerr << "Could not open " << STR_BUILD_LOG << std::endl;
} else {
build_log_file << build_log_string;
}
build_log_file.close();
这是我在最后几行的构建日志中得到的内容:
Compiling entry function 'kernel12' for 'sm_30'
ptxas info : Function properties for kernel12
0 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info : Used 18 registers, 336 bytes cmem[0], 4 bytes cmem[2], 152 bytes cmem[3]
ptxas info : Compiling entry function 'kernel13' for 'sm_30'
ptxas info : Function properties for kernel13
0 bytes st
就是这样,它只是在 4KB 标记之后的 24 个总 24 个字节中的第 13 个内核处截断。我也尝试过为构建日志提供超过 200KB 的堆内存,但仍然只能得到有限的日志。根据 clinfo,我正在使用 Ubuntu 12.10 和 Geforce 680GTX OpenCL 驱动程序版本 304.88。是什么阻止我获取日志的其余部分?
【问题讨论】: