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