1 /******************************************************************************* 2 * Copyright 2021 Intel Corporation 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 *******************************************************************************/ 16 17 // Proxy classes for selected nGEN functionality to minimize dependency on 18 // template-heavy nGEN headers, and reduce compilation time. 19 20 #ifndef GPU_JIT_CONV_NGEN_PROXY_HPP 21 #define GPU_JIT_CONV_NGEN_PROXY_HPP 22 23 #include "gpu/jit/conv/utils.hpp" 24 25 namespace dnnl { 26 namespace impl { 27 namespace gpu { 28 namespace jit { 29 namespace ngen_proxy { 30 31 enum class Access { Read, Write }; 32 33 enum AddressModel { 34 ModelInvalid, 35 ModelBTS, 36 ModelA64, 37 ModelSLM, 38 }; 39 40 enum AtomicOp { undef, fadd }; 41 42 class Bundle { 43 public: Bundle()44 Bundle() : bundle_id(any), bank_id(any) {} 45 Bundle(int8_t bank_id_,int8_t bundle_id_)46 Bundle(int8_t bank_id_, int8_t bundle_id_) 47 : bundle_id(bundle_id_), bank_id(bank_id_) {} 48 operator ==(const Bundle & other) const49 bool operator==(const Bundle &other) const { 50 return (bundle_id == other.bundle_id) && (bank_id == other.bank_id); 51 } 52 53 static const int8_t any = -1; 54 55 int8_t bundle_id; 56 int8_t bank_id; 57 }; 58 59 class SBID { 60 public: SBID(int token=-1)61 SBID(int token = -1) : token(token) {} 62 is_empty() const63 bool is_empty() const { return token == -1; } 64 65 int token; 66 }; 67 68 class InstructionModifier { 69 public: operator ==(const InstructionModifier & other) const70 bool operator==(const InstructionModifier &other) const { 71 return (is_atomic == other.is_atomic); 72 } 73 get_hash() const74 size_t get_hash() const { return ir_utils::get_hash(is_atomic); } 75 with_atomic() const76 InstructionModifier with_atomic() const { 77 auto ret = *this; 78 ret.is_atomic = true; 79 return ret; 80 } 81 with_sbid(const SBID & sbid) const82 InstructionModifier with_sbid(const SBID &sbid) const { 83 auto ret = *this; 84 ret.sbid = sbid; 85 return ret; 86 } 87 88 bool is_atomic = false; 89 SBID sbid; 90 }; 91 92 } // namespace ngen_proxy 93 } // namespace jit 94 } // namespace gpu 95 } // namespace impl 96 } // namespace dnnl 97 98 #endif 99