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));
+}
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))
{
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);
}
gmx_incons("Invalid nonbonded kernel type passed!");
}
- if (nbvg->kernel_type != nbnxnk8x8x8_CUDA)
+ if (!bCUDA)
{
wallcycle_sub_stop(wcycle, ewcsNONBONDED);
}
{
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)