Global memory bandwidth profiling

Press the button to get a new bandwidth value for copying 1024×1024 float4 matrices.

__kernel void kMatrixCopy( global float4* A, global float4* C ){
  int x = get_global_id(0) + (get_global_id(1) << 10);
  C[x] = A[x];
}

function run(){
    var ev, t = 0;
    for ( var i = 0; i < k;  i++){
      ev = cmdQueue.enqueueNDRangeKernel(kernel,2,[],[n,n],[16,8],[]);
      cmdQueue.finish();
      t += ev.getEventProfilingInfo(WebCL.CL_PROFILING_COMMAND_END) -
        ev.getEventProfilingInfo(WebCL.CL_PROFILING_COMMAND_START);
    }
    output.innerHTML = "bandwidth = " + 
      Math.round(( 2 * bufSize / (t/k))*1000)/1000 + " GB/s";
}
Operation   float write   float copy   float4 copy
E-350 3.3 5.5 5.9
GTX 560   91.5   113.7
"Typical" upper bandwidth values are used. For E-350 the maximum bandwidth is 9 GB/s.
WebCL Demos     updated 17 Nov 2011