107 lines
3.3 KiB
Plaintext
107 lines
3.3 KiB
Plaintext
/*
|
|
* Copyright (C) 2020 Intel Corporation
|
|
*
|
|
* SPDX-License-Identifier: MIT
|
|
*
|
|
*/
|
|
|
|
R"===(
|
|
__kernel void QueryKernelTimestamps(__global ulong* srcEvents, __global ulong* dst, uint useOnlyGlobalTimestamps) {
|
|
uint gid = get_global_id(0);
|
|
uint currentOffset = gid * 4;
|
|
dst[currentOffset] = 0;
|
|
dst[currentOffset + 1] = 0;
|
|
dst[currentOffset + 2] = 0;
|
|
dst[currentOffset + 3] = 0;
|
|
|
|
uint eventOffsetData = 2*gid;
|
|
ulong srcPtr = srcEvents[eventOffsetData];
|
|
__global uint *src = (__global uint *) srcPtr;
|
|
ulong packetUsed = srcEvents[eventOffsetData + 1];
|
|
|
|
uint contextStart = src[0];
|
|
uint globalStart = src[1];
|
|
uint contextEnd = src[2];
|
|
uint globalEnd = src[3];
|
|
|
|
if(packetUsed > 1) {
|
|
uint timestampsOffsets = 4;
|
|
for(uint i = 1; i < packetUsed; i++) {
|
|
timestampsOffsets *= i;
|
|
if(contextStart > src[timestampsOffsets]) {
|
|
contextStart = src[timestampsOffsets];
|
|
}
|
|
if(globalStart > src[timestampsOffsets + 1]) {
|
|
globalStart = src[timestampsOffsets + 1];
|
|
}
|
|
if(contextEnd < src[timestampsOffsets + 2]) {
|
|
contextEnd = src[timestampsOffsets + 2];
|
|
}
|
|
if(globalEnd < src[timestampsOffsets + 3]) {
|
|
globalEnd = src[timestampsOffsets + 3];
|
|
}
|
|
}
|
|
}
|
|
|
|
dst[currentOffset] = globalStart;
|
|
dst[currentOffset + 1] = globalEnd;
|
|
if (useOnlyGlobalTimestamps != 0) {
|
|
dst[currentOffset + 2] = globalStart;
|
|
dst[currentOffset + 3] = globalEnd;
|
|
} else {
|
|
dst[currentOffset + 2] = contextStart;
|
|
dst[currentOffset + 3] = contextEnd;
|
|
}
|
|
|
|
}
|
|
|
|
__kernel void QueryKernelTimestampsWithOffsets(__global ulong* srcEvents, __global ulong* dst, __global ulong *offsets, uint useOnlyGlobalTimestamps) {
|
|
uint gid = get_global_id(0);
|
|
uint currentOffset = offsets[gid] / 8;
|
|
dst[currentOffset] = 0;
|
|
dst[currentOffset + 1] = 0;
|
|
dst[currentOffset + 2] = 0;
|
|
dst[currentOffset + 3] = 0;
|
|
|
|
uint eventOffsetData = 2*gid;
|
|
ulong srcPtr = srcEvents[eventOffsetData];
|
|
__global uint *src = (__global uint *) srcPtr;
|
|
ulong packetUsed = srcEvents[eventOffsetData + 1];
|
|
|
|
uint contextStart = src[0];
|
|
uint globalStart = src[1];
|
|
uint contextEnd = src[2];
|
|
uint globalEnd = src[3];
|
|
|
|
if(packetUsed > 1) {
|
|
uint timestampsOffsets = 4;
|
|
for(uint i = 1; i < packetUsed; i++) {
|
|
timestampsOffsets *= i;
|
|
if(contextStart > src[timestampsOffsets]) {
|
|
contextStart = src[timestampsOffsets];
|
|
}
|
|
if(globalStart > src[timestampsOffsets + 1]) {
|
|
globalStart = src[timestampsOffsets + 1];
|
|
}
|
|
if(contextEnd < src[timestampsOffsets + 2]) {
|
|
contextEnd = src[timestampsOffsets + 2];
|
|
}
|
|
if(globalEnd < src[timestampsOffsets + 3]) {
|
|
globalEnd = src[timestampsOffsets + 3];
|
|
}
|
|
}
|
|
}
|
|
|
|
dst[currentOffset] = globalStart;
|
|
dst[currentOffset + 1] = globalEnd;
|
|
if (useOnlyGlobalTimestamps != 0) {
|
|
dst[currentOffset + 2] = globalStart;
|
|
dst[currentOffset + 3] = globalEnd;
|
|
} else {
|
|
dst[currentOffset + 2] = contextStart;
|
|
dst[currentOffset + 3] = contextEnd;
|
|
}
|
|
|
|
}
|
|
)==="
|