GPU.py revision 11308
112531Sandreas.sandberg@arm.com# 212531Sandreas.sandberg@arm.com# Copyright (c) 2015 Advanced Micro Devices, Inc. 312531Sandreas.sandberg@arm.com# All rights reserved. 412531Sandreas.sandberg@arm.com# 512531Sandreas.sandberg@arm.com# For use for simulation and test purposes only 612531Sandreas.sandberg@arm.com# 712531Sandreas.sandberg@arm.com# Redistribution and use in source and binary forms, with or without 812531Sandreas.sandberg@arm.com# modification, are permitted provided that the following conditions are met: 912531Sandreas.sandberg@arm.com# 1012531Sandreas.sandberg@arm.com# 1. Redistributions of source code must retain the above copyright notice, 1112531Sandreas.sandberg@arm.com# this list of conditions and the following disclaimer. 1212531Sandreas.sandberg@arm.com# 1312531Sandreas.sandberg@arm.com# 2. Redistributions in binary form must reproduce the above copyright notice, 1412531Sandreas.sandberg@arm.com# this list of conditions and the following disclaimer in the documentation 1512531Sandreas.sandberg@arm.com# and/or other materials provided with the distribution. 1612531Sandreas.sandberg@arm.com# 1712531Sandreas.sandberg@arm.com# 3. Neither the name of the copyright holder nor the names of its contributors 1812531Sandreas.sandberg@arm.com# may be used to endorse or promote products derived from this software 1912531Sandreas.sandberg@arm.com# without specific prior written permission. 2012531Sandreas.sandberg@arm.com# 2112531Sandreas.sandberg@arm.com# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 2212531Sandreas.sandberg@arm.com# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2312531Sandreas.sandberg@arm.com# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2412531Sandreas.sandberg@arm.com# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 2512531Sandreas.sandberg@arm.com# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2612531Sandreas.sandberg@arm.com# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2712531Sandreas.sandberg@arm.com# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2812531Sandreas.sandberg@arm.com# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2912531Sandreas.sandberg@arm.com# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 3012531Sandreas.sandberg@arm.com# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 3112531Sandreas.sandberg@arm.com# POSSIBILITY OF SUCH DAMAGE. 3212531Sandreas.sandberg@arm.com# 3312531Sandreas.sandberg@arm.com# Author: Steve Reinhardt 3412531Sandreas.sandberg@arm.com# 3512531Sandreas.sandberg@arm.com 3612531Sandreas.sandberg@arm.comfrom ClockedObject import ClockedObject 3712531Sandreas.sandberg@arm.comfrom Device import DmaDevice 3812531Sandreas.sandberg@arm.comfrom m5.defines import buildEnv 3912531Sandreas.sandberg@arm.comfrom m5.params import * 4012531Sandreas.sandberg@arm.comfrom m5.proxy import * 4112531Sandreas.sandberg@arm.comfrom m5.SimObject import SimObject 4212531Sandreas.sandberg@arm.comfrom MemObject import MemObject 4312531Sandreas.sandberg@arm.comfrom Process import EmulatedDriver 4412531Sandreas.sandberg@arm.comfrom Bridge import Bridge 4512531Sandreas.sandberg@arm.comfrom LdsState import LdsState 4612531Sandreas.sandberg@arm.com 4712531Sandreas.sandberg@arm.comclass PrefetchType(Enum): vals = [ 4812531Sandreas.sandberg@arm.com 'PF_CU', 4912531Sandreas.sandberg@arm.com 'PF_PHASE', 5012531Sandreas.sandberg@arm.com 'PF_WF', 5112533Sandreas.sandberg@arm.com 'PF_STRIDE', 5212531Sandreas.sandberg@arm.com 'PF_END', 5312531Sandreas.sandberg@arm.com ] 5412531Sandreas.sandberg@arm.com 5512531Sandreas.sandberg@arm.comclass VectorRegisterFile(SimObject): 5612531Sandreas.sandberg@arm.com type = 'VectorRegisterFile' 5712531Sandreas.sandberg@arm.com cxx_class = 'VectorRegisterFile' 5812531Sandreas.sandberg@arm.com cxx_header = 'gpu-compute/vector_register_file.hh' 5912531Sandreas.sandberg@arm.com 6012531Sandreas.sandberg@arm.com simd_id = Param.Int(0, 'SIMD ID associated with this VRF') 6112531Sandreas.sandberg@arm.com num_regs_per_simd = Param.Int(2048, 'number of vector registers per SIMD') 6212531Sandreas.sandberg@arm.com min_alloc = Param.Int(4, 'min number of VGPRs allocated per WF') 6312531Sandreas.sandberg@arm.com 6412531Sandreas.sandberg@arm.comclass Wavefront(SimObject): 6512531Sandreas.sandberg@arm.com type = 'Wavefront' 6612531Sandreas.sandberg@arm.com cxx_class = 'Wavefront' 6712531Sandreas.sandberg@arm.com cxx_header = 'gpu-compute/wavefront.hh' 6812531Sandreas.sandberg@arm.com 6912531Sandreas.sandberg@arm.com simdId = Param.Int('SIMD id (0-ComputeUnit.num_SIMDs)') 7012531Sandreas.sandberg@arm.com wf_slot_id = Param.Int('wavefront id (0-ComputeUnit.max_wfs)') 7112531Sandreas.sandberg@arm.com 7212531Sandreas.sandberg@arm.comclass ComputeUnit(MemObject): 7312531Sandreas.sandberg@arm.com type = 'ComputeUnit' 7412531Sandreas.sandberg@arm.com cxx_class = 'ComputeUnit' 7512531Sandreas.sandberg@arm.com cxx_header = 'gpu-compute/compute_unit.hh' 7612531Sandreas.sandberg@arm.com 7712531Sandreas.sandberg@arm.com wavefronts = VectorParam.Wavefront('Number of wavefronts') 7812531Sandreas.sandberg@arm.com wfSize = Param.Int(64, 'Wavefront size (in work items)') 7912531Sandreas.sandberg@arm.com num_SIMDs = Param.Int(4, 'number of SIMD units per CU') 8012531Sandreas.sandberg@arm.com 8112531Sandreas.sandberg@arm.com spbypass_pipe_length = Param.Int(4, 'vector ALU Single Precision bypass '\ 8212531Sandreas.sandberg@arm.com 'latency') 8312531Sandreas.sandberg@arm.com 8412531Sandreas.sandberg@arm.com dpbypass_pipe_length = Param.Int(8, 'vector ALU Double Precision bypass '\ 8512531Sandreas.sandberg@arm.com 'latency') 8612531Sandreas.sandberg@arm.com 8712531Sandreas.sandberg@arm.com issue_period = Param.Int(4, 'number of cycles per issue period') 8812531Sandreas.sandberg@arm.com num_global_mem_pipes = Param.Int(1,'number of global memory pipes per CU') 8912531Sandreas.sandberg@arm.com num_shared_mem_pipes = Param.Int(1,'number of shared memory pipes per CU') 9012531Sandreas.sandberg@arm.com n_wf = Param.Int(1, 'Number of wavefront slots per SIMD') 9112531Sandreas.sandberg@arm.com mem_req_latency = Param.Int(9, "Latency for request from the cu to ruby. "\ 9212531Sandreas.sandberg@arm.com "Represents the pipeline to reach the TCP and "\ 9312531Sandreas.sandberg@arm.com "specified in GPU clock cycles") 9412531Sandreas.sandberg@arm.com mem_resp_latency = Param.Int(9, "Latency for responses from ruby to the "\ 9512531Sandreas.sandberg@arm.com "cu. Represents the pipeline between the TCP "\ 9612531Sandreas.sandberg@arm.com "and cu as well as TCP data array access. "\ 9712531Sandreas.sandberg@arm.com "Specified in GPU clock cycles") 9812531Sandreas.sandberg@arm.com system = Param.System(Parent.any, "system object") 9912531Sandreas.sandberg@arm.com cu_id = Param.Int('CU id') 10012531Sandreas.sandberg@arm.com vrf_to_coalescer_bus_width = Param.Int(32, "VRF->Coalescer data bus width "\ 10112531Sandreas.sandberg@arm.com "in bytes") 10212531Sandreas.sandberg@arm.com coalescer_to_vrf_bus_width = Param.Int(32, "Coalescer->VRF data bus width "\ 10312531Sandreas.sandberg@arm.com "in bytes") 10412531Sandreas.sandberg@arm.com 10512531Sandreas.sandberg@arm.com memory_port = VectorMasterPort("Port to the memory system") 10612531Sandreas.sandberg@arm.com translation_port = VectorMasterPort('Port to the TLB hierarchy') 10712531Sandreas.sandberg@arm.com sqc_port = MasterPort("Port to the SQC (I-cache") 10812531Sandreas.sandberg@arm.com sqc_tlb_port = MasterPort("Port to the TLB for the SQC (I-cache)") 10912531Sandreas.sandberg@arm.com perLaneTLB = Param.Bool(False, "enable per-lane TLB") 11012531Sandreas.sandberg@arm.com prefetch_depth = Param.Int(0, "Number of prefetches triggered at a time"\ 11112531Sandreas.sandberg@arm.com "(0 turns off prefetching)") 11212531Sandreas.sandberg@arm.com prefetch_stride = Param.Int(1, "Fixed Prefetch Stride (1 means next-page)") 11312531Sandreas.sandberg@arm.com prefetch_prev_type = Param.PrefetchType('PF_PHASE', "Prefetch the stride "\ 11412531Sandreas.sandberg@arm.com "from last mem req in lane of "\ 11512531Sandreas.sandberg@arm.com "CU|Phase|Wavefront") 11612531Sandreas.sandberg@arm.com execPolicy = Param.String("OLDEST-FIRST", "WF execution selection policy"); 11712531Sandreas.sandberg@arm.com xactCasMode = Param.Bool(False, "Behavior of xact_cas_load magic instr."); 11812531Sandreas.sandberg@arm.com debugSegFault = Param.Bool(False, "enable debugging GPU seg faults") 11912531Sandreas.sandberg@arm.com functionalTLB = Param.Bool(False, "Assume TLB causes no delay") 12012531Sandreas.sandberg@arm.com 12112531Sandreas.sandberg@arm.com localMemBarrier = Param.Bool(False, "Assume Barriers do not wait on "\ 12212531Sandreas.sandberg@arm.com "kernel end") 12312531Sandreas.sandberg@arm.com 12412531Sandreas.sandberg@arm.com countPages = Param.Bool(False, "Generate per-CU file of all pages touched "\ 12512531Sandreas.sandberg@arm.com "and how many times") 12612531Sandreas.sandberg@arm.com global_mem_queue_size = Param.Int(256, "Number of entries in the global " 12712531Sandreas.sandberg@arm.com "memory pipeline's queues") 12812531Sandreas.sandberg@arm.com local_mem_queue_size = Param.Int(256, "Number of entries in the local " 12912531Sandreas.sandberg@arm.com "memory pipeline's queues") 13012531Sandreas.sandberg@arm.com ldsBus = Bridge() # the bridge between the CU and its LDS 13112531Sandreas.sandberg@arm.com ldsPort = MasterPort("The port that goes to the LDS") 13212531Sandreas.sandberg@arm.com localDataStore = Param.LdsState("the LDS for this CU") 13312531Sandreas.sandberg@arm.com 13412531Sandreas.sandberg@arm.com vector_register_file = VectorParam.VectorRegisterFile("Vector register "\ 13512531Sandreas.sandberg@arm.com "file") 13612531Sandreas.sandberg@arm.com 13712531Sandreas.sandberg@arm.comclass Shader(ClockedObject): 13812531Sandreas.sandberg@arm.com type = 'Shader' 13912531Sandreas.sandberg@arm.com cxx_class = 'Shader' 14012531Sandreas.sandberg@arm.com cxx_header = 'gpu-compute/shader.hh' 14112531Sandreas.sandberg@arm.com 14212531Sandreas.sandberg@arm.com CUs = VectorParam.ComputeUnit('Number of compute units') 14312531Sandreas.sandberg@arm.com n_wf = Param.Int(1, 'Number of wavefront slots per SIMD') 14412531Sandreas.sandberg@arm.com impl_kern_boundary_sync = Param.Bool(True, """Insert acq/rel packets into 14512531Sandreas.sandberg@arm.com ruby at kernel boundaries""") 14612531Sandreas.sandberg@arm.com separate_acquire_release = Param.Bool(False, 14712531Sandreas.sandberg@arm.com """Do ld_acquire/st_release generate separate requests for the 14812531Sandreas.sandberg@arm.com acquire and release?""") 14912531Sandreas.sandberg@arm.com globalmem = Param.MemorySize('64kB', 'Memory size') 15012531Sandreas.sandberg@arm.com timing = Param.Bool(False, 'timing memory accesses') 15112531Sandreas.sandberg@arm.com 15212531Sandreas.sandberg@arm.com cpu_pointer = Param.BaseCPU(NULL, "pointer to base CPU") 15312531Sandreas.sandberg@arm.com translation = Param.Bool(False, "address translation"); 15412531Sandreas.sandberg@arm.com 15512531Sandreas.sandberg@arm.comclass ClDriver(EmulatedDriver): 15612531Sandreas.sandberg@arm.com type = 'ClDriver' 15712531Sandreas.sandberg@arm.com cxx_header = 'gpu-compute/cl_driver.hh' 15812531Sandreas.sandberg@arm.com codefile = VectorParam.String('code file name(s)') 15912531Sandreas.sandberg@arm.com 16012531Sandreas.sandberg@arm.comclass GpuDispatcher(DmaDevice): 16112531Sandreas.sandberg@arm.com type = 'GpuDispatcher' 16212531Sandreas.sandberg@arm.com cxx_header = 'gpu-compute/dispatcher.hh' 16312531Sandreas.sandberg@arm.com # put at 8GB line for now 16412531Sandreas.sandberg@arm.com pio_addr = Param.Addr(0x200000000, "Device Address") 16512531Sandreas.sandberg@arm.com pio_latency = Param.Latency('1ns', "Programmed IO latency") 16612531Sandreas.sandberg@arm.com shader_pointer = Param.Shader('pointer to shader') 16712531Sandreas.sandberg@arm.com translation_port = MasterPort('Port to the dispatcher TLB') 16812531Sandreas.sandberg@arm.com cpu = Param.BaseCPU("CPU to wake up on kernel completion") 16912531Sandreas.sandberg@arm.com 17012531Sandreas.sandberg@arm.com cl_driver = Param.ClDriver('pointer to driver') 17112531Sandreas.sandberg@arm.com 17212531Sandreas.sandberg@arm.comclass OpType(Enum): vals = [ 17312531Sandreas.sandberg@arm.com 'OT_NULL', 17412531Sandreas.sandberg@arm.com 'OT_ALU', 17512531Sandreas.sandberg@arm.com 'OT_SPECIAL', 17612531Sandreas.sandberg@arm.com 'OT_GLOBAL_READ', 17712531Sandreas.sandberg@arm.com 'OT_GLOBAL_WRITE', 17812531Sandreas.sandberg@arm.com 'OT_GLOBAL_ATOMIC', 17912531Sandreas.sandberg@arm.com 'OT_GLOBAL_HIST', 18012531Sandreas.sandberg@arm.com 'OT_GLOBAL_LDAS', 18112531Sandreas.sandberg@arm.com 'OT_SHARED_READ', 18212531Sandreas.sandberg@arm.com 'OT_SHARED_WRITE', 18312531Sandreas.sandberg@arm.com 'OT_SHARED_ATOMIC', 18412531Sandreas.sandberg@arm.com 'OT_SHARED_HIST', 18512531Sandreas.sandberg@arm.com 'OT_SHARED_LDAS', 18612531Sandreas.sandberg@arm.com 'OT_PRIVATE_READ', 18712531Sandreas.sandberg@arm.com 'OT_PRIVATE_WRITE', 18812531Sandreas.sandberg@arm.com 'OT_PRIVATE_ATOMIC', 18912531Sandreas.sandberg@arm.com 'OT_PRIVATE_HIST', 19012531Sandreas.sandberg@arm.com 'OT_PRIVATE_LDAS', 19112531Sandreas.sandberg@arm.com 'OT_SPILL_READ', 19212531Sandreas.sandberg@arm.com 'OT_SPILL_WRITE', 19312531Sandreas.sandberg@arm.com 'OT_SPILL_ATOMIC', 19412531Sandreas.sandberg@arm.com 'OT_SPILL_HIST', 19512531Sandreas.sandberg@arm.com 'OT_SPILL_LDAS', 19612531Sandreas.sandberg@arm.com 'OT_READONLY_READ', 19712531Sandreas.sandberg@arm.com 'OT_READONLY_WRITE', 19812531Sandreas.sandberg@arm.com 'OT_READONLY_ATOMIC', 19912531Sandreas.sandberg@arm.com 'OT_READONLY_HIST', 20012531Sandreas.sandberg@arm.com 'OT_READONLY_LDAS', 20112531Sandreas.sandberg@arm.com 'OT_FLAT_READ', 20212531Sandreas.sandberg@arm.com 'OT_FLAT_WRITE', 20312531Sandreas.sandberg@arm.com 'OT_FLAT_ATOMIC', 20412531Sandreas.sandberg@arm.com 'OT_FLAT_HIST', 20512531Sandreas.sandberg@arm.com 'OT_FLAT_LDAS', 20612531Sandreas.sandberg@arm.com 'OT_KERN_READ', 20712531Sandreas.sandberg@arm.com 'OT_BRANCH', 20812531Sandreas.sandberg@arm.com 20912531Sandreas.sandberg@arm.com # note: Only the OT_BOTH_MEMFENCE seems to be supported in the 1.0F version 21012531Sandreas.sandberg@arm.com # of the compiler. 21112531Sandreas.sandberg@arm.com 'OT_SHARED_MEMFENCE', 21212531Sandreas.sandberg@arm.com 'OT_GLOBAL_MEMFENCE', 21312531Sandreas.sandberg@arm.com 'OT_BOTH_MEMFENCE', 21412531Sandreas.sandberg@arm.com 21512531Sandreas.sandberg@arm.com 'OT_BARRIER', 21612531Sandreas.sandberg@arm.com 'OT_PRINT', 21712531Sandreas.sandberg@arm.com 'OT_RET', 21812531Sandreas.sandberg@arm.com 'OT_NOP', 21912531Sandreas.sandberg@arm.com 'OT_ARG' 22012531Sandreas.sandberg@arm.com ] 22112531Sandreas.sandberg@arm.com 22212531Sandreas.sandberg@arm.comclass MemType(Enum): vals = [ 22312531Sandreas.sandberg@arm.com 'M_U8', 22412531Sandreas.sandberg@arm.com 'M_U16', 22512531Sandreas.sandberg@arm.com 'M_U32', 22612531Sandreas.sandberg@arm.com 'M_U64', 22712531Sandreas.sandberg@arm.com 'M_S8', 22812531Sandreas.sandberg@arm.com 'M_S16', 22912531Sandreas.sandberg@arm.com 'M_S32', 23012531Sandreas.sandberg@arm.com 'M_S64', 23112531Sandreas.sandberg@arm.com 'M_F16', 23212531Sandreas.sandberg@arm.com 'M_F32', 23312531Sandreas.sandberg@arm.com 'M_F64', 23412531Sandreas.sandberg@arm.com ] 23512531Sandreas.sandberg@arm.com 23612531Sandreas.sandberg@arm.comclass MemOpType(Enum): vals = [ 23712531Sandreas.sandberg@arm.com 'MO_LD', 23812531Sandreas.sandberg@arm.com 'MO_ST', 23912531Sandreas.sandberg@arm.com 'MO_LDAS', 24012531Sandreas.sandberg@arm.com 'MO_LDA', 24112531Sandreas.sandberg@arm.com 'MO_AAND', 24212531Sandreas.sandberg@arm.com 'MO_AOR', 24312531Sandreas.sandberg@arm.com 'MO_AXOR', 24412531Sandreas.sandberg@arm.com 'MO_ACAS', 24512531Sandreas.sandberg@arm.com 'MO_AEXCH', 24612531Sandreas.sandberg@arm.com 'MO_AADD', 24712698Sandreas.sandberg@arm.com 'MO_ASUB', 24812698Sandreas.sandberg@arm.com 'MO_AINC', 24912698Sandreas.sandberg@arm.com 'MO_ADEC', 25012531Sandreas.sandberg@arm.com 'MO_AMAX', 25112531Sandreas.sandberg@arm.com 'MO_AMIN', 25212531Sandreas.sandberg@arm.com 'MO_ANRAND', 25312531Sandreas.sandberg@arm.com 'MO_ANROR', 25412531Sandreas.sandberg@arm.com 'MO_ANRXOR', 25512531Sandreas.sandberg@arm.com 'MO_ANRCAS', 25612531Sandreas.sandberg@arm.com 'MO_ANREXCH', 25712531Sandreas.sandberg@arm.com 'MO_ANRADD', 25812531Sandreas.sandberg@arm.com 'MO_ANRSUB', 25912531Sandreas.sandberg@arm.com 'MO_ANRINC', 26012533Sandreas.sandberg@arm.com 'MO_ANRDEC', 26112531Sandreas.sandberg@arm.com 'MO_ANRMAX', 26212531Sandreas.sandberg@arm.com 'MO_ANRMIN', 26312533Sandreas.sandberg@arm.com 'MO_HAND', 26412533Sandreas.sandberg@arm.com 'MO_HOR', 26512531Sandreas.sandberg@arm.com 'MO_HXOR', 26612531Sandreas.sandberg@arm.com 'MO_HCAS', 26713452SMatteo.Andreozzi@arm.com 'MO_HEXCH', 26812531Sandreas.sandberg@arm.com 'MO_HADD', 26912531Sandreas.sandberg@arm.com 'MO_HSUB', 27012531Sandreas.sandberg@arm.com 'MO_HINC', 27113452SMatteo.Andreozzi@arm.com 'MO_HDEC', 27212531Sandreas.sandberg@arm.com 'MO_HMAX', 27312531Sandreas.sandberg@arm.com 'MO_HMIN', 27412531Sandreas.sandberg@arm.com 'MO_UNDEF' 27512531Sandreas.sandberg@arm.com ] 27612531Sandreas.sandberg@arm.com 27712531Sandreas.sandberg@arm.comclass StorageClassType(Enum): vals = [ 27812531Sandreas.sandberg@arm.com 'SC_SPILL', 27912531Sandreas.sandberg@arm.com 'SC_GLOBAL', 28012531Sandreas.sandberg@arm.com 'SC_SHARED', 28112531Sandreas.sandberg@arm.com 'SC_PRIVATE', 28212531Sandreas.sandberg@arm.com 'SC_READONLY', 28312531Sandreas.sandberg@arm.com 'SC_KERNARG', 28412531Sandreas.sandberg@arm.com 'SC_NONE', 28512531Sandreas.sandberg@arm.com ] 28612531Sandreas.sandberg@arm.com 28712531Sandreas.sandberg@arm.comclass RegisterType(Enum): vals = [ 28812531Sandreas.sandberg@arm.com 'RT_VECTOR', 28912531Sandreas.sandberg@arm.com 'RT_SCALAR', 29012531Sandreas.sandberg@arm.com 'RT_CONDITION', 29112531Sandreas.sandberg@arm.com 'RT_HARDWARE', 29212531Sandreas.sandberg@arm.com 'RT_NONE', 29312531Sandreas.sandberg@arm.com ] 29412531Sandreas.sandberg@arm.com 29512531Sandreas.sandberg@arm.comclass GenericMemoryOrder(Enum): vals = [ 29612531Sandreas.sandberg@arm.com 'MEMORY_ORDER_NONE', 29712531Sandreas.sandberg@arm.com 'MEMORY_ORDER_RELAXED', 29812531Sandreas.sandberg@arm.com 'MEMORY_ORDER_SC_ACQUIRE', 29912531Sandreas.sandberg@arm.com 'MEMORY_ORDER_SC_RELEASE', 30012531Sandreas.sandberg@arm.com 'MEMORY_ORDER_SC_ACQUIRE_RELEASE', 30112531Sandreas.sandberg@arm.com ] 30212531Sandreas.sandberg@arm.com 30312531Sandreas.sandberg@arm.comclass GenericMemoryScope(Enum): vals = [ 30412531Sandreas.sandberg@arm.com 'MEMORY_SCOPE_NONE', 30512531Sandreas.sandberg@arm.com 'MEMORY_SCOPE_WORKITEM', 30612531Sandreas.sandberg@arm.com 'MEMORY_SCOPE_WAVEFRONT', 30712531Sandreas.sandberg@arm.com 'MEMORY_SCOPE_WORKGROUP', 30812531Sandreas.sandberg@arm.com 'MEMORY_SCOPE_DEVICE', 30912531Sandreas.sandberg@arm.com 'MEMORY_SCOPE_SYSTEM', 31012531Sandreas.sandberg@arm.com ] 31112531Sandreas.sandberg@arm.com