Commit 01bdc51d authored by Joseph Noir's avatar Joseph Noir

changed logging from clBuildProgram

Only error is written to logfile, build log is written to cerr.
parent bd895ad3
...@@ -30,6 +30,7 @@ ...@@ -30,6 +30,7 @@
#include <vector> #include <vector>
#include <cstring> #include <cstring>
#include <iostream>
#include "cppa/opencl/program.hpp" #include "cppa/opencl/program.hpp"
#include "cppa/opencl/command_dispatcher.hpp" #include "cppa/opencl/command_dispatcher.hpp"
...@@ -61,34 +62,41 @@ program program::create(const char* kernel_source) { ...@@ -61,34 +62,41 @@ program program::create(const char* kernel_source) {
// build programm from program object // build programm from program object
err = clBuildProgram(pptr.get(), 0, nullptr, nullptr, nullptr, nullptr); err = clBuildProgram(pptr.get(), 0, nullptr, nullptr, nullptr, nullptr);
if (err != CL_SUCCESS) { if (err != CL_SUCCESS) {
cl_int bi_err{0};
device_ptr device_used(cppa::detail::singleton_manager:: device_ptr device_used(cppa::detail::singleton_manager::
get_command_dispatcher()-> get_command_dispatcher()->
m_devices.front().dev_id); m_devices.front().dev_id);
cl_build_status build_status; cl_build_status build_status;
err = clGetProgramBuildInfo(pptr.get(), bi_err = clGetProgramBuildInfo(pptr.get(),
device_used.get(), device_used.get(),
CL_PROGRAM_BUILD_STATUS, CL_PROGRAM_BUILD_STATUS,
sizeof(cl_build_status), sizeof(cl_build_status),
&build_status, &build_status,
nullptr); nullptr);
size_t ret_val_size; size_t ret_val_size;
err = clGetProgramBuildInfo(pptr.get(), bi_err = clGetProgramBuildInfo(pptr.get(),
device_used.get(), device_used.get(),
CL_PROGRAM_BUILD_LOG, CL_PROGRAM_BUILD_LOG,
0, 0,
nullptr, nullptr,
&ret_val_size); &ret_val_size);
std::vector<char> build_log(ret_val_size+1); std::vector<char> build_log(ret_val_size);
err = clGetProgramBuildInfo(pptr.get(), bi_err = clGetProgramBuildInfo(pptr.get(),
device_used.get(), device_used.get(),
CL_PROGRAM_BUILD_LOG, CL_PROGRAM_BUILD_LOG,
ret_val_size, ret_val_size,
build_log.data(), build_log.data(),
nullptr); nullptr);
build_log[ret_val_size] = '\0';
std::ostringstream oss; std::ostringstream oss;
if (ret_val_size <= 1) {
oss << "clBuildProgram: " << get_opencl_error(err) oss << "clBuildProgram: " << get_opencl_error(err)
<< ", build log: " << build_log.data(); << " (no build log available)";
}
else {
oss << "clBuildProgram: " << get_opencl_error(err);
build_log[ret_val_size - 1] = '\0';
std::cerr << build_log.data() << std::endl;
}
CPPA_LOGM_ERROR(detail::demangle<program>().c_str(), oss.str()); CPPA_LOGM_ERROR(detail::demangle<program>().c_str(), oss.str());
throw std::runtime_error(oss.str()); throw std::runtime_error(oss.str());
} }
...@@ -118,9 +126,13 @@ program program::create(const char* kernel_source) { ...@@ -118,9 +126,13 @@ program program::create(const char* kernel_source) {
ret_val_size, ret_val_size,
build_log.data(), build_log.data(),
nullptr); nullptr);
build_log[ret_val_size] = '\0'; if (ret_val_size > 1) {
CPPA_LOGM_DEBUG("program", "clBuildProgram build log: " CPPA_LOGM_ERROR(detail::demangle<program>().c_str(),
<< build_log.data()); "clBuildProgram: error");
build_log[ret_val_size - 1] = '\0';
std::cerr << "clBuildProgram build log:\n"
<< build_log.data() << std::endl;
}
# endif # endif
} }
return {cptr, pptr}; return {cptr, pptr};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment