GPU.py revision 11534:7106f550afad
15392Sgblack@eecs.umich.edu# 25392Sgblack@eecs.umich.edu# Copyright (c) 2015 Advanced Micro Devices, Inc. 35392Sgblack@eecs.umich.edu# All rights reserved. 45392Sgblack@eecs.umich.edu# 55392Sgblack@eecs.umich.edu# For use for simulation and test purposes only 65392Sgblack@eecs.umich.edu# 75392Sgblack@eecs.umich.edu# Redistribution and use in source and binary forms, with or without 85392Sgblack@eecs.umich.edu# modification, are permitted provided that the following conditions are met: 95392Sgblack@eecs.umich.edu# 105392Sgblack@eecs.umich.edu# 1. Redistributions of source code must retain the above copyright notice, 115392Sgblack@eecs.umich.edu# this list of conditions and the following disclaimer. 125392Sgblack@eecs.umich.edu# 135392Sgblack@eecs.umich.edu# 2. Redistributions in binary form must reproduce the above copyright notice, 145392Sgblack@eecs.umich.edu# this list of conditions and the following disclaimer in the documentation 155392Sgblack@eecs.umich.edu# and/or other materials provided with the distribution. 165392Sgblack@eecs.umich.edu# 175392Sgblack@eecs.umich.edu# 3. Neither the name of the copyright holder nor the names of its contributors 185392Sgblack@eecs.umich.edu# may be used to endorse or promote products derived from this software 195392Sgblack@eecs.umich.edu# without specific prior written permission. 205392Sgblack@eecs.umich.edu# 215392Sgblack@eecs.umich.edu# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 225392Sgblack@eecs.umich.edu# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 235392Sgblack@eecs.umich.edu# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 245392Sgblack@eecs.umich.edu# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 255392Sgblack@eecs.umich.edu# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 265392Sgblack@eecs.umich.edu# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 275392Sgblack@eecs.umich.edu# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 285392Sgblack@eecs.umich.edu# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 295392Sgblack@eecs.umich.edu# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 305392Sgblack@eecs.umich.edu# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 315392Sgblack@eecs.umich.edu# POSSIBILITY OF SUCH DAMAGE. 325392Sgblack@eecs.umich.edu# 335392Sgblack@eecs.umich.edu# Author: Steve Reinhardt 345392Sgblack@eecs.umich.edu# 358229Snate@binkert.org 365392Sgblack@eecs.umich.edufrom ClockedObject import ClockedObject 375392Sgblack@eecs.umich.edufrom Device import DmaDevice 385813Sgblack@eecs.umich.edufrom m5.defines import buildEnv 395392Sgblack@eecs.umich.edufrom m5.params import * 405392Sgblack@eecs.umich.edufrom m5.proxy import * 418232Snate@binkert.orgfrom m5.SimObject import SimObject 425392Sgblack@eecs.umich.edufrom MemObject import MemObject 435392Sgblack@eecs.umich.edufrom Process import EmulatedDriver 445392Sgblack@eecs.umich.edufrom Bridge import Bridge 455392Sgblack@eecs.umich.edufrom LdsState import LdsState 465392Sgblack@eecs.umich.edu 476620Sgblack@eecs.umich.educlass PrefetchType(Enum): vals = [ 486620Sgblack@eecs.umich.edu 'PF_CU', 495392Sgblack@eecs.umich.edu 'PF_PHASE', 506620Sgblack@eecs.umich.edu 'PF_WF', 516620Sgblack@eecs.umich.edu 'PF_STRIDE', 526620Sgblack@eecs.umich.edu 'PF_END', 536620Sgblack@eecs.umich.edu ] 546620Sgblack@eecs.umich.edu 555392Sgblack@eecs.umich.educlass VectorRegisterFile(SimObject): 566621Sgblack@eecs.umich.edu type = 'VectorRegisterFile' 576621Sgblack@eecs.umich.edu cxx_class = 'VectorRegisterFile' 586621Sgblack@eecs.umich.edu cxx_header = 'gpu-compute/vector_register_file.hh' 596621Sgblack@eecs.umich.edu 606621Sgblack@eecs.umich.edu simd_id = Param.Int(0, 'SIMD ID associated with this VRF') 616621Sgblack@eecs.umich.edu num_regs_per_simd = Param.Int(2048, 'number of vector registers per SIMD') 626621Sgblack@eecs.umich.edu wfSize = Param.Int(64, 'Wavefront size (in work items)') 636621Sgblack@eecs.umich.edu min_alloc = Param.Int(4, 'min number of VGPRs allocated per WF') 646621Sgblack@eecs.umich.edu 656620Sgblack@eecs.umich.educlass Wavefront(SimObject): 666620Sgblack@eecs.umich.edu type = 'Wavefront' 676620Sgblack@eecs.umich.edu cxx_class = 'Wavefront' 686620Sgblack@eecs.umich.edu cxx_header = 'gpu-compute/wavefront.hh' 695392Sgblack@eecs.umich.edu 705392Sgblack@eecs.umich.edu simdId = Param.Int('SIMD id (0-ComputeUnit.num_SIMDs)') 715392Sgblack@eecs.umich.edu wf_slot_id = Param.Int('wavefront id (0-ComputeUnit.max_wfs)') 725392Sgblack@eecs.umich.edu wfSize = Param.Int(64, 'Wavefront size (in work items)') 735392Sgblack@eecs.umich.edu 745392Sgblack@eecs.umich.educlass ComputeUnit(MemObject): 755392Sgblack@eecs.umich.edu type = 'ComputeUnit' 765392Sgblack@eecs.umich.edu cxx_class = 'ComputeUnit' 775392Sgblack@eecs.umich.edu cxx_header = 'gpu-compute/compute_unit.hh' 785392Sgblack@eecs.umich.edu 795392Sgblack@eecs.umich.edu wavefronts = VectorParam.Wavefront('Number of wavefronts') 809730Sandreas@sandberg.pp.se wfSize = Param.Int(64, 'Wavefront size (in work items)') 816620Sgblack@eecs.umich.edu num_SIMDs = Param.Int(4, 'number of SIMD units per CU') 826620Sgblack@eecs.umich.edu 836620Sgblack@eecs.umich.edu spbypass_pipe_length = Param.Int(4, 'vector ALU Single Precision bypass '\ 846620Sgblack@eecs.umich.edu 'latency') 856620Sgblack@eecs.umich.edu 866620Sgblack@eecs.umich.edu dpbypass_pipe_length = Param.Int(8, 'vector ALU Double Precision bypass '\ 876620Sgblack@eecs.umich.edu 'latency') 886620Sgblack@eecs.umich.edu 896620Sgblack@eecs.umich.edu issue_period = Param.Int(4, 'number of cycles per issue period') 906620Sgblack@eecs.umich.edu num_global_mem_pipes = Param.Int(1,'number of global memory pipes per CU') 916620Sgblack@eecs.umich.edu num_shared_mem_pipes = Param.Int(1,'number of shared memory pipes per CU') 926620Sgblack@eecs.umich.edu n_wf = Param.Int(1, 'Number of wavefront slots per SIMD') 936620Sgblack@eecs.umich.edu mem_req_latency = Param.Int(9, "Latency for request from the cu to ruby. "\ 946620Sgblack@eecs.umich.edu "Represents the pipeline to reach the TCP and "\ 956620Sgblack@eecs.umich.edu "specified in GPU clock cycles") 966620Sgblack@eecs.umich.edu mem_resp_latency = Param.Int(9, "Latency for responses from ruby to the "\ 976620Sgblack@eecs.umich.edu "cu. Represents the pipeline between the TCP "\ 989730Sandreas@sandberg.pp.se "and cu as well as TCP data array access. "\ 999730Sandreas@sandberg.pp.se "Specified in GPU clock cycles") 1009730Sandreas@sandberg.pp.se system = Param.System(Parent.any, "system object") 1019730Sandreas@sandberg.pp.se cu_id = Param.Int('CU id') 1029730Sandreas@sandberg.pp.se vrf_to_coalescer_bus_width = Param.Int(32, "VRF->Coalescer data bus width "\ 1039730Sandreas@sandberg.pp.se "in bytes") 1049730Sandreas@sandberg.pp.se coalescer_to_vrf_bus_width = Param.Int(32, "Coalescer->VRF data bus width "\ 1059730Sandreas@sandberg.pp.se "in bytes") 1069730Sandreas@sandberg.pp.se 1076620Sgblack@eecs.umich.edu memory_port = VectorMasterPort("Port to the memory system") 1086620Sgblack@eecs.umich.edu translation_port = VectorMasterPort('Port to the TLB hierarchy') 1095392Sgblack@eecs.umich.edu sqc_port = MasterPort("Port to the SQC (I-cache") 1105392Sgblack@eecs.umich.edu sqc_tlb_port = MasterPort("Port to the TLB for the SQC (I-cache)") 1115392Sgblack@eecs.umich.edu perLaneTLB = Param.Bool(False, "enable per-lane TLB") 1125606Snate@binkert.org prefetch_depth = Param.Int(0, "Number of prefetches triggered at a time"\ 1135606Snate@binkert.org "(0 turns off prefetching)") 1147683Ssteve.reinhardt@amd.com prefetch_stride = Param.Int(1, "Fixed Prefetch Stride (1 means next-page)") 1157683Ssteve.reinhardt@amd.com prefetch_prev_type = Param.PrefetchType('PF_PHASE', "Prefetch the stride "\ 1165606Snate@binkert.org "from last mem req in lane of "\ 1175606Snate@binkert.org "CU|Phase|Wavefront") 1189730Sandreas@sandberg.pp.se execPolicy = Param.String("OLDEST-FIRST", "WF execution selection policy"); 1199730Sandreas@sandberg.pp.se xactCasMode = Param.Bool(False, "Behavior of xact_cas_load magic instr."); 1209730Sandreas@sandberg.pp.se debugSegFault = Param.Bool(False, "enable debugging GPU seg faults") 1219730Sandreas@sandberg.pp.se functionalTLB = Param.Bool(False, "Assume TLB causes no delay") 1229730Sandreas@sandberg.pp.se 1239730Sandreas@sandberg.pp.se localMemBarrier = Param.Bool(False, "Assume Barriers do not wait on "\ 1249730Sandreas@sandberg.pp.se "kernel end") 1255392Sgblack@eecs.umich.edu 12610631Scdirik@micron.com countPages = Param.Bool(False, "Generate per-CU file of all pages touched "\ 12710631Scdirik@micron.com "and how many times") 12810631Scdirik@micron.com global_mem_queue_size = Param.Int(256, "Number of entries in the global " 12910631Scdirik@micron.com "memory pipeline's queues") 13010777Snikos.nikoleris@gmail.com local_mem_queue_size = Param.Int(256, "Number of entries in the local " 13110777Snikos.nikoleris@gmail.com "memory pipeline's queues") 13210777Snikos.nikoleris@gmail.com ldsBus = Bridge() # the bridge between the CU and its LDS 13310777Snikos.nikoleris@gmail.com ldsPort = MasterPort("The port that goes to the LDS") 13410777Snikos.nikoleris@gmail.com localDataStore = Param.LdsState("the LDS for this CU") 13510631Scdirik@micron.com 13610631Scdirik@micron.com vector_register_file = VectorParam.VectorRegisterFile("Vector register "\ 13710631Scdirik@micron.com "file") 1385392Sgblack@eecs.umich.edu 1395392Sgblack@eecs.umich.educlass Shader(ClockedObject): 1409730Sandreas@sandberg.pp.se type = 'Shader' 1419730Sandreas@sandberg.pp.se cxx_class = 'Shader' 1426621Sgblack@eecs.umich.edu cxx_header = 'gpu-compute/shader.hh' 1435392Sgblack@eecs.umich.edu 1446621Sgblack@eecs.umich.edu CUs = VectorParam.ComputeUnit('Number of compute units') 1456621Sgblack@eecs.umich.edu n_wf = Param.Int(1, 'Number of wavefront slots per SIMD') 1466621Sgblack@eecs.umich.edu impl_kern_boundary_sync = Param.Bool(True, """Insert acq/rel packets into 1476621Sgblack@eecs.umich.edu ruby at kernel boundaries""") 1486621Sgblack@eecs.umich.edu separate_acquire_release = Param.Bool(False, 1496621Sgblack@eecs.umich.edu """Do ld_acquire/st_release generate separate requests for the 1506621Sgblack@eecs.umich.edu acquire and release?""") 1516621Sgblack@eecs.umich.edu globalmem = Param.MemorySize('64kB', 'Memory size') 1525392Sgblack@eecs.umich.edu timing = Param.Bool(False, 'timing memory accesses') 1539730Sandreas@sandberg.pp.se 1549730Sandreas@sandberg.pp.se cpu_pointer = Param.BaseCPU(NULL, "pointer to base CPU") 1559730Sandreas@sandberg.pp.se translation = Param.Bool(False, "address translation"); 1569730Sandreas@sandberg.pp.se 1579730Sandreas@sandberg.pp.seclass ClDriver(EmulatedDriver): 1589730Sandreas@sandberg.pp.se type = 'ClDriver' 1599731Sandreas@sandberg.pp.se cxx_header = 'gpu-compute/cl_driver.hh' 1609731Sandreas@sandberg.pp.se codefile = VectorParam.String('code file name(s)') 1619730Sandreas@sandberg.pp.se 1629730Sandreas@sandberg.pp.seclass GpuDispatcher(DmaDevice): 1639730Sandreas@sandberg.pp.se type = 'GpuDispatcher' 1649730Sandreas@sandberg.pp.se cxx_header = 'gpu-compute/dispatcher.hh' 1659730Sandreas@sandberg.pp.se # put at 8GB line for now 1669730Sandreas@sandberg.pp.se pio_addr = Param.Addr(0x200000000, "Device Address") 1679730Sandreas@sandberg.pp.se pio_latency = Param.Latency('1ns', "Programmed IO latency") 1689730Sandreas@sandberg.pp.se shader_pointer = Param.Shader('pointer to shader') 1699730Sandreas@sandberg.pp.se translation_port = MasterPort('Port to the dispatcher TLB') 1709730Sandreas@sandberg.pp.se cpu = Param.BaseCPU("CPU to wake up on kernel completion") 1719731Sandreas@sandberg.pp.se 1729731Sandreas@sandberg.pp.se cl_driver = Param.ClDriver('pointer to driver') 1739731Sandreas@sandberg.pp.se 1749731Sandreas@sandberg.pp.seclass OpType(Enum): vals = [ 1759731Sandreas@sandberg.pp.se 'OT_NULL', 1769731Sandreas@sandberg.pp.se 'OT_ALU', 1779731Sandreas@sandberg.pp.se 'OT_SPECIAL', 1789739Sandreas@sandberg.pp.se 'OT_GLOBAL_READ', 1799739Sandreas@sandberg.pp.se 'OT_GLOBAL_WRITE', 1809739Sandreas@sandberg.pp.se 'OT_GLOBAL_ATOMIC', 1819739Sandreas@sandberg.pp.se 'OT_GLOBAL_HIST', 1829731Sandreas@sandberg.pp.se 'OT_GLOBAL_LDAS', 1839731Sandreas@sandberg.pp.se 'OT_SHARED_READ', 1849731Sandreas@sandberg.pp.se 'OT_SHARED_WRITE', 1859730Sandreas@sandberg.pp.se 'OT_SHARED_ATOMIC', 1865392Sgblack@eecs.umich.edu 'OT_SHARED_HIST', 1879730Sandreas@sandberg.pp.se 'OT_SHARED_LDAS', 1889730Sandreas@sandberg.pp.se 'OT_PRIVATE_READ', 1899730Sandreas@sandberg.pp.se 'OT_PRIVATE_WRITE', 1909730Sandreas@sandberg.pp.se 'OT_PRIVATE_ATOMIC', 1919730Sandreas@sandberg.pp.se 'OT_PRIVATE_HIST', 1929730Sandreas@sandberg.pp.se 'OT_PRIVATE_LDAS', 1939730Sandreas@sandberg.pp.se 'OT_SPILL_READ', 1949730Sandreas@sandberg.pp.se 'OT_SPILL_WRITE', 1959730Sandreas@sandberg.pp.se 'OT_SPILL_ATOMIC', 1969730Sandreas@sandberg.pp.se 'OT_SPILL_HIST', 1979730Sandreas@sandberg.pp.se 'OT_SPILL_LDAS', 1989730Sandreas@sandberg.pp.se 'OT_READONLY_READ', 1999730Sandreas@sandberg.pp.se 'OT_READONLY_WRITE', 2009730Sandreas@sandberg.pp.se 'OT_READONLY_ATOMIC', 2019730Sandreas@sandberg.pp.se 'OT_READONLY_HIST', 2029730Sandreas@sandberg.pp.se 'OT_READONLY_LDAS', 2039730Sandreas@sandberg.pp.se 'OT_FLAT_READ', 2049730Sandreas@sandberg.pp.se 'OT_FLAT_WRITE', 2059730Sandreas@sandberg.pp.se 'OT_FLAT_ATOMIC', 2069730Sandreas@sandberg.pp.se 'OT_FLAT_HIST', 2079730Sandreas@sandberg.pp.se 'OT_FLAT_LDAS', 2089730Sandreas@sandberg.pp.se 'OT_KERN_READ', 2099730Sandreas@sandberg.pp.se 'OT_BRANCH', 2109730Sandreas@sandberg.pp.se 2115392Sgblack@eecs.umich.edu # note: Only the OT_BOTH_MEMFENCE seems to be supported in the 1.0F version 2125392Sgblack@eecs.umich.edu # of the compiler. 2135392Sgblack@eecs.umich.edu 'OT_SHARED_MEMFENCE', 2145392Sgblack@eecs.umich.edu 'OT_GLOBAL_MEMFENCE', 2155606Snate@binkert.org 'OT_BOTH_MEMFENCE', 2165392Sgblack@eecs.umich.edu 2175392Sgblack@eecs.umich.edu 'OT_BARRIER', 2185392Sgblack@eecs.umich.edu 'OT_PRINT', 2195392Sgblack@eecs.umich.edu 'OT_RET', 2205392Sgblack@eecs.umich.edu 'OT_NOP', 2215392Sgblack@eecs.umich.edu 'OT_ARG' 2225392Sgblack@eecs.umich.edu ] 2235392Sgblack@eecs.umich.edu 2249730Sandreas@sandberg.pp.seclass MemType(Enum): vals = [ 2259730Sandreas@sandberg.pp.se 'M_U8', 2269730Sandreas@sandberg.pp.se 'M_U16', 2279730Sandreas@sandberg.pp.se 'M_U32', 2285392Sgblack@eecs.umich.edu 'M_U64', 2295392Sgblack@eecs.umich.edu 'M_S8', 2305392Sgblack@eecs.umich.edu 'M_S16', 2315392Sgblack@eecs.umich.edu 'M_S32', 2325392Sgblack@eecs.umich.edu 'M_S64', 2335392Sgblack@eecs.umich.edu 'M_F16', 2345392Sgblack@eecs.umich.edu 'M_F32', 2355392Sgblack@eecs.umich.edu 'M_F64', 2365392Sgblack@eecs.umich.edu ] 2375392Sgblack@eecs.umich.edu 2385392Sgblack@eecs.umich.educlass MemOpType(Enum): vals = [ 2399730Sandreas@sandberg.pp.se 'MO_LD', 2405392Sgblack@eecs.umich.edu 'MO_ST', 2415392Sgblack@eecs.umich.edu 'MO_LDAS', 2425392Sgblack@eecs.umich.edu 'MO_LDA', 2435392Sgblack@eecs.umich.edu 'MO_AAND', 2445392Sgblack@eecs.umich.edu 'MO_AOR', 2455392Sgblack@eecs.umich.edu 'MO_AXOR', 2465392Sgblack@eecs.umich.edu 'MO_ACAS', 2475392Sgblack@eecs.umich.edu 'MO_AEXCH', 2485392Sgblack@eecs.umich.edu 'MO_AADD', 2495392Sgblack@eecs.umich.edu 'MO_ASUB', 2505392Sgblack@eecs.umich.edu 'MO_AINC', 2515392Sgblack@eecs.umich.edu 'MO_ADEC', 2525392Sgblack@eecs.umich.edu 'MO_AMAX', 2535392Sgblack@eecs.umich.edu 'MO_AMIN', 2545392Sgblack@eecs.umich.edu 'MO_ANRAND', 2556620Sgblack@eecs.umich.edu 'MO_ANROR', 2566620Sgblack@eecs.umich.edu 'MO_ANRXOR', 2576620Sgblack@eecs.umich.edu 'MO_ANRCAS', 2589731Sandreas@sandberg.pp.se 'MO_ANREXCH', 2599731Sandreas@sandberg.pp.se 'MO_ANRADD', 2609730Sandreas@sandberg.pp.se 'MO_ANRSUB', 2616620Sgblack@eecs.umich.edu 'MO_ANRINC', 2626620Sgblack@eecs.umich.edu 'MO_ANRDEC', 2636620Sgblack@eecs.umich.edu 'MO_ANRMAX', 2646620Sgblack@eecs.umich.edu 'MO_ANRMIN', 2656620Sgblack@eecs.umich.edu 'MO_HAND', 2666620Sgblack@eecs.umich.edu 'MO_HOR', 2675392Sgblack@eecs.umich.edu 'MO_HXOR', 26810905Sandreas.sandberg@arm.com 'MO_HCAS', 2695392Sgblack@eecs.umich.edu 'MO_HEXCH', 2709730Sandreas@sandberg.pp.se 'MO_HADD', 2719730Sandreas@sandberg.pp.se 'MO_HSUB', 2729730Sandreas@sandberg.pp.se 'MO_HINC', 27310905Sandreas.sandberg@arm.com 'MO_HDEC', 27410905Sandreas.sandberg@arm.com 'MO_HMAX', 27510905Sandreas.sandberg@arm.com 'MO_HMIN', 2766677SBrad.Beckmann@amd.com 'MO_UNDEF' 2776677SBrad.Beckmann@amd.com ] 2786677SBrad.Beckmann@amd.com 2796677SBrad.Beckmann@amd.comclass StorageClassType(Enum): vals = [ 2806677SBrad.Beckmann@amd.com 'SC_SPILL', 2817823Ssteve.reinhardt@amd.com 'SC_GLOBAL', 2826677SBrad.Beckmann@amd.com 'SC_SHARED', 2838593Snilay@cs.wisc.edu 'SC_PRIVATE', 2846677SBrad.Beckmann@amd.com 'SC_READONLY', 2855392Sgblack@eecs.umich.edu 'SC_KERNARG', 2865392Sgblack@eecs.umich.edu 'SC_NONE', 2875392Sgblack@eecs.umich.edu ] 28810905Sandreas.sandberg@arm.com 2895392Sgblack@eecs.umich.educlass RegisterType(Enum): vals = [ 2909730Sandreas@sandberg.pp.se 'RT_VECTOR', 2919730Sandreas@sandberg.pp.se 'RT_SCALAR', 29210905Sandreas.sandberg@arm.com 'RT_CONDITION', 2935392Sgblack@eecs.umich.edu 'RT_HARDWARE', 2949730Sandreas@sandberg.pp.se 'RT_NONE', 29510905Sandreas.sandberg@arm.com ] 2969730Sandreas@sandberg.pp.se 29710905Sandreas.sandberg@arm.comclass GenericMemoryOrder(Enum): vals = [ 2989730Sandreas@sandberg.pp.se 'MEMORY_ORDER_NONE', 2995392Sgblack@eecs.umich.edu 'MEMORY_ORDER_RELAXED', 3006677SBrad.Beckmann@amd.com 'MEMORY_ORDER_SC_ACQUIRE', 3016677SBrad.Beckmann@amd.com 'MEMORY_ORDER_SC_RELEASE', 3026677SBrad.Beckmann@amd.com 'MEMORY_ORDER_SC_ACQUIRE_RELEASE', 3036677SBrad.Beckmann@amd.com ] 3046677SBrad.Beckmann@amd.com 30510631Scdirik@micron.comclass GenericMemoryScope(Enum): vals = [ 3066677SBrad.Beckmann@amd.com 'MEMORY_SCOPE_NONE', 3076677SBrad.Beckmann@amd.com 'MEMORY_SCOPE_WORKITEM', 30810631Scdirik@micron.com 'MEMORY_SCOPE_WAVEFRONT', 3095392Sgblack@eecs.umich.edu 'MEMORY_SCOPE_WORKGROUP', 3105392Sgblack@eecs.umich.edu 'MEMORY_SCOPE_DEVICE', 3115392Sgblack@eecs.umich.edu 'MEMORY_SCOPE_SYSTEM', 31210631Scdirik@micron.com ] 3135392Sgblack@eecs.umich.edu