Table of Contents
Welcome to The Tech Basement!
The Tech Basement is my personal knowledge base! It is organised as a wiki, but I am also using it like a blog. The subjects are programming, maths and physics, which are subjects highly related to my the PhD I'm taking in computational nuclear physics.
Check out the latest entries in The Tech Basement below!
Overview of effective interactions
In this article you'll find an overview of many effective interactions. My goal is to make nuclear shell model codes more transparent, easily accessible, and user friendly. Doesn't help that someone made a super performant code if it is not publicly available, difficult to obtain, and / or hard to use! Physicists are notorious when it comes to this, except maybe this one?
Constant values and device memory
Changing the CPU calculation of the TBMEs to be GPU accelerated proved to be quite straight-forward actually. I had done most of the hard thinking when GPU accelerating the OBME calculation. The structure of the loops had to be slightly altered and I had to get rid of the Indices
data structure inside the kernels. I solved this by chucking a bunch of constant device arrays in the global scope of hamiltonian_device.cpp
. Global scope because I had a lot of trouble defining the constant device arrays in a separate file. The mentioned constant arrays contain correctly laid-out indices for the creation and annihilation operators in the shell model hamiltonian, as well as corresponding coupled $J$ and $M$ values. These values are pre-calculated in the ''generate_indices'' function and greatly speeds up the process of generating the TBMEs. All of these values are completely constant during the entire run time of the program and they are therefore aptly placed in the constant memory of the GPU (which apparently work a bit differently in AMD compared to Nvidia). The basis states are also constant during the entire run time of the program, but have to be placed in dynamic memory on the device because of the potentially huge size of the array. Well, they're not completely constant as they have to be calculated at the beginning of the program, but once they are calculated they do not change.
NB: The text is incomplete and I have to go through it thoroughly!
I'll dot down some thoughts about one-body transition operators and one-body transition densities here. Please do a fact-check on what I write here as these words are quick thoughts.
Discussion