From 95f93215977ed8f656614dbbcff51a78180ebe3c Mon Sep 17 00:00:00 2001 From: Akash Kothari <akashk4@miranda.cs.illinois.edu> Date: Tue, 22 Dec 2020 11:11:59 -0600 Subject: [PATCH] Fix the CUDNN targets and remove unused targets --- hpvm/include/SupportHPVM/DFG2LLVM.h | 16 +--------------- hpvm/include/SupportHPVM/DFGraph.h | 16 ++++++++-------- hpvm/include/SupportHPVM/HPVMHint.h | 3 --- hpvm/include/SupportHPVM/HPVMUtils.h | 24 +++++++++++++++++++++--- 4 files changed, 30 insertions(+), 29 deletions(-) diff --git a/hpvm/include/SupportHPVM/DFG2LLVM.h b/hpvm/include/SupportHPVM/DFG2LLVM.h index c2270de3cf..365fd2ebdd 100644 --- a/hpvm/include/SupportHPVM/DFG2LLVM.h +++ b/hpvm/include/SupportHPVM/DFG2LLVM.h @@ -168,15 +168,9 @@ bool CodeGenTraversal::checkPreferredTarget(DFNode *N, hpvm::Target T) { case hpvm::GPU_TARGET: HintNode = M->getOrInsertNamedMetadata("hpvm_hint_gpu"); break; - case hpvm::SPIR_TARGET: - HintNode = M->getOrInsertNamedMetadata("hpvm_hint_spir"); - break; case hpvm::CUDNN_TARGET: HintNode = M->getOrInsertNamedMetadata("hpvm_hint_cudnn"); break; - case hpvm::PROMISE_TARGET: - HintNode = M->getOrInsertNamedMetadata("hpvm_hint_promise"); - break; case hpvm::CPU_TARGET: HintNode = M->getOrInsertNamedMetadata("hpvm_hint_cpu"); break; @@ -207,10 +201,6 @@ bool CodeGenTraversal::preferredTargetIncludes(DFNode *N, hpvm::Target T) { HintNode.push_back(M->getOrInsertNamedMetadata("hpvm_hint_gpu")); HintNode.push_back(M->getOrInsertNamedMetadata("hpvm_hint_cpu_gpu")); break; - case hpvm::SPIR_TARGET: - HintNode.push_back(M->getOrInsertNamedMetadata("hpvm_hint_spir")); - HintNode.push_back(M->getOrInsertNamedMetadata("hpvm_hint_cpu_spir")); - break; case hpvm::CPU_TARGET: HintNode.push_back(M->getOrInsertNamedMetadata("hpvm_hint_cpu")); HintNode.push_back(M->getOrInsertNamedMetadata("hpvm_hint_cpu_gpu")); @@ -219,12 +209,8 @@ bool CodeGenTraversal::preferredTargetIncludes(DFNode *N, hpvm::Target T) { case hpvm::CUDNN_TARGET: HintNode.push_back(M->getOrInsertNamedMetadata("hpvm_hint_cudnn")); break; - case hpvm::PROMISE_TARGET: - HintNode.push_back(M->getOrInsertNamedMetadata("hpvm_hint_promise")); - break; case hpvm::CPU_OR_GPU_TARGET: - case hpvm::CPU_OR_SPIR_TARGET: - assert(false && "Target should be one of CPU/GPU/SPIR\n"); + assert(false && "Target should be one of CPU/GPU\n"); break; default: llvm_unreachable("Target Not supported yet!"); diff --git a/hpvm/include/SupportHPVM/DFGraph.h b/hpvm/include/SupportHPVM/DFGraph.h index e7f3c5bc78..fae04b7c8f 100644 --- a/hpvm/include/SupportHPVM/DFGraph.h +++ b/hpvm/include/SupportHPVM/DFGraph.h @@ -45,17 +45,13 @@ class DFGraph; struct TargetGenFunctions { Function *CPUGenFunc; Function *GPUGenFunc; - Function *SPIRGenFunc; Function *CUDNNGenFunc; - Function *PROMISEGenFunc; }; struct TargetGenFuncInfo { bool cpu_hasCPUFunc; bool gpu_hasCPUFunc; - bool spir_hasCPUFunc; bool cudnn_hasCPUFunc; - bool promise_hasCPUFunc; }; class DFGraph { @@ -376,6 +372,8 @@ public: return GenFuncInfo.cpu_hasCPUFunc; case hpvm::GPU_TARGET: return GenFuncInfo.gpu_hasCPUFunc; + case hpvm::CUDNN_TARGET: + return GenFuncInfo.cudnn_hasCPUFunc; case hpvm::CPU_OR_GPU_TARGET: assert(false && "Single target expected (CPU/GPU/SPIR/CUDNN/PROMISE)\n"); default: @@ -421,6 +419,8 @@ public: return GenFuncs.CPUGenFunc; case hpvm::GPU_TARGET: return GenFuncs.GPUGenFunc; + case hpvm::CUDNN_TARGET: + return GenFuncs.CUDNNGenFunc; case hpvm::CPU_OR_GPU_TARGET: assert(false && "Requesting genarated node function with dual tag instead of \ @@ -443,6 +443,10 @@ public: GenFuncs.GPUGenFunc = NULL; GenFuncInfo.gpu_hasCPUFunc = false; break; + case hpvm::CUDNN_TARGET: + GenFuncs.CUDNNGenFunc = NULL; + GenFuncInfo.cudnn_hasCPUFunc = false; + break; case hpvm::CPU_OR_GPU_TARGET: assert(false && "Removing genarated node function with dual tag instead of \ @@ -686,14 +690,10 @@ DFNode::DFNode(IntrinsicInst *_II, Function *_FuncPointer, hpvm::Target _Hint, Tag = hpvm::None; GenFuncs.CPUGenFunc = NULL; GenFuncs.GPUGenFunc = NULL; - GenFuncs.SPIRGenFunc = NULL; GenFuncs.CUDNNGenFunc = NULL; - GenFuncs.PROMISEGenFunc = NULL; GenFuncInfo.cpu_hasCPUFunc = false; GenFuncInfo.gpu_hasCPUFunc = false; - GenFuncInfo.spir_hasCPUFunc = false; - GenFuncInfo.cudnn_hasCPUFunc = false; GenFuncInfo.cudnn_hasCPUFunc = false; } diff --git a/hpvm/include/SupportHPVM/HPVMHint.h b/hpvm/include/SupportHPVM/HPVMHint.h index 1ef4c6eb3b..b83d09db1b 100644 --- a/hpvm/include/SupportHPVM/HPVMHint.h +++ b/hpvm/include/SupportHPVM/HPVMHint.h @@ -19,11 +19,8 @@ enum Target { None, CPU_TARGET, GPU_TARGET, - SPIR_TARGET, CUDNN_TARGET, - PROMISE_TARGET, CPU_OR_GPU_TARGET, - CPU_OR_SPIR_TARGET, // ALL_TARGETS, NUM_TARGETS }; diff --git a/hpvm/include/SupportHPVM/HPVMUtils.h b/hpvm/include/SupportHPVM/HPVMUtils.h index 537a92caec..703ae78028 100644 --- a/hpvm/include/SupportHPVM/HPVMUtils.h +++ b/hpvm/include/SupportHPVM/HPVMUtils.h @@ -127,6 +127,7 @@ void fixHintMetadata(Module &M, Function *F, Function *G) { FixHint("hpvm_hint_gpu"); FixHint("hpvm_hint_cpu"); FixHint("hpvm_hint_cpu_gpu"); + FixHint("hpvm_hint_cudnn"); } // Assuming that the changed function is a node function, it is only used as a @@ -392,18 +393,23 @@ bool tagIncludesTarget(hpvm::Target Tag, hpvm::Target T) { (T == hpvm::CPU_OR_GPU_TARGET)) return true; return false; + case hpvm::CUDNN_TARGET: + if (T == hpvm::CUDNN_TARGET) + return true; + return false; default: assert(false && "Unknown Target\n"); } } bool isSingleTargetTag(hpvm::Target T) { - return ((T == hpvm::CPU_TARGET) || (T == hpvm::GPU_TARGET)); + return ((T == hpvm::CPU_TARGET) || (T == hpvm::GPU_TARGET) || (T == hpvm::CUDNN_TARGET)); } // Add the specified target to the given tag hpvm::Target getUpdatedTag(hpvm::Target Tag, hpvm::Target T) { - assert(((T == hpvm::CPU_TARGET) || (T == hpvm::GPU_TARGET)) && + assert(((T == hpvm::CPU_TARGET) || (T == hpvm::GPU_TARGET) + || (T == hpvm::CUDNN_TARGET)) && "The target is only allowed to be a single target: CPU, GPU, SPIR, " "CUDNN, PROMISE\n"); @@ -411,19 +417,23 @@ hpvm::Target getUpdatedTag(hpvm::Target Tag, hpvm::Target T) { case hpvm::None: return T; case hpvm::CPU_TARGET: + assert((T != hpvm::CUDNN_TARGET) && "Unsupported target combination\n"); if (T == hpvm::CPU_TARGET) return hpvm::CPU_TARGET; if (T == hpvm::GPU_TARGET) return hpvm::CPU_OR_GPU_TARGET; return T; case hpvm::GPU_TARGET: + assert((T != hpvm::CUDNN_TARGET) && "Unsupported target combination\n"); if (T == hpvm::CPU_TARGET) return hpvm::CPU_OR_GPU_TARGET; if (T == hpvm::GPU_TARGET) return hpvm::GPU_TARGET; return T; case hpvm::CPU_OR_GPU_TARGET: + assert((T != hpvm::CUDNN_TARGET) && "Unsupported target combination\n"); return hpvm::CPU_OR_GPU_TARGET; + case default: assert(false && "Unknown Target\n"); } @@ -451,6 +461,10 @@ void addHint(Function *F, hpvm::Target T) { DEBUG(errs() << "CPU or GPU Target\n"); HintNode = M->getOrInsertNamedMetadata("hpvm_hint_cpu_gpu"); break; + case hpvm::CUDNN_TARGET: + DEBUG(errs() << "CUDNN Target\n"); + HintNode = M->getOrInsertNamedMetadata("hpvm_hint_cudnn"); + break; default: llvm_unreachable("Unsupported Target Hint!"); break; @@ -481,6 +495,9 @@ void removeHint(Function *F, hpvm::Target T) { case hpvm::CPU_TARGET: HintNode = M->getOrInsertNamedMetadata("hpvm_hint_cpu"); break; + case hpvm::CUDNN_TARGET: + HintNode = M->getOrInsertNamedMetadata("hpvm_hint_cudnn"); + break; default: llvm_unreachable("Unsupported Target Hint!"); break; @@ -528,7 +545,8 @@ hpvm::Target getPreferredTarget(Function *F) { return hpvm::GPU_TARGET; if (FoundPrefTarget("hpvm_hint_cpu_gpu")) return hpvm::CPU_OR_GPU_TARGET; - + if (FoundPrefTarget("hpvm_hint_cudnn")) + return hpvm::CUDNN_TARGET; return hpvm::None; } -- GitLab