I recently developed a library implementating automatic differentiation and linear algebra subroutines, combining these to produce a library which is able to optimise layered computational graphs. The library can be found here Currently the execution provider for the computation is the CPU. Now I built this library from ‘scratch’; relying only on libraries that come with the standard python distribution. What I want to ask is how does one, as bare bones as possible, move computation from the CPU to the GPU in python? I know libraries exist like numba to help achieve this, but these are meant to work with other libraries like numpy which I want to avoid. So does anyone which direction I should head in to achieve this goal; moving instructions to be executed from the CPU to the GPU? What lower level interface software should I be looking into? In essence, how does numba achieve this? I would like to restrict the manufacture of GPUs to ones produced by NVIDIA, if that helps you with answering this question. Again, I would like to go as ‘bare-bones’ as possible. I understand I will need additional lower level libraries to achieve this but what exactly are these libraries? Continue reading...