1 #ifndef VIENNACL_OCL_BACKEND_HPP_
2 #define VIENNACL_OCL_BACKEND_HPP_
34 template <
bool dummy = false>
44 current_context_id_ = i;
50 if (!initialized_[current_context_id_])
53 contexts_[current_context_id_].init();
55 std::vector<viennacl::ocl::device> devices = contexts_[current_context_id_].devices();
56 for (
size_t j = 0; j<devices.size(); ++j)
57 contexts_[current_context_id_].add_queue(devices[j]);
58 initialized_[current_context_id_] =
true;
64 return contexts_[current_context_id_];
79 std::vector<cl_device_id>
const & devices)
82 std::cerr <<
"ViennaCL: Warning in init_context(): Providing a list of devices has no effect, because context for ViennaCL is already created!" << std::endl;
86 for (
size_t j = 0; j<devices.size(); ++j)
87 contexts_[i].add_device(devices[j]);
100 std::vector<cl_device_id>
const & devices,
101 std::map< cl_device_id, std::vector< cl_command_queue > >
const & queues)
103 assert(devices.size() == queues.size() &&
"ViennaCL expects one queue per device!");
106 std::cerr <<
"ViennaCL: Warning in init_context(): Providing a list of devices has no effect, because context for ViennaCL is already created!" << std::endl;
110 for (
size_t j = 0; j<devices.size(); ++j)
111 contexts_[i].add_device(devices[j]);
114 contexts_[i].init(c);
117 typedef typename std::map< cl_device_id, std::vector< cl_command_queue > >::const_iterator queue_iterator;
118 for (queue_iterator qit = queues.begin();
122 std::vector<cl_command_queue>
const & queues_for_device = qit->second;
123 for (
size_t j=0; j<queues_for_device.size(); ++j)
124 contexts_[i].add_queue(qit->first, queues_for_device[j]);
127 initialized_[i] =
true;
138 static void setup_context(
long i, cl_context c, std::vector<cl_device_id>
const & devices, std::vector<cl_command_queue>
const & queue)
140 assert(devices.size() == queue.size() &&
"ViennaCL expects one queue per device!");
143 std::map< cl_device_id, std::vector<cl_command_queue> > queues_map;
144 for (
size_t j = 0; j<devices.size(); ++j)
145 queues_map[devices[j]].push_back(queue[j]);
153 contexts_[i].default_device_type(t);
157 static long current_context_id_;
158 static std::map<long, bool> initialized_;
159 static std::map<long, viennacl::ocl::context> contexts_;
162 template <
bool dummy>
163 long backend<dummy>::current_context_id_ = 0;
165 template <
bool dummy>
166 std::map<long, bool> backend<dummy>::initialized_;
168 template <
bool dummy>
169 std::map<long, viennacl::ocl::context> backend<dummy>::contexts_;
187 std::vector<cl_device_id>
const & devices)
195 std::vector<cl_device_id>
const & devices,
196 std::map< cl_device_id, std::vector<cl_command_queue> >
const & queues)
202 inline void setup_context(
long i, cl_context c, std::vector<cl_device_id>
const & devices, std::vector<cl_command_queue>
const & queues)
208 inline void setup_context(
long i, cl_context c, cl_device_id d, cl_command_queue q)
210 std::vector<cl_device_id> devices(1);
211 std::vector<cl_command_queue> queues(1);