80dd7ff22f
* tests: Fix memory bandwidth calculation for perf tests Add a flops calculation for flash attention. Add one GGML_OP_CPY perf test. * vulkan: Optimize contiguous copies Add a variant of the copy shader for when the tensors are contiguous. Avoid the complex addressing calculations, and do four elements per invocation to hide some other overhead. Apply similar changes to the scale shader, since scale is always contiguous. Add a "progress bar" for shader compiles.
39 lines
1.5 KiB
Plaintext
39 lines
1.5 KiB
Plaintext
#extension GL_EXT_shader_16bit_storage : require
|
|
#extension GL_EXT_control_flow_attributes : require
|
|
|
|
layout (push_constant) uniform parameter
|
|
{
|
|
uint ne;
|
|
uint ne00; uint ne01; uint ne02; uint ne03; uint nb00; uint nb01; uint nb02; uint nb03;
|
|
uint ne10; uint ne11; uint ne12; uint ne13; uint nb10; uint nb11; uint nb12; uint nb13;
|
|
uint d_offset;
|
|
float param1; float param2;
|
|
} p;
|
|
|
|
layout (binding = 0) readonly buffer A {A_TYPE data_a[];};
|
|
layout (binding = 1) writeonly buffer D {D_TYPE data_d[];};
|
|
|
|
uint get_idx() {
|
|
return gl_GlobalInvocationID.z * 262144 + gl_GlobalInvocationID.y * 512 + gl_GlobalInvocationID.x;
|
|
}
|
|
|
|
uint src0_idx(uint idx) {
|
|
const uint i03 = idx / (p.ne02*p.ne01*p.ne00);
|
|
const uint i03_offset = i03 * p.ne02*p.ne01*p.ne00;
|
|
const uint i02 = (idx - i03_offset) / (p.ne01*p.ne00);
|
|
const uint i02_offset = i02*p.ne01*p.ne00;
|
|
const uint i01 = (idx - i03_offset - i02_offset) / p.ne00;
|
|
const uint i00 = idx - i03_offset - i02_offset - i01*p.ne00;
|
|
return i03*p.nb03 + i02*p.nb02 + i01*p.nb01 + i00*p.nb00;
|
|
}
|
|
|
|
uint dst_idx(uint idx) {
|
|
const uint i13 = idx / (p.ne12*p.ne11*p.ne10);
|
|
const uint i13_offset = i13 * p.ne12*p.ne11*p.ne10;
|
|
const uint i12 = (idx - i13_offset) / (p.ne11*p.ne10);
|
|
const uint i12_offset = i12*p.ne11*p.ne10;
|
|
const uint i11 = (idx - i13_offset - i12_offset) / p.ne10;
|
|
const uint i10 = idx - i13_offset - i12_offset - i11*p.ne10;
|
|
return i13*p.nb13 + i12*p.nb12 + i11*p.nb11 + i10*p.nb10;
|
|
}
|