cuda_set_cacheconfig();
}
-void gpu_free(NbnxmGpu* nb)
+void gpu_free_platform_specific(NbnxmGpu* /* nb */)
{
- if (nb == nullptr)
- {
- return;
- }
-
- delete nb->timers;
- sfree(nb->timings);
-
- NBAtomData* atdat = nb->atdat;
- NBParamGpu* nbparam = nb->nbparam;
-
- if (nbparam->elecType == ElecType::EwaldTab || nbparam->elecType == ElecType::EwaldTabTwin)
- {
- destroyParamLookupTable(&nbparam->coulomb_tab, nbparam->coulomb_tab_texobj);
- }
-
- if (!useLjCombRule(nb->nbparam->vdwType))
- {
- destroyParamLookupTable(&nbparam->nbfp, nbparam->nbfp_texobj);
- }
-
- if (nbparam->vdwType == VdwType::EwaldGeom || nbparam->vdwType == VdwType::EwaldLB)
- {
- destroyParamLookupTable(&nbparam->nbfp_comb, nbparam->nbfp_comb_texobj);
- }
-
- freeDeviceBuffer(&atdat->shiftVec);
- freeDeviceBuffer(&atdat->fShift);
-
- freeDeviceBuffer(&atdat->eLJ);
- freeDeviceBuffer(&atdat->eElec);
-
- freeDeviceBuffer(&atdat->f);
- freeDeviceBuffer(&atdat->xq);
- if (useLjCombRule(nb->nbparam->vdwType))
- {
- freeDeviceBuffer(&atdat->ljComb);
- }
- else
- {
- freeDeviceBuffer(&atdat->atomTypes);
- }
-
- /* Free plist */
- auto* plist = nb->plist[InteractionLocality::Local];
- freeDeviceBuffer(&plist->sci);
- freeDeviceBuffer(&plist->cj4);
- freeDeviceBuffer(&plist->imask);
- freeDeviceBuffer(&plist->excl);
- delete plist;
- if (nb->bUseTwoStreams)
- {
- auto* plist_nl = nb->plist[InteractionLocality::NonLocal];
- freeDeviceBuffer(&plist_nl->sci);
- freeDeviceBuffer(&plist_nl->cj4);
- freeDeviceBuffer(&plist_nl->imask);
- freeDeviceBuffer(&plist_nl->excl);
- delete plist_nl;
- }
-
- /* Free nbst */
- pfree(nb->nbst.eLJ);
- nb->nbst.eLJ = nullptr;
-
- pfree(nb->nbst.eElec);
- nb->nbst.eElec = nullptr;
-
- pfree(nb->nbst.fShift);
- nb->nbst.fShift = nullptr;
-
- delete atdat;
- delete nbparam;
- delete nb;
-
- if (debug)
- {
- fprintf(debug, "Cleaned up CUDA data structures.\n");
- }
+ // Nothing specific in CUDA
}
int gpu_min_ci_balanced(NbnxmGpu* nb)
nbnxnInsertNonlocalGpuDependency(gpu_nbv, Nbnxm::InteractionLocality::NonLocal);
}
+//! This function is documented in the header file
+void gpu_free(NbnxmGpu* nb)
+{
+ if (nb == nullptr)
+ {
+ return;
+ }
+
+ gpu_free_platform_specific(nb);
+
+ delete nb->timers;
+ sfree(nb->timings);
+
+ NBAtomData* atdat = nb->atdat;
+ NBParamGpu* nbparam = nb->nbparam;
+
+ /* Free atdat */
+ freeDeviceBuffer(&(nb->atdat->xq));
+ freeDeviceBuffer(&(nb->atdat->f));
+ freeDeviceBuffer(&(nb->atdat->eLJ));
+ freeDeviceBuffer(&(nb->atdat->eElec));
+ freeDeviceBuffer(&(nb->atdat->fShift));
+ freeDeviceBuffer(&(nb->atdat->shiftVec));
+ if (useLjCombRule(nb->nbparam->vdwType))
+ {
+ freeDeviceBuffer(&atdat->ljComb);
+ }
+ else
+ {
+ freeDeviceBuffer(&atdat->atomTypes);
+ }
+
+ /* Free nbparam */
+ if (nbparam->elecType == ElecType::EwaldTab || nbparam->elecType == ElecType::EwaldTabTwin)
+ {
+ destroyParamLookupTable(&nbparam->coulomb_tab, nbparam->coulomb_tab_texobj);
+ }
+
+ if (!useLjCombRule(nb->nbparam->vdwType))
+ {
+ destroyParamLookupTable(&nbparam->nbfp, nbparam->nbfp_texobj);
+ }
+
+ if (nbparam->vdwType == VdwType::EwaldGeom || nbparam->vdwType == VdwType::EwaldLB)
+ {
+ destroyParamLookupTable(&nbparam->nbfp_comb, nbparam->nbfp_comb_texobj);
+ }
+
+ /* Free plist */
+ auto* plist = nb->plist[InteractionLocality::Local];
+ freeDeviceBuffer(&plist->sci);
+ freeDeviceBuffer(&plist->cj4);
+ freeDeviceBuffer(&plist->imask);
+ freeDeviceBuffer(&plist->excl);
+ delete plist;
+ if (nb->bUseTwoStreams)
+ {
+ auto* plist_nl = nb->plist[InteractionLocality::NonLocal];
+ freeDeviceBuffer(&plist_nl->sci);
+ freeDeviceBuffer(&plist_nl->cj4);
+ freeDeviceBuffer(&plist_nl->imask);
+ freeDeviceBuffer(&plist_nl->excl);
+ delete plist_nl;
+ }
+
+ /* Free nbst */
+ pfree(nb->nbst.eLJ);
+ nb->nbst.eLJ = nullptr;
+
+ pfree(nb->nbst.eElec);
+ nb->nbst.eElec = nullptr;
+
+ pfree(nb->nbst.fShift);
+ nb->nbst.fShift = nullptr;
+
+ delete atdat;
+ delete nbparam;
+ delete nb;
+
+ if (debug)
+ {
+ fprintf(debug, "Cleaned up NBNXM GPU data structures.\n");
+ }
+}
+
} // namespace Nbnxm
/*! \brief Initializes the timings data structure. */
void init_timings(gmx_wallclock_gpu_nbnxn_t* t);
+/*! \brief Initializes the NBNXM GPU data structures. */
void gpu_init_platform_specific(NbnxmGpu* nb);
+/*! \brief Releases the NBNXM GPU data structures. */
+void gpu_free_platform_specific(NbnxmGpu* nb);
+
} // namespace Nbnxm
#endif // GMX_NBNXM_NBNXM_GPU_DATA_MGMT_H
/*! \brief Releases an OpenCL kernel pointer */
static void free_kernel(cl_kernel* kernel_ptr)
{
- cl_int gmx_unused cl_error;
-
GMX_ASSERT(kernel_ptr, "Need a valid kernel pointer");
if (*kernel_ptr)
{
- cl_error = clReleaseKernel(*kernel_ptr);
+ cl_int cl_error = clReleaseKernel(*kernel_ptr);
GMX_RELEASE_ASSERT(cl_error == CL_SUCCESS,
("clReleaseKernel failed: " + ocl_get_error_string(cl_error)).c_str());
/*! \brief Releases a list of OpenCL kernel pointers */
static void free_kernels(cl_kernel* kernels, int count)
{
- int i;
-
- for (i = 0; i < count; i++)
+ for (int i = 0; i < count; i++)
{
free_kernel(kernels + i);
}
}
//! This function is documented in the header file
-void gpu_free(NbnxmGpu* nb)
+void gpu_free_platform_specific(NbnxmGpu* nb)
{
- if (nb == nullptr)
- {
- return;
- }
-
- delete nb->timers;
- sfree(nb->timings);
-
- NBAtomData* atdat = nb->atdat;
- NBParamGpu* nbparam = nb->nbparam;
-
/* Free kernels */
// NOLINTNEXTLINE(bugprone-sizeof-expression)
int kernel_count = sizeof(nb->kernel_ener_noprune_ptr) / sizeof(nb->kernel_ener_noprune_ptr[0][0]);
kernel_count = sizeof(nb->kernel_noener_prune_ptr) / sizeof(nb->kernel_noener_prune_ptr[0][0]);
free_kernels(nb->kernel_noener_prune_ptr[0], kernel_count);
- /* Free atdat */
- freeDeviceBuffer(&(nb->atdat->xq));
- freeDeviceBuffer(&(nb->atdat->f));
- freeDeviceBuffer(&(nb->atdat->eLJ));
- freeDeviceBuffer(&(nb->atdat->eElec));
- freeDeviceBuffer(&(nb->atdat->fShift));
- freeDeviceBuffer(&(nb->atdat->shiftVec));
- if (useLjCombRule(nb->nbparam->vdwType))
- {
- freeDeviceBuffer(&atdat->ljComb);
- }
- else
- {
- freeDeviceBuffer(&atdat->atomTypes);
- }
-
- /* Free nbparam */
- if (nbparam->elecType == ElecType::EwaldTab || nbparam->elecType == ElecType::EwaldTabTwin)
- {
- destroyParamLookupTable(&nbparam->coulomb_tab, nbparam->coulomb_tab_texobj);
- }
-
- if (!useLjCombRule(nb->nbparam->vdwType))
- {
- destroyParamLookupTable(&nbparam->nbfp, nbparam->nbfp_texobj);
- }
-
- if (nbparam->vdwType == VdwType::EwaldGeom || nbparam->vdwType == VdwType::EwaldLB)
- {
- destroyParamLookupTable(&nbparam->nbfp_comb, nbparam->nbfp_comb_texobj);
- }
-
- /* Free plist */
- auto* plist = nb->plist[InteractionLocality::Local];
- freeDeviceBuffer(&plist->sci);
- freeDeviceBuffer(&plist->cj4);
- freeDeviceBuffer(&plist->imask);
- freeDeviceBuffer(&plist->excl);
- delete plist;
- if (nb->bUseTwoStreams)
- {
- auto* plist_nl = nb->plist[InteractionLocality::NonLocal];
- freeDeviceBuffer(&plist_nl->sci);
- freeDeviceBuffer(&plist_nl->cj4);
- freeDeviceBuffer(&plist_nl->imask);
- freeDeviceBuffer(&plist_nl->excl);
- delete plist_nl;
- }
-
- /* Free nbst */
- pfree(nb->nbst.eLJ);
- nb->nbst.eLJ = nullptr;
-
- pfree(nb->nbst.eElec);
- nb->nbst.eElec = nullptr;
-
- pfree(nb->nbst.fShift);
- nb->nbst.fShift = nullptr;
-
freeGpuProgram(nb->dev_rundata->program);
delete nb->dev_rundata;
-
- delete atdat;
- delete nbparam;
- delete nb;
-
- if (debug)
- {
- fprintf(debug, "Cleaned up OpenCL data structures.\n");
- }
}
//! This function is documented in the header file
// Nothing specific in SYCL
}
-void gpu_free(NbnxmGpu* nb)
+void gpu_free_platform_specific(NbnxmGpu* /* nb */)
{
- if (nb == nullptr)
- {
- return;
- }
-
- delete nb->timers;
- sfree(nb->timings);
-
- NBAtomData* atdat = nb->atdat;
- NBParamGpu* nbparam = nb->nbparam;
-
- if (nbparam->elecType == ElecType::EwaldTab || nbparam->elecType == ElecType::EwaldTabTwin)
- {
- destroyParamLookupTable(&nbparam->coulomb_tab, nbparam->coulomb_tab_texobj);
- }
-
- if (!useLjCombRule(nb->nbparam->vdwType))
- {
- destroyParamLookupTable(&nbparam->nbfp, nbparam->nbfp_texobj);
- }
-
- if (nbparam->vdwType == VdwType::EwaldGeom || nbparam->vdwType == VdwType::EwaldLB)
- {
- destroyParamLookupTable(&nbparam->nbfp_comb, nbparam->nbfp_comb_texobj);
- }
-
- /* Free plist */
- auto* plist = nb->plist[InteractionLocality::Local];
- delete plist;
- if (nb->bUseTwoStreams)
- {
- auto* plist_nl = nb->plist[InteractionLocality::NonLocal];
- delete plist_nl;
- }
-
- /* Free nbst */
- pfree(nb->nbst.eLJ);
- nb->nbst.eLJ = nullptr;
-
- pfree(nb->nbst.eElec);
- nb->nbst.eElec = nullptr;
-
- pfree(nb->nbst.fShift);
- nb->nbst.fShift = nullptr;
-
- delete atdat;
- delete nbparam;
- delete nb;
+ // Nothing specific in SYCL
}
int gpu_min_ci_balanced(NbnxmGpu* nb)