yum-archive/TaSTT-Whisper

High-performance GPGPU inference of OpenAI's Whisper automatic speech recognition (ASR) model

git clone https://git.yummers.dev/yum-archive/TaSTT-Whisper

KonstantinSource codes8c4603c

master
1.3 KiB65 linesraw
1#include "stdafx.h"
2#include "CpuProfiler.h"
3
4namespace
5{
6	using namespace Whisper;
7
8	inline int64_t qpcNow()
9	{
10		int64_t res;
11		QueryPerformanceCounter( (LARGE_INTEGER*)&res );
12		return res;
13	}
14
15	class CpuTimescale
16	{
17		uint64_t frequency = 0;
18		const int64_t tscStart;
19		const int64_t qpcStart;
20
21		uint64_t computeTscFrequency();
22
23	public:
24
25		CpuTimescale() :
26			tscStart( tscNow() ),
27			qpcStart( qpcNow() )
28		{ }
29
30		inline uint64_t computeTicks( uint64_t tsc )
31		{
32			uint64_t freq = frequency;
33			if( freq == 0 )
34				freq = computeTscFrequency();
35
36			return makeTime( tsc, freq );
37		}
38	};
39
40	uint64_t __declspec( noinline ) CpuTimescale::computeTscFrequency()
41	{
42		int64_t tsc = tscNow();
43		int64_t qpc = qpcNow();
44		tsc -= tscStart;
45		qpc -= qpcStart;
46
47		uint64_t qpcFreq;
48		QueryPerformanceFrequency( (LARGE_INTEGER*)&qpcFreq );
49
50		// Seconds = qpc / qpcFreq
51		// ticks per second = tsc / seconds = tsc * qpcFreq / qpc
52		uint64_t res = ( (uint64_t)tsc * qpcFreq + ( (uint64_t)qpc / 2 ) - 1 ) / (uint64_t)qpc;
53		frequency = res;
54		const double GHz = (double)(int64_t)res * 1.0E-9;
55		logDebug( u8"Computed CPU base frequency: %g GHz", GHz );
56		return res;
57	}
58
59	static CpuTimescale timescale;
60}
61
62uint64_t Whisper::ticksFromTsc( uint64_t tscDiff )
63{
64	return timescale.computeTicks( tscDiff );
65}