
352 IV Mobile Devices
#d e f i n e di (( uint)2)
#d e f i n e dj (( uint )2)
#d e f i n e dk (( uint )32)
kernel void
sgemm ( global float4 const A , global float4 const B ,
global float2 C , float alpha , float beta , uint n )
{
uint j = get global id (0) ;
uint i = get global id (1) ;
uint nv4 = n >> 2;
float4 ab =(float4 )0.0f ;
for ( uint k =0; k < nv4 ; k += dk )
{
for ( uint kk =0; kk < dk ;++kk )
{
float4 a0 = A [2i nv4 + kk+k ];
float4 a1 = A [(2 i +1) nv4 + kk+k ];
float4 b0 = B [2j nv4 + kk+k ];
float4 b1 = B [(2 j +1) nv4 + kk+k ];
ab += ( float4)(dot ( a0 , b0 ), dot ( a0 , b1 ),
dot( a1 , b0 ), dot ( a1 , b1 ));
}
barrier( CLK_GLOBAL_MEM_FENCE );
}
uint ...