示例#1
0
文件: vl2_platform.c 项目: E-LLP/QuIP
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;
}
示例#2
0
文件: cu2.c 项目: E-LLP/QuIP
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
示例#3
0
文件: ocl.c 项目: nasa/QuIP
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!?");
}