You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Next »

big steps:

  1. standalone main calls "work" kernel we call with GPU pointers (completed)
  2. standalone main calls exc_vxc (RPBE only) interface with GPU pointers
  3. gpaw CPU version uses exc_vxc on GPU (we give exc_vxc GPU pointers)
  4. gpaw GPU version uses exc_vxc on GPU

plan for step(2):

  • starting to work in libxc source
  • start with work_gga_x.c. make work_gga_x a "shell".
  • try using nvcc for everything

questions:

  • we may run out of memory when putting more stuff on GPU
  • can gga.c call a "kernel pointer" or does work_gga_x become a "shell" that calls kernel?

to make an XC(gga_type) pointer "p" on the device:

  • need the size of params
  • swap out the info/params pointers for device pointers
  • p gpu-initialization happens at func_init time

to make "work" functions into a kernel:

  • need a _global_ in the work
  • need a _device_ in the rpbe

Porting libxc: Lessons Learned

  • use nvcc for all mixed host/gpu code
  • need to link using gcc (nvcc can't seem to link)
  • nvcc does C++ mangling. need extern "C" in some cases.
  • can't call external device functions with nvcc-compiled code?
  • No labels