summaryrefslogtreecommitdiffstats
path: root/Whisper/Utils/Trace/TraceStructures.cpp
blob: 289a5347bd7ef27dce7daf87fcf0b47d2b05f864 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include "stdafx.h"
#include "TraceStructures.h"
using namespace Tracing;

uint64_t sTraceItem::buffer( uint64_t off, size_t length, eDataType type )
{
	payloadOffset = off;
	payloadSize = length * DirectCompute::elementSize( type );
	*(uint64_t*)( &size[ 0 ] ) = length;
	*(uint64_t*)( &size[ 2 ] ) = 0;
	_mm_storeu_si128( ( __m128i* )stride.data(), _mm_setzero_si128() );
	itemType = eItemType::Buffer;
	dataType = type;
	return payloadSize;
}

uint64_t sTraceItem::tensor( uint64_t off, __m128i ne, __m128i nb, eDataType type )
{
	payloadOffset = off;
	_mm_storeu_si128( ( __m128i* )size.data(), ne );
	_mm_storeu_si128( ( __m128i* )stride.data(), nb );
	uint64_t count = 1;
	for( uint32_t i : size )
		if( i != 0 )
			count *= i;

	payloadSize = count * DirectCompute::elementSize( type );
	itemType = eItemType::Tensor;
	dataType = type;
	return payloadSize;
}