Andrey Alekseenko [Tue, 21 Sep 2021 18:54:59 +0000 (18:54 +0000)]
SYCL PME Spread kernel
Andrey Alekseenko [Sat, 18 Sep 2021 21:30:45 +0000 (00:30 +0300)]
Fix compilation with oneAPI 2021.2 and earlier
We were using some PP defines introduced only in 2021.3. And, since they
are not standard, now we play it safe and don't use them if they are not
defined.
Bug introduced in MR !1888 (
2861057f).
Andrey Alekseenko [Tue, 21 Sep 2021 12:21:15 +0000 (15:21 +0300)]
Fix rare UB / assertion failure in MdlibUnitTest
In LeapFrogHostTestRunner::integrate, we were checking whether
testData->mdAtoms_.ptype is null, but we were not initializing this
field.
This was leading to occasional assertion failure in
ArrayRef constructor from this pointer when begin+size was overflowing,
which caused end < begin.
Only unit tests were affected.
Mark Abraham [Tue, 21 Sep 2021 10:50:29 +0000 (12:50 +0200)]
Find MPI quietly on second pass
GROMACS expects package detection to be quiet upon repeat calls
to cmake, unless something has actually changed. It's fine to report
details thoroughly the first time through, however.
The previous code seemed to conflate verbosity with enforcing
requirements, which is now clearer.
Berk Hess [Tue, 21 Sep 2021 10:39:28 +0000 (10:39 +0000)]
Expanded the GetIrTest behavior to enable efficient testing
Berk Hess [Tue, 21 Sep 2021 07:52:15 +0000 (09:52 +0200)]
Prepare ThreadedForceBuffer for FE kernel use
Made the energy terms optional.
Skip reductions and allow nullptr/empty input for buffers that are
not used according to the stepwork flags.
Instantiate RVec versions of the templated types.
Berk Hess [Thu, 16 Sep 2021 20:37:54 +0000 (22:37 +0200)]
Add Ewald coefficients to nonbonded fep test
Refs #4151
Gaurav Garg [Mon, 20 Sep 2021 09:12:26 +0000 (14:42 +0530)]
Change hpccm scripts to add heffte package
Andrey Alekseenko [Thu, 16 Sep 2021 16:36:00 +0000 (19:36 +0300)]
SYCL: prepareGpuKernelArgument/launchGpuKernel
Implement the functions for abstracting the kernel launch.
The abstraction is not idiomatic in SYCL, but it is conformant with what
is used in CUDA and OpenCL for PME kernel launches.
Refs #3927.
Andrey Alekseenko [Fri, 17 Sep 2021 07:14:19 +0000 (07:14 +0000)]
Fix Clang warnings for built-in XDR libraries
Andrey Alekseenko [Tue, 14 Sep 2021 17:50:47 +0000 (20:50 +0300)]
Minor fixes to comments and Doxygen
- Fix issue number in cmake/gmxManageNvccConfig.cmake.
- Fix use of \tparam in CUDA code.
Artem Zhmurov [Thu, 16 Sep 2021 09:43:12 +0000 (12:43 +0300)]
Miscellaneous doxygen fixes
Artem Zhmurov [Thu, 16 Sep 2021 09:18:34 +0000 (12:18 +0300)]
Use a pointer to kernel parameters instead of a reference
clang-tidy complains that the reference is not const.
Introduces in
98b7831420261dba9746da962551eb4376c77e3a
Mark Abraham [Thu, 16 Sep 2021 10:45:17 +0000 (10:45 +0000)]
Eliminate GMX_MIMIC symbol from source code
Andrey Alekseenko [Thu, 16 Sep 2021 10:08:04 +0000 (10:08 +0000)]
Add SYCL compiler and MKL versions
Artem Zhmurov [Wed, 15 Sep 2021 15:20:44 +0000 (15:20 +0000)]
Add SYCL implementation of LINCS
Mark Abraham [Wed, 15 Sep 2021 09:29:55 +0000 (11:29 +0200)]
Make static selections of large index groups work.
The default allocation size is the number of atoms, but this does not
work for large static selections. Such selections might well be used
with gmx distance for listing more pairs of atoms than there are
atoms. Fixed by allocating the needed size.
Fixes #4148
Andrey Alekseenko [Wed, 15 Sep 2021 09:19:56 +0000 (09:19 +0000)]
Fix clang warnings
Andrey Alekseenko [Tue, 14 Sep 2021 17:16:06 +0000 (20:16 +0300)]
Merge remote-tracking branch 'origin/release-2021' into master
Conflicts:
cmake/gmxVersionInfo.cmake
src/gromacs/ewald/pme_gather.cu
src/gromacs/ewald/pme_gpu_calculate_splines.cuh
src/gromacs/ewald/pme_gpu_internal.cpp
src/gromacs/ewald/tests/pmetestcommon.cpp
src/gromacs/gmxana/gmx_cluster.cpp
src/gromacs/gmxpreprocess/gen_vsite.cpp
src/gromacs/simd/support.cpp
src/gromacs/tools/trjconv.cpp
Andrey Alekseenko [Tue, 14 Sep 2021 13:40:18 +0000 (13:40 +0000)]
Add advanced event consumption accounting to GpuEventSynchronizer
Paul Bauer [Tue, 14 Sep 2021 08:27:29 +0000 (08:27 +0000)]
Reenable GPUs in CI
Paul Bauer [Mon, 7 Jun 2021 13:20:54 +0000 (15:20 +0200)]
Revert "Temporarily lift requirement to detect GPUs in CI"
This reverts commit
b5f89c1771eda9912d94672bae31e611da9b4107.
Not needed after CI fix.
Dmitry Morozov [Tue, 14 Sep 2021 07:57:27 +0000 (07:57 +0000)]
Added class for making QMMM-related topology modifications
Mark Abraham [Mon, 13 Sep 2021 16:19:37 +0000 (18:19 +0200)]
Clang-format
M. Eric Irrgang [Mon, 13 Sep 2021 19:54:08 +0000 (19:54 +0000)]
Simplify MPI implementation checks.
Magnus Lundborg [Mon, 13 Sep 2021 18:08:15 +0000 (18:08 +0000)]
Calculate FEP (GPU) splines for all atoms.
Since charges can be 0 in one state, but not in the other, the splines
still need to be calculated. This was already ensured by c_skipNeutralAtoms
being false, but this commit makes that more clear.
Refs: #4139
Berk Hess [Tue, 7 Sep 2021 07:15:34 +0000 (09:15 +0200)]
Add release notes for transformation pull coordinate
Mark Abraham [Fri, 10 Sep 2021 13:02:38 +0000 (15:02 +0200)]
Fix issues from downstream patches and suppressions
Dmitry Morozov [Mon, 13 Sep 2021 12:03:27 +0000 (12:03 +0000)]
Added CP2K related options to CMake files
M. Eric Irrgang [Mon, 13 Sep 2021 09:30:52 +0000 (09:30 +0000)]
Allow flexible requirements for gmxManageMPI.cmake
M. Eric Irrgang [Sun, 12 Sep 2021 12:34:18 +0000 (15:34 +0300)]
Remove MPI_LINKER_FLAGS.
GROMACS used MPI_LINKER_FLAGS before MPI_LINK_FLAGS
was standard, presumably. MPI_LINK_FLAGS has been superseded
by MPI_CXX_LINK_FLAGS.
Ref #3672
M. Eric Irrgang [Sun, 12 Sep 2021 12:20:31 +0000 (15:20 +0300)]
Always call `find_package(MPI)`.
It is getting increasingly hard to coordinate MPI requirements across
the toolkit that a GROMACS or its CMake infrastructure may be involved
in.
This change allows is to call `find_package(MPI)` exactly once in the
GROMACS CMake configuration and begins to normalize infrastructure on
the modern CMake FindMPI.cmake module, which has been substantially
updated since the last major revisions to gmxManageMPI.cmake.
Also, try to decouple and compartmentalize GMX_MPI, GMX_LIB_MPI, and
the presence of MPI in the build system.
Follow-up changes can continue to refine the dependent use cases and
allow more coordination of the different MPI requirements in different
build configurations.
Refs #3672
Also refs #3776
M. Eric Irrgang [Sun, 12 Sep 2021 12:11:08 +0000 (15:11 +0300)]
Normalize indentation.
Make followup changes more readable and focused.
Mark Abraham [Fri, 10 Sep 2021 13:26:25 +0000 (15:26 +0200)]
Fix GMX_VERSION_STRING_OF_FORK with REGRESSIONTEST_DOWNLOAD
Previously, the name of the fork was used to try to download
the normal regressiontests, which can't be found.
Berk Hess [Fri, 10 Sep 2021 07:52:41 +0000 (07:52 +0000)]
Compute correct dV/dl when nstcalcenergy % nstdhdl != 0
Mark Abraham [Fri, 10 Sep 2021 07:30:46 +0000 (07:30 +0000)]
Word SIMD report better
Fixes #4135
Andrey Alekseenko [Thu, 9 Sep 2021 14:46:43 +0000 (17:46 +0300)]
Fix misc-misplaced-const clang-tidy warning
The problem was introduced in
4a4ade89 (MR !1903).
As MPI_Comm is typedef'd as a pointer to a structure, declaring it const
would be of little use: the pointer itself would be const, not the data
it is pointing to.
Andrey Alekseenko [Thu, 9 Sep 2021 20:43:06 +0000 (23:43 +0300)]
Minor improvements to SYCL utils and related clean-up
- ewald/pme_gpu_types_host.h: Remove unused forward declaration.
- gpu_utils/devicebuffer_sycl.h: Allow casting our "blackhole" class to
nullptr.
- gpu_utils/sycl_kernel_utils.h: Make subGroupBarrier usable with any
group dimension.
In preparation for #3927.
Andrey Alekseenko [Thu, 9 Sep 2021 16:07:20 +0000 (16:07 +0000)]
Fix typo in selectSpreadKernelPtr causing wrong kernel to be selected
Fixes #4138
Berk Hess [Thu, 9 Sep 2021 15:08:44 +0000 (15:08 +0000)]
Extract ThreadForceBuffer from listed forces
Andrey Alekseenko [Thu, 9 Sep 2021 13:06:39 +0000 (13:06 +0000)]
Enable GPU PME unit tests
Gaurav Garg [Wed, 8 Sep 2021 18:40:06 +0000 (18:40 +0000)]
Redesign GPU FFT abstraction
- Modify interface to allow distributed FFT implementation in future
- Provide support for choosing FFT backend at runtime. E.g. CUFFT backend can be instantiated for single-GPU FFT but HeFFTe can be instantiated in case PME decomposition is used.
This is a pre-requisite for GPU PME-decomposition implementation.
Refs #3884
Mark Abraham [Tue, 7 Sep 2021 17:38:29 +0000 (17:38 +0000)]
Introduce plumbing for ObservablesReducer
Mark Abraham [Tue, 7 Sep 2021 05:22:49 +0000 (05:22 +0000)]
Replace ResidueTypeMap with std::unordered_map
M. Eric Irrgang [Mon, 6 Sep 2021 11:26:15 +0000 (11:26 +0000)]
Describe procedure and labeling for MR closure.
Mark Abraham [Mon, 6 Sep 2021 09:24:00 +0000 (09:24 +0000)]
Use latest cmake for ASAN configuration
Paul Bauer [Fri, 3 Sep 2021 11:16:31 +0000 (11:16 +0000)]
Add support for transformation pull coordinates
Berk Hess [Thu, 2 Sep 2021 16:09:11 +0000 (16:09 +0000)]
Minor clean-up and optimization in DD topology
Mark Abraham [Wed, 1 Sep 2021 07:39:10 +0000 (07:39 +0000)]
Use better data structure to implement ResidueType
Now insertions and lookups occur in constant time, rather than linear
time. This greatly improves the many lookups needed in grompp to
build the ndx file.
Renamed entry field as entries, which works better for naming a
container.
Paul Bauer [Tue, 31 Aug 2021 07:34:47 +0000 (07:34 +0000)]
Revert "Revert "Add muparser and CMake handling""
This reverts commit
4bfdcf2ccb21b5d0702da65083e52944ca112588.
We want to add this functionality again.
Berk Hess [Mon, 30 Aug 2021 08:19:53 +0000 (10:19 +0200)]
Fix grompp note on comm removal with posres
The grompp note with position restraints and center of mass motion
removal checked for absolute reference instead of COMM removal.
This bug was introduced in commit
0c7124d7 when fixing #3996.
Fixes #4128
Berk Hess [Mon, 30 Aug 2021 07:53:39 +0000 (07:53 +0000)]
Make orires work with DD particle reordering
Andrey Alekseenko [Fri, 27 Aug 2021 12:12:57 +0000 (14:12 +0200)]
Get rid of sycl::buffer::reinterpret
This functionality is not properly supported in hipSYCL yet, and was
only needed in order to use atomic accessors. After fully switching to
atomic_ref, we can directly use buffers of Float3.
Closes #4063.
Andrey Alekseenko [Sat, 28 Aug 2021 06:26:10 +0000 (06:26 +0000)]
SYCL: Fully switch to atomic_ref
Gaurav Garg [Wed, 25 Aug 2021 08:56:18 +0000 (14:26 +0530)]
Removes PME rank dependency on Non-local X H2D copy when buffer ops are on GPU but, Halo exchange happens over host-MPI.
This was not a problem until now because because !stepWork.haveGpuPmeOnThisRank will always evaluate to true in case of domain decomposition as PME will always be on a separate rank.
But now with PME decomposition this bug gets exposed.
Refs #4125
Gaurav Garg [Fri, 27 Aug 2021 07:00:46 +0000 (07:00 +0000)]
Disable DLB if GPU direct communication Halo exchange is enabled.
M. Eric Irrgang [Thu, 26 Aug 2021 22:13:51 +0000 (22:13 +0000)]
Document Status labels for issues.
Andrey Alekseenko [Tue, 24 Aug 2021 15:13:46 +0000 (18:13 +0300)]
Add missing Doxygen for SYCL functions and some others
Sometimes it was enough to convert existing comments to Doxygen.
Now there are no SYCL-related warnings when building webpage.
Also fixed a bit of trivial clang-tidy complaints.
Dmitry Morozov [Thu, 26 Aug 2021 09:31:41 +0000 (12:31 +0300)]
Added toUpperCase and toLowerCase transformations of string
Artem Zhmurov [Thu, 26 Aug 2021 15:42:19 +0000 (15:42 +0000)]
Make the output of the constraints tests readable
In parametrized tests, the failed runs output parameters. In order
for them to be meaningfull for human, the parameter types should be
provided with function that converts them to strings. This adds
these functions for t_pbc and ConstraintsTestSystem types in
constraints tests.
Joe Jordan [Thu, 26 Aug 2021 07:14:30 +0000 (07:14 +0000)]
Add several more listed forces interaction types to nblib
Mark Abraham [Thu, 24 Jun 2021 06:52:54 +0000 (08:52 +0200)]
Find rocFFT for hipSYCL build when targeting AMD devices
We need this so that we can call rocFFT for PME GPU 3D FFT
Refs #3965
Carsten Kutzner [Wed, 25 Aug 2021 14:14:06 +0000 (16:14 +0200)]
Fixed typos in replica exchange formulas
Berk Hess [Wed, 25 Aug 2021 15:04:48 +0000 (15:04 +0000)]
Enable atom reordering in WholeMoleculeTransform
Carsten Kutzner [Wed, 25 Aug 2021 12:39:18 +0000 (14:39 +0200)]
Add back original index file content that was accidentally overwritten by MR 1761
Makes spc216.ndx functional again.
Mark Abraham [Thu, 29 Jul 2021 05:57:30 +0000 (07:57 +0200)]
Use better data structures in gmx chi
This removes part of the dependency of gmx chi histogramming from
ResidueType handling, which will permit changes to the latter that
will benefit both grompp and pdb2gmx
Replaced vectors that needed a stable numerical index to look up a
residue name with a map that uses the residue name to do the look up.
Removed capabilities of ResidueType that are no longer used.
Mark Abraham [Fri, 20 Aug 2021 17:42:24 +0000 (17:42 +0000)]
Simplify gmx chi
This change is pure refactoring that prepares for performance
improvements to ResidueType handling that will benefit both grompp and
pdb2gmx.
Use vector and ArrayRef to replace C-style memory handling. Some
histogram vectors were being over-allocated by 1, which is no longer
safe to do now that the size of the vector is relevant when looping,
so those are reduced.
Eliminated and reduce scope of iteration variables. Removed an unused
function and some debug code in comments. Used const references rather
than pointers where possible. Used range-based for and algorithms in
some places that are now possible to do so.
Mark Abraham [Fri, 20 Aug 2021 09:57:13 +0000 (09:57 +0000)]
Add tests for gmx chi
Fixed many memory leaks, unfortunately needing to add a new function
in order to work around the use of read_first_x().
Formally documented read_first_x() and read_next_x() as deprecated, as
the implementation of close_trx() in trxio.cpp has mentioned for a
long time.
Szilárd Páll [Thu, 19 Aug 2021 20:16:20 +0000 (20:16 +0000)]
Avoid using cr->duty in setupStepWorkload
Andrey Alekseenko [Thu, 19 Aug 2021 15:36:14 +0000 (18:36 +0300)]
Revert "Add workaround for CorrelationsTest with Intel ICPX"
This reverts commit
79fa11933f.
The proper fix was introduced in
f3adc2fabe (MR !1794), and
then merged into master, making the workaround from
79fa11933f (MR
!1869) obsolete.
Refs #3955.
Szilárd Páll [Wed, 18 Aug 2021 19:09:05 +0000 (21:09 +0200)]
Use workload flags more in do_md()
Paul Bauer [Tue, 29 Jun 2021 15:03:40 +0000 (17:03 +0200)]
Fix stale link in warning message.
Pointed out by user, needs a matching fix in the regression tests.
Szilárd Páll [Thu, 19 Aug 2021 13:16:27 +0000 (13:16 +0000)]
Add separate PME rank SimluationWorkload flags
Added the complete set of flags that indicate whether separate PME ranks
are used and what type of PP-PME communication is used.
These flags allow simplifications in the force schedule as well as reducing
the use of the confusingly defined cr->duty for now in do_force().
The additional benefit is a reduced reliance on passing around commrec
for checks related to parallelization.
Refs #3913
M. Eric Irrgang [Wed, 11 Aug 2021 12:16:36 +0000 (15:16 +0300)]
Update Python package version to account for merge from gmxapi 0.2.2
Andrey Alekseenko [Thu, 19 Aug 2021 09:51:13 +0000 (12:51 +0300)]
Merge remote-tracking branch 'origin/release-2021' into merge-2021-into-master
Resolved conflicts:
- cmake/gmxVersionInfo.cmake
- docs/CMakeLists.txt
- python_packaging/src/gmxapi/export_system.cpp
- python_packaging/src/setup.py
- src/gromacs/domdec/domdec.cpp
- src/gromacs/gmxana/gmx_chi.cpp
Mark Abraham [Thu, 19 Aug 2021 05:45:25 +0000 (07:45 +0200)]
Restrict scope of step and step_rel
This prevents use-before-set issues
Szilárd Páll [Wed, 18 Aug 2021 16:50:23 +0000 (18:50 +0200)]
Clarify StepWorkload doxygen
StepWorkload is rank-specific as it is also used on separate PME ranks.
Refs #3913
Szilárd Páll [Thu, 12 Aug 2021 16:57:42 +0000 (18:57 +0200)]
Add PP decomposition simluationWorkload flags
Add the complete set of flags that indicate whether there is PP
decomposition using CPU/GPU communication.
These flags allow simplifications in the force schedule.
The additional benefit is a reduced reliance on passing around commrec
for checks related to parallelization.
Refs #3913
Sebastian Wingbermuhle [Tue, 17 Aug 2021 13:47:33 +0000 (15:47 +0200)]
Prepares for the branch GROMACS 2021.4
Mark Abraham [Wed, 18 Aug 2021 14:36:19 +0000 (14:36 +0000)]
Introduce ObservablesReducer
Andrey Alekseenko [Wed, 18 Aug 2021 09:42:11 +0000 (12:42 +0300)]
Fix compiler warnings introduced in
8f6ea9eb6c (!1865)
- Add ifdef around clang-specific pragmas.
- Add newline at the end of file.
Joe Jordan [Wed, 18 Aug 2021 09:31:18 +0000 (09:31 +0000)]
Simplify nblib listed forces type tests
Andrey Alekseenko [Wed, 18 Aug 2021 08:52:57 +0000 (08:52 +0000)]
GpuEventSynchronizer: extract backend-specific functionality
No new functionality or added checks.
Preparatory work for adding advanced event accounting logic to GpuEventSynchronizer.
DeviceEvent class contains only backend-specific functions and minimal sanity checks.
The more advanced logic (the one we're trying to fix in #3988) is kept in
GpuEventSynchronizer, and currently left unchanged (1:1 for OpenCL and SYCL,
very relaxed rules for CUDA).
Refs #2527, #3988.
Sebastian Wingbermuhle [Tue, 17 Aug 2021 13:26:33 +0000 (15:26 +0200)]
Prepares for the GROMACS 2021.3 release
Mark Abraham [Wed, 18 Aug 2021 08:04:59 +0000 (08:04 +0000)]
Ensure restart with update groups always works
Berk Hess [Wed, 18 Aug 2021 06:44:03 +0000 (06:44 +0000)]
Fix mdrun -ddorder pp_pme
Mark Abraham [Tue, 17 Aug 2021 17:01:37 +0000 (17:01 +0000)]
Update GPU CI configuration
CUDA 11.4.1 updates the most recent supported versions of gcc and
clang so we should update those also.
ROCM 4.3 is out, and is more likely than any older version to be the
one we will support in 2022, so we should update them.
Several recent bug fixes in hipSYCL are worth having to avoid needing
to work around them in other changes.
Previously we re-used the hipsycl container for clang-tidy with CUDA,
but as we wish that to remain at clang version 11, we need an alternative
solution. Simplest would be to add CUDA to the linting image, but that
also builds LLVM with TSAN. As that TSAN build didn't work out of the box
on a CUDA base image, I split the TSAN image off from the image that does
linting, and added CUDA to the latter.
Andrey Alekseenko [Tue, 17 Aug 2021 16:39:44 +0000 (16:39 +0000)]
Add workaround for CorrelationsTest with Intel ICPX
Andrey Alekseenko [Tue, 17 Aug 2021 15:29:14 +0000 (15:29 +0000)]
Add basic tests for GpuEventSynchronizer
Artem Zhmurov [Tue, 17 Aug 2021 15:13:06 +0000 (15:13 +0000)]
Move the ownership of the xUpdatedOnDevice event to update constraints
Andrey Alekseenko [Thu, 1 Jul 2021 10:39:50 +0000 (13:39 +0300)]
Make ExpfitTest.EffnERREST well defined
The original test was poorly constructed, and the τ₂ fitting parameter
was not defined for the test data: with α = 1, it could take any value
and the function would fit just the same.
Here, we replace the test data with the one where 0<α<1, and thus both
τ₁ and τ₂ are well-defined.
Also updated the documentation to reflect the actual function used in
the code: it was missing a prefactor of 2.
Closes #3955
Joe Jordan [Tue, 17 Aug 2021 09:03:09 +0000 (09:03 +0000)]
Add Urey-Bradley listed interaction to nblib
Andrey Alekseenko [Tue, 17 Aug 2021 05:26:56 +0000 (05:26 +0000)]
Random cosmetic fixes
Artem Zhmurov [Mon, 16 Aug 2021 16:04:30 +0000 (19:04 +0300)]
Add common header to GpuEventSynchronizer
Move the pre-processor conditional to a common header, that can be
included unconditionally. Will simplify code unification further on.
M. Eric Irrgang [Mon, 16 Aug 2021 16:01:38 +0000 (19:01 +0300)]
Updates for updated Python version requirement.
* Update documented required Python version.
* Remove some references to Python 3.6 and 3.7.
* Cite issues where appropriate.
Refs #3716
M. Eric Irrgang [Mon, 16 Aug 2021 10:08:01 +0000 (13:08 +0300)]
Add `breathe` package to CI Python venvs.
It seems likely that at least one of the projects documented in the
GROMACS manual will want to incorporate documentation from C++ headers
(Doxygen) into the Sphinx pages. We can update the container build
script in advance so that the package will be available for
experimentation and testing after the next container rebuild.
See also #2698
Mark Abraham [Mon, 16 Aug 2021 12:05:49 +0000 (14:05 +0200)]
Remove support for Python 3.6
This version goes end-of-life before we will release GROAMCS 2022, so
we should stop testing it. We decided this a long time ago, but didn't
actually do it.
Refs #3708
Berk Hess [Tue, 29 Jun 2021 09:43:07 +0000 (11:43 +0200)]
grompp no longer modifies nstcomm
Joe Jordan [Mon, 16 Aug 2021 14:18:22 +0000 (14:18 +0000)]
Updates to nblib listed forces kernels
Joe Jordan [Mon, 16 Aug 2021 13:49:41 +0000 (13:49 +0000)]
Rework nblib kernel checks and setup code