1 package hat.backend;
 2 
 3 
 4 import hat.ComputeContext;
 5 import hat.KernelContext;
 6 import hat.callgraph.KernelCallGraph;
 7 
 8 public class HIPBackend extends C99NativeBackend {
 9     public HIPBackend() {
10         super("hip_backend");
11         getBackend(null);
12         info();
13     }
14 
15     @Override
16     public void computeContextHandoff(ComputeContext computeContext) {
17         injectBufferTracking(computeContext.computeCallGraph.entrypoint);
18 
19     }
20 
21     @Override
22     public void dispatchKernel(KernelCallGraph kernelCallGraph, KernelContext kernelContext, Object... args) {
23         CompiledKernel compiledKernel = kernelCallGraphCompiledCodeMap.computeIfAbsent(kernelCallGraph, (_) -> {
24             String code = createCode(kernelCallGraph, new HIPHatKernelBuilder(), args);
25             long programHandle = compileProgram(code);
26             if (programOK(programHandle)) {
27                 long kernelHandle = getKernel(programHandle, kernelCallGraph.entrypoint.method.getName());
28                 return new CompiledKernel(this, kernelCallGraph, code, kernelHandle, args);
29             } else {
30                 throw new IllegalStateException("HIP failed to compile ");
31             }
32         });
33         compiledKernel.dispatch(KernelContext, args);
34     }
35 }