From: Berk Hess Date: Thu, 23 May 2013 13:21:21 +0000 (+0200) Subject: flops table now reports CUDA analytical Ewald X-Git-Url: http://biod.pnpi.spb.ru/gitweb/?a=commitdiff_plain;h=1ee9aa497a4e6ade70a24d5884cce0a064e572a2;p=alexxy%2Fgromacs.git flops table now reports CUDA analytical Ewald Change-Id: I72dfdc3b3f1ecb651897922c2e7ffec784c3bf60 --- diff --git a/include/nbnxn_cuda_data_mgmt.h b/include/nbnxn_cuda_data_mgmt.h index e542ed978e..1d29225cba 100644 --- a/include/nbnxn_cuda_data_mgmt.h +++ b/include/nbnxn_cuda_data_mgmt.h @@ -128,6 +128,17 @@ int nbnxn_cuda_min_ci_balanced(nbnxn_cuda_ptr_t cu_nb) } #endif +/*! Returns if analytical Ewald CUDA kernels are used. */ +FUNC_QUALIFIER +gmx_bool nbnxn_cuda_is_kernel_ewald_analytical(const nbnxn_cuda_ptr_t cu_nb) +#ifdef GMX_GPU +; +#else +{ + return FALSE; +} +#endif + #ifdef __cplusplus } #endif diff --git a/src/mdlib/nbnxn_cuda/nbnxn_cuda_data_mgmt.cu b/src/mdlib/nbnxn_cuda/nbnxn_cuda_data_mgmt.cu index 8820631674..f42fa1e688 100644 --- a/src/mdlib/nbnxn_cuda/nbnxn_cuda_data_mgmt.cu +++ b/src/mdlib/nbnxn_cuda/nbnxn_cuda_data_mgmt.cu @@ -964,3 +964,9 @@ int nbnxn_cuda_min_ci_balanced(nbnxn_cuda_ptr_t cu_nb) gpu_min_ci_balanced_factor*cu_nb->dev_info->prop.multiProcessorCount : 0; } + +gmx_bool nbnxn_cuda_is_kernel_ewald_analytical(const nbnxn_cuda_ptr_t cu_nb) +{ + return ((cu_nb->nbparam->eeltype == eelCuEWALD_ANA) || + (cu_nb->nbparam->eeltype == eelCuEWALD_ANA_TWIN)); +} diff --git a/src/mdlib/sim_util.c b/src/mdlib/sim_util.c index e0797cdc00..f964ce4799 100644 --- a/src/mdlib/sim_util.c +++ b/src/mdlib/sim_util.c @@ -618,6 +618,7 @@ static void do_nb_verlet(t_forcerec *fr, int nnbl, kernel_type, enr_nbnxn_kernel_ljc, enr_nbnxn_kernel_lj; char *env; nonbonded_verlet_group_t *nbvg; + gmx_bool bCUDA; if (!(flags & GMX_FORCE_NONBONDED)) { @@ -633,7 +634,9 @@ static void do_nb_verlet(t_forcerec *fr, gmx_incons("Invalid cut-off scheme passed!"); } - if (nbvg->kernel_type != nbnxnk8x8x8_CUDA) + bCUDA = (nbvg->kernel_type == nbnxnk8x8x8_CUDA); + + if (!bCUDA) { wallcycle_sub_start(wcycle, ewcsNONBONDED); } @@ -701,7 +704,7 @@ static void do_nb_verlet(t_forcerec *fr, gmx_incons("Invalid nonbonded kernel type passed!"); } - if (nbvg->kernel_type != nbnxnk8x8x8_CUDA) + if (!bCUDA) { wallcycle_sub_stop(wcycle, ewcsNONBONDED); } @@ -710,13 +713,14 @@ static void do_nb_verlet(t_forcerec *fr, { enr_nbnxn_kernel_ljc = eNR_NBNXN_LJ_RF; } - else if (nbvg->ewald_excl == ewaldexclTable) + else if ((!bCUDA && nbvg->ewald_excl == ewaldexclAnalytical) || + (bCUDA && nbnxn_cuda_is_kernel_ewald_analytical(fr->nbv->cu_nbv))) { - enr_nbnxn_kernel_ljc = eNR_NBNXN_LJ_TAB; + enr_nbnxn_kernel_ljc = eNR_NBNXN_LJ_EWALD; } else { - enr_nbnxn_kernel_ljc = eNR_NBNXN_LJ_EWALD; + enr_nbnxn_kernel_ljc = eNR_NBNXN_LJ_TAB; } enr_nbnxn_kernel_lj = eNR_NBNXN_LJ; if (flags & GMX_FORCE_ENERGY)