static boost::shared_ptr<parameter_cache> get_global_cache(const device &device) { // device name -> parameter cache typedef std::map<std::string, boost::shared_ptr<parameter_cache> > cache_map; BOOST_COMPUTE_DETAIL_GLOBAL_STATIC(cache_map, caches, ((std::less<std::string>()))); cache_map::iterator iter = caches.find(device.name()); if(iter == caches.end()){ boost::shared_ptr<parameter_cache> cache = boost::make_shared<parameter_cache>(device); caches.insert(iter, std::make_pair(device.name(), cache)); return cache; } else { return iter->second; } }
parameter_cache(const device &device) : m_dirty(false), m_device_name(device.name()) { #ifdef BOOST_COMPUTE_USE_OFFLINE_CACHE // get offline cache file name (e.g. /home/user/.boost_compute/tune/device.json) m_file_name = make_file_name(); // load parameters from offline cache file (if it exists) if(boost::filesystem::exists(m_file_name)){ read_from_disk(); } #endif // BOOST_COMPUTE_USE_OFFLINE_CACHE }
void print_device_info(device d) { cout << "Device id " << (cl_device_id)d << ": " << d.name() << endl; cout << " Compute units: " << d.compute_units() << endl; cout << " Max Sub-devices: " << d.max_subdevices() << endl; cout << " Address bits: " << d.address_bits() << endl; cout << " Global Cache Size: " << d.global_cache_size() << endl; cout << " Cacheline Size: " << d.global_cacheline_size() << endl; cout << " Global Memory Size: " << d.global_mem_size() << endl; cout << " Host-unified Memory: " << (d.host_unified_memory() ? "yes" : " no") << endl; cout << " Max Work Group Size: " << d.max_work_group_size() << endl; vector<size_t> s = d.max_work_item_dimensions(); cout << " Max Work Item Sizes: (" << s[0] << ", " << s[1] << ", " << s[2] << ")" << endl; cout << " Float Vector Width: " << d.native_float_vector_width() << endl; }