SWDEV-434298 - Change copy buffer kernel

The new copy kernel can limit the number of launched workgoups.
It can copy in chunks of 16 bytes or 4 bytes.
Workgoup size is increased to 512 or 1024

Change-Id: Ic3fefa2d5bda6afebd1acc4d41ad310b138af6df
이 커밋은 다음에 포함됨:
German Andryeyev
2023-11-27 11:45:00 -05:00
부모 24fced96b3
커밋 ed4e1fec98
3개의 변경된 파일99개의 추가작업 그리고 111개의 파일을 삭제
+28 -3
파일 보기
@@ -116,9 +116,34 @@ const char* BlitLinearSourceCode = BLIT_KERNELS(
}
__kernel void __amd_rocclr_copyBuffer(__global uchar* srcI, __global uchar* dstI,
ulong srcOrigin, ulong dstOrigin, ulong size,
uint remain) {
__amd_copyBuffer(srcI, dstI, srcOrigin, dstOrigin, size, remain);
ulong srcOrigin, ulong dstOrigin, ulong size, uint remainder,
uint aligned_size, ulong end_ptr, uint next_chunk) {
ulong id = get_global_id(0);
ulong id_remainder = id;
__global uchar* src = srcI + srcOrigin;
__global uchar* dst = dstI + dstOrigin;
if (aligned_size == sizeof(ulong2)) {
__global ulong2* srcD = (__global ulong2*)(src);
__global ulong2* dstD = (__global ulong2*)(dst);
while ((ulong)(&dstD[id]) < end_ptr) {
dstD[id] = srcD[id];
id += next_chunk;
}
} else {
__global uint* srcD = (__global uint*)(src);
__global uint* dstD = (__global uint*)(dst);
while ((ulong)(&dstD[id]) < end_ptr) {
dstD[id] = srcD[id];
id += next_chunk;
}
}
if ((remainder != 0) && (id_remainder == 0)) {
for (ulong i = size - remainder; i < size; ++i) {
dst[i] = src[i];
}
}
}
__kernel void __amd_rocclr_copyBufferAligned(__global uint* src, __global uint* dst,