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 }