void vl2_init_platform(SINGLE_QSP_ARG_DECL) { Compute_Platform *cpp; static int inited=0; if( inited ){ /* As long as we have not completely replaced the * previous veclib, we can call this from vl2 or veclib... */ return; } cpp = creat_platform(QSP_ARG "CPU", PLATFORM_CPU ); SET_PLATFORM_FUNCTIONS(cpp,vl2) SET_PF_FUNC_TBL(cpp,vl2_vfa_tbl); push_pfdev_context(QSP_ARG PF_CONTEXT(cpp) ); init_vl2_pfdevs(QSP_ARG cpp); if( pop_pfdev_context(SINGLE_QSP_ARG) == NO_ITEM_CONTEXT ) ERROR1("init_ocl_platform: Failed to pop platform device context!?"); check_vl2_vfa_tbl(SINGLE_QSP_ARG); inited=1; }
static void init_cu2_devices(QSP_ARG_DECL Compute_Platform *cpp) { int n_devs,i; /* We don't get a proper error message if the cuda files in /dev * are not readable... So we check that first. */ check_file_access(QSP_ARG "/dev/nvidiactl"); cudaGetDeviceCount(&n_devs); if( n_devs == 0 ){ WARN("No CUDA devices found!?"); return; } if( verbose ){ sprintf(ERROR_STRING,"%d cuda devices found...",n_devs); advise(ERROR_STRING); } default_cuda_dev_name = getenv(DEFAULT_CUDA_ENV_VAR); /* may be null */ for(i=0;i<n_devs;i++){ char s[32]; sprintf(s,"/dev/nvidia%d",i); check_file_access(QSP_ARG s); init_cu2_device(QSP_ARG i, cpp); } if( default_cuda_dev_name == NULL ){ /* Not specified in environment */ // reserved var if set in environment? assign_var(QSP_ARG DEFAULT_CUDA_DEV_VAR,first_cuda_dev_name); default_cuda_dev_found=1; // not really necessary? } else if( ! default_cuda_dev_found ){ /* specified incorrectly */ sprintf(ERROR_STRING, "%s %s not found.\nUsing device %s.", DEFAULT_CUDA_DEV_VAR,default_cuda_dev_name, first_cuda_dev_name); WARN(ERROR_STRING); assign_var(QSP_ARG DEFAULT_CUDA_DEV_VAR,first_cuda_dev_name); default_cuda_dev_found=1; // not really necessary? } /* hopefully the vector library is already initialized - can we be sure? */ SET_PLATFORM_FUNCTIONS(cpp,cu2) SET_PF_FUNC_TBL(cpp,cu2_vfa_tbl); //SET_PLATFORM_DISPATCH_TBL(cpp,cu2_func_tbl); } // end init_cu2_devices
static void init_ocl_platform(QSP_ARG_DECL cl_platform_id platform_id) { Compute_Platform *cpp; cl_int status; //char param_data[MAX_PARAM_SIZE]; char *platform_str; size_t ret_size; GET_PLATFORM_STRING(CL_PLATFORM_NAME) cpp = creat_platform(QSP_ARG platform_str, PLATFORM_OPENCL); givbuf(platform_str); GET_PLATFORM_STRING(CL_PLATFORM_PROFILE) SET_OCLPF_PROFILE(cpp,platform_str); GET_PLATFORM_STRING(CL_PLATFORM_VERSION) SET_OCLPF_VERSION(cpp,platform_str); GET_PLATFORM_STRING(CL_PLATFORM_VENDOR) SET_OCLPF_VENDOR(cpp,platform_str); GET_PLATFORM_STRING(CL_PLATFORM_EXTENSIONS) SET_OCLPF_EXTENSIONS(cpp,platform_str); SET_OCLPF_ID(cpp,platform_id); SET_PLATFORM_FUNCTIONS(cpp,ocl) SET_PF_FUNC_TBL(cpp,ocl_vfa_tbl); // BUG need to set vfa_tbl here too! //icp = create_item_context(QSP_ARG pfdev_itp, PLATFORM_NAME(cpp) ); //push_item_context(QSP_ARG pfdev_itp, icp ); push_pfdev_context(QSP_ARG PF_CONTEXT(cpp) ); init_ocl_devices(QSP_ARG cpp); if( pop_pfdev_context(SINGLE_QSP_ARG) == NULL ) error1("init_ocl_platform: Failed to pop platform device context!?"); }