103 : cl_buffer(b), flag(f),
size(s){}
125 cl_ulong max_buffer_size;
126 cl_ulong memory_size;
127 cl_ulong used_memory;
133 : cl_device(d), cl_context(c), cl_queue(q), used_memory(0)
135 cl_device.
getInfo(CL_DEVICE_NAME, &name);
136 cl_device.
getInfo(CL_DEVICE_VENDOR, &vendor);
137 cl_device.
getInfo(CL_DEVICE_TYPE, &type);
138 cl_device.
getInfo(CL_DEVICE_MAX_MEM_ALLOC_SIZE, &max_buffer_size);
139 cl_device.
getInfo(CL_DEVICE_GLOBAL_MEM_SIZE, &memory_size);
142 cl::Program buildProgram(
const std::string& file_name, kernel_flag flag);
143 void buildKernel(
const std::string& kernel_name,
const cl::Program& cl_program);
146 template <
typename T>
147 cl_int setArg(
cl::Kernel& cl_kernel, cl_uint pos,
const T
arg)
149 return cl_kernel.setArg( pos,
arg );
154 void setArguments(
cl::Kernel& cl_kernel, cl_uint pos)
159 template <
typename T,
typename... Ts>
160 void setArguments(
cl::Kernel& cl_kernel, cl_uint pos,
const T&
arg,
const Ts&... arguments)
162 cl_int err = setArg(cl_kernel, pos,
arg);
164 checkError(err,
"Error setting the kernel argument with index " << pos);
165 setArguments(cl_kernel, pos+1, arguments...);
171 void createBuffer(
const std::string& key, buffer_flag flag,
size_t size);
173 void writeBuffer(
const std::string& key,
size_t size,
const void* source_ptr);
175 void readBuffer(
const std::string& key,
size_t size,
void* source_ptr);
177 void deleteBuffer(
const std::string& key);
180 void createKernel(
const std::string& kernel_name,
const std::string& file_name, kernel_flag flag);
183 void deleteKernel(
const std::string& key);
186 template <
typename... Ts>
187 void runKernel(
const std::string& key,
const NDRange& global,
const NDRange& local,
const Ts&... arguments)
189 const auto& result = kernel_map.
find(key);
190 if (result == kernel_map.
end())
192 raiseError(
"Kernel \"" << key <<
"\" not found!!");
196 cl::Kernel cl_kernel((kernel_map[key]).cl_kernel);
197 setArguments(cl_kernel, 0, arguments...);
199 cl_int err = cl_queue.enqueueNDRangeKernel(cl_kernel, NullRange, global, local);
201 checkError(err,
"Error running the kernel " << key);
204 err = cl_queue.
flush();
205 checkError(err,
"Error during the flush operation");
209 void finishKernels(){
210 cl_int err = cl_queue.finish();
211 checkError(err,
"Error during the finish operation");
217 cl_int Device::setArg<const char*>(
cl::Kernel& cl_kernel, cl_uint pos,
const char* key);
220 cl_int Device::setArg<std::string>(
cl::Kernel& cl_kernel, cl_uint pos, std::string key);
259 high_resolution_clock::time_point time;
265 time = high_resolution_clock::now();
270 time = high_resolution_clock::now();
274 double stop(icl::time_flag time_flag = icl::MILLI)
276 duration += (high_resolution_clock::now() - time);
283 value = duration_cast<microseconds>(
duration).count();
286 value = duration_cast<milliseconds>(
duration).count();
289 value = duration_cast<seconds>(
duration).count();