1 // This is brl/bbas/bocl/pro/processes/bocl_get_device_process.cxx 2 #include <iostream> 3 #include <fstream> 4 #include <sstream> 5 #include <bprb/bprb_func_process.h> 6 //: 7 // \file 8 // \brief A process for initializing a bocl manager 9 // 10 // \author Vishal Jain 11 // \date Mar 8, 2011 12 // \verbatim 13 // Modifications 14 // <none yet> 15 // \endverbatim 16 17 #ifdef _MSC_VER 18 # include "vcl_msvc_warnings.h" 19 #endif 20 #include <bocl/bocl_manager.h> 21 22 namespace bocl_get_device_process_globals 23 { 24 constexpr unsigned n_inputs_ = 1; 25 constexpr unsigned n_outputs_ = 1; 26 } 27 bocl_get_device_process_cons(bprb_func_process & pro)28bool bocl_get_device_process_cons(bprb_func_process& pro) 29 { 30 using namespace bocl_get_device_process_globals; 31 std::vector<std::string> input_types_(n_inputs_); 32 input_types_[0] = "vcl_string"; 33 34 std::vector<std::string> output_types_(n_outputs_); 35 output_types_[0] = "bocl_device_sptr"; 36 37 return pro.set_input_types(input_types_) 38 && pro.set_output_types(output_types_); 39 } 40 bocl_get_device_process(bprb_func_process & pro)41bool bocl_get_device_process(bprb_func_process& pro) 42 { 43 using namespace bocl_get_device_process_globals; 44 unsigned i=0; 45 std::string device_type = pro.get_input<std::string>(i++); 46 bocl_manager_child &mgr = bocl_manager_child::instance(); 47 48 if (device_type=="gpu" || device_type=="gpu0" ) 49 { 50 if (mgr.gpus_.size()==0) return false; 51 bocl_device_sptr device = mgr.gpus_[0]; 52 pro.set_output_val<bocl_device_sptr>(0,device); 53 std::cout<<"Using the following gpu device: \n" << *(device.ptr()); 54 return true; 55 } 56 else if (device_type=="cpu" || device_type=="cpu0") 57 { 58 if (mgr.cpus_.size()==0) return false; 59 bocl_device_sptr device = mgr.cpus_[0]; 60 pro.set_output_val<bocl_device_sptr>(0,device); 61 std::cout<<"Using the following cpu device: \n"<<*(device.ptr()); 62 return true; 63 } 64 65 //for multi-gpu setups 66 std::string dev = device_type.substr(0,3); 67 if (dev=="gpu") { 68 std::string str = device_type.substr(3, device_type.size()); 69 unsigned int gpuIdx; 70 std::istringstream ( str ) >> gpuIdx; 71 std::cout<<"Setting GPU device #: " << gpuIdx <<std::endl; 72 if (gpuIdx < mgr.gpus_.size()) { 73 bocl_device_sptr device = mgr.gpus_[gpuIdx]; 74 pro.set_output_val<bocl_device_sptr>(0,device); 75 std::cout<<*(device.ptr()); 76 return true; 77 } 78 } 79 80 //at this point, device cannot be recognized 81 std::cout<<"Cannot recognize device string. Available devices:\n"; 82 83 //list gpu options 84 std::cout<<" GPUs: "; 85 for (unsigned int i=0; i<mgr.gpus_.size(); ++i) 86 std::cout<<"gpu"<<i<<", "; 87 std::cout<<'\n'; 88 89 //list CPU options 90 std::cout<<" CPUs: "; 91 for (unsigned int i=0; i<mgr.cpus_.size(); ++i) 92 std::cout<<"cpu"<<i <<", "; 93 94 std::cout<<std::endl; 95 return false; 96 } 97