static void init(viennacl::ocl::context & ctx) { viennacl::ocl::DOUBLE_PRECISION_CHECKER<NumericT>::apply(ctx); std::string numeric_string = viennacl::ocl::type_to_string<NumericT>::apply(); static std::map<cl_context, bool> init_done; if (!init_done[ctx.handle().get()]) { std::string source; source.reserve(1024); viennacl::ocl::append_double_precision_pragma<NumericT>(ctx, source); // only generate for floating points (forces error for integers) if (numeric_string == "float" || numeric_string == "double") { generate_ilu_level_scheduling_substitute(source, numeric_string); } std::string prog_name = program_name(); #ifdef VIENNACL_BUILD_INFO std::cout << "Creating program " << prog_name << std::endl; #endif ctx.add_program(source, prog_name); init_done[ctx.handle().get()] = true; } //if } //init
static void init(Context & ctx) { static std::map<void*, bool> init_done; if (!init_done[ctx.handle().get()]) { viennacl::ocl::DOUBLE_PRECISION_CHECKER<NumericT, Context>::apply(ctx); std::string numeric_string = viennacl::ocl::type_to_string<NumericT>::apply(); std::string source; source.reserve(1024); viennacl::ocl::append_double_precision_pragma<double>( ctx.current_device().double_support_extension(), source); // only generate for floating points (forces error for integers) if (numeric_string == "float" || numeric_string == "double") { generate_ilu_level_scheduling_substitute(source, numeric_string); generate_icc_extract_L_1(source); generate_icc_extract_L_2(source, numeric_string); generate_icc_chow_patel_sweep_kernel(source, numeric_string); generate_ilu_extract_LU_1(source); generate_ilu_extract_LU_2(source, numeric_string); generate_ilu_scale_kernel_1(source, numeric_string); generate_ilu_scale_kernel_2(source, numeric_string); generate_ilu_chow_patel_sweep_kernel(source, numeric_string); generate_ilu_form_neumann_matrix_kernel(source, numeric_string); } std::string prog_name = program_name(); #ifdef VIENNACL_BUILD_INFO std::cout << "Creating program " << prog_name << std::endl; #endif ctx.add_program(source, prog_name); init_done[ctx.handle().get()] = true; } //if } //init