initial upload
This commit is contained in:
123
cuda/grid_wrapper.cuh
Normal file
123
cuda/grid_wrapper.cuh
Normal file
@@ -0,0 +1,123 @@
|
||||
#ifndef GRID_WRAPPER_CUH
|
||||
#define GRID_WRAPPER_CUH
|
||||
|
||||
#include <cuda_runtime.h>
|
||||
#include <cuda_runtime_api.h>
|
||||
#include <cuda.h>
|
||||
|
||||
#include <vector>
|
||||
#include <iostream>
|
||||
|
||||
//#include "config.h"
|
||||
#include "cuda_constants.cuh"
|
||||
#include "cuda_utils.cuh"
|
||||
|
||||
// structure for storing grid information on device
|
||||
typedef struct Grid_on_device {
|
||||
|
||||
// parameters
|
||||
int loc_I_host, loc_J_host, loc_K_host;
|
||||
int n_nodes_total_host;
|
||||
int n_nodes_max_host=0;
|
||||
int n_levels_host;
|
||||
CUSTOMREAL dr_host, dt_host, dp_host;
|
||||
|
||||
// index storage
|
||||
int* n_nodes_on_levels, *n_nodes_on_levels_host;
|
||||
|
||||
int* vv_i__j__k___0, *vv_i__j__k___1, *vv_i__j__k___2, *vv_i__j__k___3, *vv_i__j__k___4, *vv_i__j__k___5, *vv_i__j__k___6, *vv_i__j__k___7;
|
||||
int* vv_ip1j__k___0, *vv_ip1j__k___1, *vv_ip1j__k___2, *vv_ip1j__k___3, *vv_ip1j__k___4, *vv_ip1j__k___5, *vv_ip1j__k___6, *vv_ip1j__k___7;
|
||||
int* vv_im1j__k___0, *vv_im1j__k___1, *vv_im1j__k___2, *vv_im1j__k___3, *vv_im1j__k___4, *vv_im1j__k___5, *vv_im1j__k___6, *vv_im1j__k___7;
|
||||
int* vv_i__jp1k___0, *vv_i__jp1k___1, *vv_i__jp1k___2, *vv_i__jp1k___3, *vv_i__jp1k___4, *vv_i__jp1k___5, *vv_i__jp1k___6, *vv_i__jp1k___7;
|
||||
int* vv_i__jm1k___0, *vv_i__jm1k___1, *vv_i__jm1k___2, *vv_i__jm1k___3, *vv_i__jm1k___4, *vv_i__jm1k___5, *vv_i__jm1k___6, *vv_i__jm1k___7;
|
||||
int* vv_i__j__kp1_0, *vv_i__j__kp1_1, *vv_i__j__kp1_2, *vv_i__j__kp1_3, *vv_i__j__kp1_4, *vv_i__j__kp1_5, *vv_i__j__kp1_6, *vv_i__j__kp1_7;
|
||||
int* vv_i__j__km1_0, *vv_i__j__km1_1, *vv_i__j__km1_2, *vv_i__j__km1_3, *vv_i__j__km1_4, *vv_i__j__km1_5, *vv_i__j__km1_6, *vv_i__j__km1_7;
|
||||
int* vv_ip2j__k___0, *vv_ip2j__k___1, *vv_ip2j__k___2, *vv_ip2j__k___3, *vv_ip2j__k___4, *vv_ip2j__k___5, *vv_ip2j__k___6, *vv_ip2j__k___7;
|
||||
int* vv_im2j__k___0, *vv_im2j__k___1, *vv_im2j__k___2, *vv_im2j__k___3, *vv_im2j__k___4, *vv_im2j__k___5, *vv_im2j__k___6, *vv_im2j__k___7;
|
||||
int* vv_i__jp2k___0, *vv_i__jp2k___1, *vv_i__jp2k___2, *vv_i__jp2k___3, *vv_i__jp2k___4, *vv_i__jp2k___5, *vv_i__jp2k___6, *vv_i__jp2k___7;
|
||||
int* vv_i__jm2k___0, *vv_i__jm2k___1, *vv_i__jm2k___2, *vv_i__jm2k___3, *vv_i__jm2k___4, *vv_i__jm2k___5, *vv_i__jm2k___6, *vv_i__jm2k___7;
|
||||
int* vv_i__j__kp2_0, *vv_i__j__kp2_1, *vv_i__j__kp2_2, *vv_i__j__kp2_3, *vv_i__j__kp2_4, *vv_i__j__kp2_5, *vv_i__j__kp2_6, *vv_i__j__kp2_7;
|
||||
int* vv_i__j__km2_0, *vv_i__j__km2_1, *vv_i__j__km2_2, *vv_i__j__km2_3, *vv_i__j__km2_4, *vv_i__j__km2_5, *vv_i__j__km2_6, *vv_i__j__km2_7;
|
||||
|
||||
// constants
|
||||
CUSTOMREAL* vv_fac_a_0, *vv_fac_a_1, *vv_fac_a_2, *vv_fac_a_3, *vv_fac_a_4, *vv_fac_a_5, *vv_fac_a_6, *vv_fac_a_7;
|
||||
CUSTOMREAL* vv_fac_b_0, *vv_fac_b_1, *vv_fac_b_2, *vv_fac_b_3, *vv_fac_b_4, *vv_fac_b_5, *vv_fac_b_6, *vv_fac_b_7;
|
||||
CUSTOMREAL* vv_fac_c_0, *vv_fac_c_1, *vv_fac_c_2, *vv_fac_c_3, *vv_fac_c_4, *vv_fac_c_5, *vv_fac_c_6, *vv_fac_c_7;
|
||||
CUSTOMREAL* vv_fac_f_0, *vv_fac_f_1, *vv_fac_f_2, *vv_fac_f_3, *vv_fac_f_4, *vv_fac_f_5, *vv_fac_f_6, *vv_fac_f_7;
|
||||
CUSTOMREAL* vv_T0v_0, *vv_T0v_1, *vv_T0v_2, *vv_T0v_3, *vv_T0v_4, *vv_T0v_5, *vv_T0v_6, *vv_T0v_7;
|
||||
CUSTOMREAL* vv_T0r_0, *vv_T0r_1, *vv_T0r_2, *vv_T0r_3, *vv_T0r_4, *vv_T0r_5, *vv_T0r_6, *vv_T0r_7;
|
||||
CUSTOMREAL* vv_T0t_0, *vv_T0t_1, *vv_T0t_2, *vv_T0t_3, *vv_T0t_4, *vv_T0t_5, *vv_T0t_6, *vv_T0t_7;
|
||||
CUSTOMREAL* vv_T0p_0, *vv_T0p_1, *vv_T0p_2, *vv_T0p_3, *vv_T0p_4, *vv_T0p_5, *vv_T0p_6, *vv_T0p_7;
|
||||
CUSTOMREAL* vv_fun_0, *vv_fun_1, *vv_fun_2, *vv_fun_3, *vv_fun_4, *vv_fun_5, *vv_fun_6, *vv_fun_7;
|
||||
bool* vv_change_0, *vv_change_1, *vv_change_2, *vv_change_3, *vv_change_4, *vv_change_5, *vv_change_6, *vv_change_7;
|
||||
|
||||
// temporary variables
|
||||
CUSTOMREAL* tau;
|
||||
|
||||
bool if_3rd_order = false;
|
||||
|
||||
// thead and grid for sweeping
|
||||
dim3 grid_sweep_host, threads_sweep_host;
|
||||
// array of streams
|
||||
cudaStream_t* level_streams;
|
||||
|
||||
|
||||
} Grid_on_device;
|
||||
|
||||
|
||||
void cuda_initialize_grid_1st(std::vector< std::vector<int> >& ijk, Grid_on_device* grid_dv, int const& loc_I, int const& loc_J, int const& loc_K,
|
||||
CUSTOMREAL const& dp, CUSTOMREAL const& dt, CUSTOMREAL const& dr, \
|
||||
std::vector<std::vector<int*>> & vv_i__j__k__, \
|
||||
std::vector<std::vector<int*>> & vv_ip1j__k__, \
|
||||
std::vector<std::vector<int*>> & vv_im1j__k__, \
|
||||
std::vector<std::vector<int*>> & vv_i__jp1k__, \
|
||||
std::vector<std::vector<int*>> & vv_i__jm1k__, \
|
||||
std::vector<std::vector<int*>> & vv_i__j__kp1, \
|
||||
std::vector<std::vector<int*>> & vv_i__j__km1, \
|
||||
std::vector<std::vector<CUSTOMREAL*>> & vv_fac_a, \
|
||||
std::vector<std::vector<CUSTOMREAL*>> & vv_fac_b, \
|
||||
std::vector<std::vector<CUSTOMREAL*>> & vv_fac_c, \
|
||||
std::vector<std::vector<CUSTOMREAL*>> & vv_fac_f, \
|
||||
std::vector<std::vector<CUSTOMREAL*>> & vv_T0v, \
|
||||
std::vector<std::vector<CUSTOMREAL*>> & vv_T0r, \
|
||||
std::vector<std::vector<CUSTOMREAL*>> & vv_T0t, \
|
||||
std::vector<std::vector<CUSTOMREAL*>> & vv_T0p, \
|
||||
std::vector<std::vector<CUSTOMREAL*>> & vv_fun, \
|
||||
std::vector<std::vector<bool*>> & vv_change);
|
||||
|
||||
void cuda_initialize_grid_3rd(std::vector< std::vector<int> >& ijk, Grid_on_device* grid_dv, int const& loc_I, int const& loc_J, int const& loc_K,
|
||||
CUSTOMREAL const& dp, CUSTOMREAL const& dt, CUSTOMREAL const& dr, \
|
||||
std::vector<std::vector<int*>> & vv_i__j__k__, \
|
||||
std::vector<std::vector<int*>> & vv_ip1j__k__, \
|
||||
std::vector<std::vector<int*>> & vv_im1j__k__, \
|
||||
std::vector<std::vector<int*>> & vv_i__jp1k__, \
|
||||
std::vector<std::vector<int*>> & vv_i__jm1k__, \
|
||||
std::vector<std::vector<int*>> & vv_i__j__kp1, \
|
||||
std::vector<std::vector<int*>> & vv_i__j__km1, \
|
||||
std::vector<std::vector<int*>> & vv_ip2j__k__, \
|
||||
std::vector<std::vector<int*>> & vv_im2j__k__, \
|
||||
std::vector<std::vector<int*>> & vv_i__jp2k__, \
|
||||
std::vector<std::vector<int*>> & vv_i__jm2k__, \
|
||||
std::vector<std::vector<int*>> & vv_i__j__kp2, \
|
||||
std::vector<std::vector<int*>> & vv_i__j__km2, \
|
||||
std::vector<std::vector<CUSTOMREAL*>> & vv_fac_a, \
|
||||
std::vector<std::vector<CUSTOMREAL*>> & vv_fac_b, \
|
||||
std::vector<std::vector<CUSTOMREAL*>> & vv_fac_c, \
|
||||
std::vector<std::vector<CUSTOMREAL*>> & vv_fac_f, \
|
||||
std::vector<std::vector<CUSTOMREAL*>> & vv_T0v, \
|
||||
std::vector<std::vector<CUSTOMREAL*>> & vv_T0r, \
|
||||
std::vector<std::vector<CUSTOMREAL*>> & vv_T0t, \
|
||||
std::vector<std::vector<CUSTOMREAL*>> & vv_T0p, \
|
||||
std::vector<std::vector<CUSTOMREAL*>> & vv_fun, \
|
||||
std::vector<std::vector<bool*>> & vv_change);
|
||||
|
||||
|
||||
// finalize
|
||||
void cuda_finalize_grid(Grid_on_device* grid_dv);
|
||||
|
||||
// copy tau from host to device
|
||||
void cuda_copy_tau_to_device(Grid_on_device* grid_dv, CUSTOMREAL* tau_h);
|
||||
// copy tau from device to host
|
||||
void cuda_copy_tau_to_host(Grid_on_device* grid_dv, CUSTOMREAL* tau_h);
|
||||
|
||||
#endif // GRID_WRAPPER_CUH
|
||||
Reference in New Issue
Block a user