Changeset 1691 in CLRX


Ignore:
Timestamp:
Nov 10, 2015, 6:15:14 PM (5 years ago)
Author:
matszpk
Message:

CLRadeonExtender: ReverseBits? code for GalliumCompute?. Fixed comments in kernel code (VectorAdd?.cpp).

Location:
CLRadeonExtender/trunk/samples
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • CLRadeonExtender/trunk/samples/ReverseBits.cpp

    r1690 r1691  
    138138        s_endpgm
    139139.else   # GalliumCompute code
     140.kernel reverseBits
     141    .args
     142        .arg scalar, 4
     143        .arg global, 8
     144        .arg global, 8
     145        .arg griddim,4
     146        .arg gridoffset,4
     147    .config
     148        .dims xyz   # required, gallium set always three dimensions
     149        .tgsize     # required, TG_SIZE_EN is always enabled
     150        # arg offset in dwords:
     151        # 9 - n, 11 - abuf, 13 - bbuf, 15 - griddim, 16 - gridoffset
     152.text
     153reverseBits:
     154        s_load_dword s2, s[0:1], 6              # s2 - local_size(0)
     155        s_load_dword s3, s[0:1], 9              # s3 - n
     156        s_load_dword s1, s[0:1], 16             # s1 - global_offset(0)
     157        s_load_dwordx2 s[8:9], s[0:1], 11       # s[8:9] - input pointer
     158        s_load_dwordx2 s[6:7], s[0:1], 13       # s[6:7] - output pointer
     159        s_waitcnt lgkmcnt(0)            # wait for results
     160        s_mul_i32 s0, s2, s4            # s0 - local_size(0)*group_id(0)
     161        s_add_u32 s0, s0, s1            # s0 - local_size(0)*group_id(0)+global_offset(0)
     162        v_add_i32 v0, vcc, s0, v0       # v0 - s0+local_id(0) -> global_id(0)
     163        v_cmp_gt_u32 vcc, s3, v0                # global_id(0) < n
     164        s_and_saveexec_b64 s[0:1], vcc          # lock all threads with id>=n
     165        s_cbranch_execz end                     # no active threads, we jump to end
     166        s_mov_b32 s4, s6
     167        s_mov_b32 s5, s7
     168        v_mov_b32 v1, 0                 # zeroing high bits global_id(0)
     169        s_getpc_b64  s[0:1]             # const data in this
     170        s_add_u32  s0, s0, constData-.  #
     171        s_addc_u32 s1, s1, 0        # should be always zero
     172        s_mov_b32 s2, -1            # no limit
     173        s_mov_b32 s3, 0xf000        # default num_format
     174        s_mov_b32 s10, s2           # input buffer - s[8:11]
     175        s_mov_b32 s11, s3
     176        s_mov_b32 s6, s2           # output buffer - s[4:7]
     177        s_mov_b32 s7, s3
     178        buffer_load_ubyte v2, v[0:1], s[8:11], 0 addr64     # load byte from input
     179        v_mov_b32 v3, 0     # zeroing high offset bits
     180        s_waitcnt vmcnt(0)
     181        buffer_load_ubyte v2, v[2:3], s[0:3], 0 addr64     # convert
     182        s_waitcnt vmcnt(0)
     183        buffer_store_byte v2, v[0:1], s[4:7], 0 addr64    # store byte to output
     184end:
     185        s_endpgm
     186        .p2align 8   # alignment for const data
     187constData:
    140188.endif
    141189)ffDXD";
     
    204252        throw CLError(error, "clEnqueueReadBuffer");
    205253   
    206     /*for (size_t i = 0; i < size; i++)
     254    for (size_t i = 0; i < size; i++)
    207255    {   // verifying
    208256        const cxbyte in = inData[i];
     
    211259        if (expected != outData[i])
    212260        {
    213             std::cerr << i << ": " << cl_uint(expected) << cl_uint(outData[i]) << std::endl;
     261            std::cerr << i << ": " << cl_uint(expected) << "," <<
     262                        cl_uint(outData[i]) << std::endl;
    214263            throw Exception("Data mismatch!");
    215264        }
    216     }*/
     265    }
    217266    // print result
    218267    for (size_t i = 0; i < size; i+=16)
  • CLRadeonExtender/trunk/samples/VectorAdd.cpp

    r1690 r1691  
    112112        .arg gridoffset,4
    113113    .config
    114         .dims x     # required, this kernel uses only one dimension
     114        .dims xyz   # required, gallium set always three dimensions
    115115        .tgsize     # required, TG_SIZE_EN is always enabled
    116116        # arg offset in dwords:
     
    121121        s_load_dword s3, s[0:1], 9              # s3 - n
    122122        s_load_dword s1, s[0:1], 18             # s1 - global_offset(0)
    123         s_load_dwordx2 s[8:9], s[0:1], 11       # s[8:9] - aBuffer,bBuffer pointer
    124         s_load_dwordx2 s[12:13], s[0:1], 13     # s[12:13] - aBuffer,bBuffer pointer
     123        s_load_dwordx2 s[8:9], s[0:1], 11       # s[8:9] - aBuffer pointer
     124        s_load_dwordx2 s[12:13], s[0:1], 13     # s[12:13] - bBuffer pointer
    125125        s_load_dwordx2 s[6:7], s[0:1], 15       # s[6:7] - cBuffer pointer
    126126        s_waitcnt lgkmcnt(0)            # wait for results
Note: See TracChangeset for help on using the changeset viewer.