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 "MlContext.h" 3#include "../source/ggml.h" 4#include "testUtils.h" 5using namespace DirectCompute ; 6 7#define E_TYPE HRESULT_FROM_WIN32( ERROR_DATATYPE_MISMATCH ) 8 9static void dbgPrintSizeDiff (const char * what ,__m128i ref ,__m128i gpu ) 10{ 11 std::array < int ,8 > a ; 12_mm_storeu_si128 ( (__m128i * )& a [0 ],ref ); 13_mm_storeu_si128 ( (__m128i * )& a [4 ],gpu ); 14printf ("%s; reference [ %i, %i, %i, %i ], GPGPU [ %i, %i, %i, %i ]\n" , 15what , 16a [0 ],a [1 ],a [2 ],a [3 ], 17a [4 ],a [5 ],a [6 ],a [7 ] ); 18} 19 20void MlContext ::dbgPrintDifference (const ggml_tensor * reference ,const Tensor & gpu ,const char * what ,bool trapToDebugger ) 21{ 22sTensorDiff diff ; 23const __m128i gpuSize = gpu .sizeVec (); 24const __m128i gpuStrides = gpu .stridesVec (); 25__m128i expectedStrides ; 26if (reference -> type == GGML_TYPE_F32 ) 27 { 28if (gpu .getType ()!= eDataType::FP32 ) 29throw E_TYPE ; 30expectedStrides = _mm_slli_epi32 (gpuStrides ,2 ); 31 32 std::vector < float > v ; 33gpu .download (v ); 34diff = computeDiff (v .data (), (const float * )reference -> data ,v .size () ); 35 } 36else if (reference -> type == GGML_TYPE_F16 ) 37 { 38if (gpu .getType ()!= eDataType::FP16 ) 39throw E_TYPE ; 40expectedStrides = _mm_slli_epi32 (gpuStrides ,1 ); 41 42 std::vector < uint16_t > v ; 43gpu .download (v ); 44diff = computeDiff (v .data (), (const uint16_t * )reference -> data ,v .size () ); 45 } 46else 47throw E_NOTIMPL ; 48 49const __m128i ggmlSize = _mm_loadu_si128 ( (const __m128i * )& reference -> ne [0 ] ); 50const __m128i ggmlStrides = _mm_loadu_si128 ( (const __m128i * )& reference -> nb [0 ] ); 51if ( !vectorEqual (gpuSize ,ggmlSize ) ) 52dbgPrintSizeDiff ("dbgPrintDifference - size is different" ,ggmlSize ,gpuSize ); 53// if( !vectorEqual( expectedStrides, ggmlStrides ) ) dbgPrintSizeDiff( "dbgPrintDifference - stride is different", ggmlStrides, expectedStrides ); 54 55diff .what ); 56 57if (trapToDebugger ) 58__debugbreak (); 59}