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