00001 /*********************************************************************** 00002 File uth_accel_intf - utility routines supporting streaming processing 00003 on accelerators (common to all problem modules) 00004 00005 Contains declarations of routines: 00006 00007 utr_create_assemble_stiff_mat_elem_accel - to create element stiffness matrices 00008 and assemble them to the global SM using ACCELERATOR 00009 utr_create_assembly_structures_accel - to create data structurs in ACCELERATOR memory 00010 that are further used in numerical integration and assembly (no solver structures) 00011 00013 utr_prepare_create_assemble_accel 00014 utr_perform_create_assemble_accel_for_color 00015 utr_create_solver_crs_accel - create crs structure on accelerator 00016 utr_get_solver_crs_structure_accel - get crs structure from lsd 00017 utr_prepare_final_solver_crs_accel 00018 utr_cleanup_solver_crs_accel - free crs structure in accelerator memory 00019 utr_send_geo_data_accel - send geo data to accelerator 00020 utr_cleanup_geo_data_accel - remove geo data from accelerator 00021 utr_send_dofs_data_accel - send dofs data to accelerator 00022 utr_cleanup_dofs_data_accel - remove dofs data from accelerator 00023 00024 00025 ------------------------------ 00026 History: 00027 08.2015 - Krzysztof Banas, pobanas@cyf-kr.edu.pl, initial version 00028 *************************************************************************/ 00029 00030 #ifndef _uth_accel_intf_ 00031 #define _uth_accel_intf_ 00032 00033 #include "../tmd_opencl/tmh_ocl.h" 00034 #include "../tmd_opencl/tmh_ocl_num_int.h" 00035 00036 #ifdef __cplusplus 00037 extern "C"{ 00038 #endif 00039 00044 /*** FUNCTION DECLARATIONS - headers for external functions ***/ 00045 00046 00047 00048 /*------------------------------------------------------------ 00049 utr_create_assembly_structures_accel - to create data structurs in ACCELERATOR memory 00050 that are further used in numerical integration and assembly (no solver structures) 00051 ------------------------------------------------------------*/ 00052 extern int utr_create_assembly_structures_accel( 00053 ); 00054 00055 /*------------------------------------------------------------ 00056 utr_free_assembly_structures_accel - to free data structurs in ACCELERATOR memory 00057 ------------------------------------------------------------*/ 00058 extern int utr_free_assembly_structures_accel( 00059 00060 ); 00061 00062 /*------------------------------------------------------------ 00063 utr_get_solver_structures_crs_accel - to free data structurs in ACCELERATOR memory 00064 ------------------------------------------------------------*/ 00065 extern int utr_get_solver_structures_crs_accel( 00066 int* nnz, 00067 cl_mem* crs_col_ind, 00068 cl_mem* crs_row_ptr, 00069 cl_mem* crs_val, 00070 cl_mem* rhs ); 00071 00072 /*------------------------------------------------------------ 00073 utr_create_assemble_stiff_mat_elem_accel - to create element stiffness matrices 00074 and assemble them to the global SM using ACCELERATOR 00075 ------------------------------------------------------------*/ 00076 extern int utr_create_assemble_stiff_mat_elem_accel( 00077 int Problem_id, 00078 int Level_id, 00079 int Comp_type, /* in: indicator for the scope of computations: */ 00080 //extern const int PDC_NO_COMP ; /* do not compute stiff matrix and rhs vector */ 00081 //extern const int PDC_COMP_SM ; /* compute entries to stiff matrix only */ 00082 //extern const int PDC_COMP_RHS ; /* compute entries to rhs vector only */ 00083 //extern const int PDC_COMP_BOTH; /* compute entries for sm and rhsv */ 00084 int* Pdeg_coarse_p, // indicator or value for pdeg on coarse meshes 00085 int Nr_int_ent, 00086 int* L_int_ent_type, 00087 int* L_int_ent_id, 00088 int Nr_colors_elems, 00089 int* L_color_index_elems, 00090 int Nr_colors_accel, 00091 int* Asse_pos_first_dof_int_ent, 00092 int* Assembly_table, 00093 int* Pos_first_dof_int_ent, 00094 int* Local_to_global, 00095 int Max_dofs_int_ent 00096 ); 00097 00098 /*------------------------------------------------------------ 00099 utr_merge_solver_structures_accel to merge parts of SM and LV created on CPU and GPU 00100 ------------------------------------------------------------*/ 00101 extern int utr_merge_solver_structures_accel( 00102 00103 ); 00104 00106 00107 00108 /*------------------------------------------------------------ 00109 utr_prepare_geo_dat_for_all_color_streaming - to create table with geo data for all colors 00110 ------------------------------------------------------------*/ 00111 void utr_prepare_geo_dat_for_all_color_streaming ( 00112 int Problem_id, 00113 int Nr_colors_accel, 00114 int* L_color_index_elems, 00115 int* L_int_ent_id, 00116 00117 int* Ngauss_p, 00118 SCALAR** Gauss_dat_host_p, 00119 00120 int* Nshape_p, 00121 SCALAR** Shape_fun_dat_host_p, 00122 00123 int* Ngeo_p, 00124 int** Ngeo_color_p, 00125 SCALAR** El_geo_dat_host_p, 00126 00127 int* All_el_pde_coeff_size, 00128 int* One_el_pde_coeff_size, 00129 int* One_int_p_pde_coeff_size, 00130 SCALAR** El_pde_dat_host_p 00131 ); 00132 00133 /*--------------------------------------------------------- 00134 utr_perform_creation_crs - create crs structure on gpu 00135 ---------------------------------------------------------*/ 00136 int utr_perform_creation_crs( 00137 int Problem_id, 00138 int Nr_int_ent, 00139 int* Asse_pos_first_dof_int_ent, 00140 int* Assembly_table, 00141 int* Pos_first_dof_int_ent, 00142 int* Local_to_global, 00143 int Max_dofs_int_ent 00144 //,tmt_ocl_crs_struct *tmv_ocl_crs_struct - currently structure is global defined 00145 ); 00146 00147 00148 /*--------------------------------------------------------- 00149 utr_send_data_to_gpu_crs - send 00150 ---------------------------------------------------------*/ 00151 int utr_prepare_final_crs(); 00152 00153 /*--------------------------------------------------------- 00154 utr_cleanup_crs - free tmr crs structure 00155 ---------------------------------------------------------*/ 00156 int utr_cleanup_crs(); 00157 00158 00159 /*--------------------------------------------------------- 00160 utr_solve_viennacl_gpu - solve on gpu 00161 ---------------------------------------------------------*/ 00162 int utr_solve_viennacl_gpu(double* X); 00163 00164 00165 00166 /*--------------------------------------------------------- 00167 utr_send_geo_data_accel_test - send geo data to accelerator 00168 ---------------------------------------------------------*/ 00169 int utr_send_geo_data_accel_test( 00170 int Problem_id, 00171 int Nr_geo, 00172 SCALAR* El_geo_dat_host_p // switch to scalar in new code 00173 ); 00174 00175 00176 /*--------------------------------------------------------- 00177 utr_cleanup_geo_data_accel_test - remove geo data from accelerator 00178 ---------------------------------------------------------*/ 00179 int utr_cleanup_geo_data_accel_test( 00180 int Problem_id, 00181 int Nr_geo, 00182 SCALAR* El_geo_dat_host_p 00183 ); 00184 00185 /*--------------------------------------------------------- 00186 utr_rewrite_geo_by_color - rewrite geo from dof by dof organization 00187 to elem by elem organization 00188 ---------------------------------------------------------*/ 00189 int utr_rewrite_geo_by_color_test( 00190 int Problem_id, 00191 int Nr_elems, 00192 int First_elem_in_color_index, 00193 int First_geo_in_color_index 00194 ); 00195 00196 00197 /*--------------------------------------------------------- 00198 utr_prepare_create_assemble_accel 00199 ----------------------------------------------------------*/ 00200 int utr_prepare_create_assemble_accel( 00201 int Problem_id, 00202 int Monitor 00203 ); 00204 00205 /*--------------------------------------------------------- 00206 utr_perform_create_assemble_accel_for_color 00207 ----------------------------------------------------------*/ 00208 int utr_perform_create_assemble_accel_for_color( 00209 int Problem_id, 00210 int Level_id, 00211 int Comp_type, /* in: indicator for the scope of computations: */ 00212 //extern const int PDC_NO_COMP ; /* do not compute stiff matrix and rhs vector */ 00213 //extern const int PDC_COMP_SM ; /* compute entries to stiff matrix only */ 00214 //extern const int PDC_COMP_RHS ; /* compute entries to rhs vector only */ 00215 //extern const int PDC_COMP_BOTH; /* compute entries for sm and rhsv */ 00216 int Nr_elems_this_color, 00217 int First_elem_in_color_index, 00218 int* L_elem_id_this_color, 00219 int* Asse_pos_first_dof_int_ent, 00220 int* Assembly_table, 00221 int* Pos_first_dof_int_ent, 00222 int* Local_to_global, 00223 int Ngauss, 00224 SCALAR* Gauss_dat_host, 00225 int Num_shap, 00226 SCALAR* Shape_fun_dat_host, 00227 int Num_geo_dofs, 00228 int El_geo_dat_position_for_color, 00229 SCALAR* Geo_dofs_global, 00230 int Num_dofs, 00231 SCALAR* U_n_dofs_global, 00232 SCALAR* U_k_dofs_global, 00233 int Size_global_pde_data_int, // size for all elements 00234 SCALAR* Global_pde_dat_host_int, 00235 int Size_global_pde_data_scalar, // size for all elements 00236 SCALAR* Global_pde_dat_host_scalar, 00237 int Size_per_element_pde_data_int, // size for one element and all integration point 00238 int* El_pde_dat_host_int, 00239 int Size_per_element_pde_data_scalar, // size for one element and one integration point 00240 SCALAR* El_pde_dat_host_scalar, 00241 int Max_dofs_int_ent 00242 ); 00243 00244 00245 /*--------------------------------------------------------- 00246 utr_create_solver_crs_accel - create crs structure on accelerator 00247 ---------------------------------------------------------*/ 00248 int utr_create_solver_crs_accel( 00249 int Problem_id, 00250 int Nr_int_ent, 00251 int* Asse_pos_first_dof_int_ent, 00252 int* Assembly_table, 00253 int* Pos_first_dof_int_ent, 00254 int* Local_to_global, 00255 int Max_dofs_int_ent 00256 //,tmt_ocl_crs_struct *tmv_ocl_crs_struct - currently structure is global defined 00257 ); 00258 00259 /*--------------------------------------------------------- 00260 utr_get_solver_crs_structure_accel - get crs structure from lsd 00261 ---------------------------------------------------------*/ 00262 int utr_get_solver_crs_structure_accel( 00263 int Nrdof_glob, 00264 int nnz, 00265 int* crs_col_ind, 00266 int* crs_row_ptr, 00267 double* crs_val, 00268 double* rhs 00269 ); 00270 00271 /*--------------------------------------------------------- 00272 utr_prepare_final_solver_crs_accel 00273 ---------------------------------------------------------*/ 00274 int utr_prepare_final_solver_crs_accel(); 00275 00276 /*--------------------------------------------------------- 00277 utr_cleanup_solver_crs_accel - free crs structure in accelerator memory 00278 ---------------------------------------------------------*/ 00279 int utr_cleanup_solver_crs_accel(); 00280 00281 00282 /*--------------------------------------------------------- 00283 utr_send_geo_data_accel - send geo data to accelerator 00284 ---------------------------------------------------------*/ 00285 int utr_send_geo_data_accel( 00286 int Problem_id, 00287 int Nr_elements, 00288 int Nr_geo, 00289 double* El_geo_dat_host_p 00290 ); 00291 00292 /*--------------------------------------------------------- 00293 utr_cleanup_geo_data_accel - remove geo data from accelerator 00294 ---------------------------------------------------------*/ 00295 int utr_cleanup_geo_data_accel( 00296 int Problem_id, 00297 int Nr_elements, 00298 int Nr_geo, 00299 double* El_geo_dat_host_p 00300 ); 00301 00302 00303 /*--------------------------------------------------------- 00304 utr_send_dofs_data_accel - send dofs data to accelerator 00305 ---------------------------------------------------------*/ 00306 int utr_send_dofs_data_accel( 00307 int Problem_id, 00308 int Nr_dofs, 00309 double* El_dofs_dat_host_p 00310 ); 00311 00312 00313 /*--------------------------------------------------------- 00314 utr_cleanup_dofs_data_accel - remove dofs data from accelerator 00315 ---------------------------------------------------------*/ 00316 int utr_cleanup_dofs_data_accel( 00317 int Problem_id, 00318 int Nr_dofs, 00319 double* El_dofs_dat_host_p 00320 ); 00321 00322 00323 00324 #ifdef __cplusplus 00325 } 00326 #endif 00327 00328 #endif 00329