提交 39b5abd9 编写于 作者: L liuqi

Add lock at building program function.

上级 f07dd516
......@@ -48,8 +48,6 @@ bool SimpleNet::Run(RunMetadata *run_metadata) {
LOG(ERROR) << "Operator failed: " << ProtoDebugString(op->debug_def());
return false;
}
if (device_type_ == DeviceType::OPENCL)
OpenCLRuntime::Get()->command_queue().finish();
if (op_stats) {
op_stats->set_op_end_rel_micros(NowInMicroSec() -
op_stats->all_start_micros());
......
......@@ -104,9 +104,11 @@ cl::Device &OpenCLRuntime::device() { return device_; }
cl::CommandQueue &OpenCLRuntime::command_queue() { return command_queue_; }
cl::Program &OpenCLRuntime::program() {
// TODO(heliangliang) Support binary format
// TODO(liuqi) : useless, leave it for old code.
return program_;
}
// TODO(heliangliang) Support binary format
const std::map<std::string, std::string>
OpenCLRuntime::program_map_ = {
{"addn", "addn.cl"},
......@@ -162,6 +164,7 @@ cl::Kernel OpenCLRuntime::BuildKernel(const std::string &program_name,
}
std::string built_program_key = program_name + build_options_str;
std::lock_guard<std::mutex> lock(program_build_mutex_);
auto built_program_it = built_program_map_.find(built_program_key);
cl::Program program;
if (built_program_it != built_program_map_.end()) {
......
......@@ -45,6 +45,7 @@ class OpenCLRuntime {
cl::Device device_;
cl::CommandQueue command_queue_;
cl::Program program_;
std::mutex program_build_mutex_;
std::string kernel_path_;
static const std::map<std::string,
std::string> program_map_;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册