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 "Binder.h" 3#include <algorithm> 4using namespace DirectCompute ; 5 6void Binder ::bind (ID3D11ShaderResourceView * srv0 ,ID3D11UnorderedAccessView * uav0 ) 7{ 8ID3D11DeviceContext * const ctx = context (); 9ctx -> CSSetUnorderedAccessViews (0 ,1 ,& uav0 ,nullptr ); 10 11ctx -> CSSetShaderResources (0 ,1 ,& srv0 ); 12 13maxSrv = std::max (maxSrv , (uint8_t )1 ); 14maxUav = std::max (maxUav , (uint8_t )1 ); 15} 16 17void Binder ::bind (ID3D11UnorderedAccessView * uav0 ) 18{ 19context ()-> CSSetUnorderedAccessViews (0 ,1 ,& uav0 ,nullptr ); 20maxUav = std::max (maxUav , (uint8_t )1 ); 21} 22 23void Binder ::bind (ID3D11ShaderResourceView * srv0 ,ID3D11ShaderResourceView * srv1 ,ID3D11UnorderedAccessView * uav0 ) 24{ 25ID3D11DeviceContext * const ctx = context (); 26ctx -> CSSetUnorderedAccessViews (0 ,1 ,& uav0 ,nullptr ); 27 28 std::array < ID3D11ShaderResourceView * ,2 > arr = {srv0 ,srv1 }; 29ctx -> CSSetShaderResources (0 ,2 ,arr .data () ); 30 31maxSrv = std::max (maxSrv , (uint8_t )2 ); 32maxUav = std::max (maxUav , (uint8_t )1 ); 33} 34 35void Binder ::bind ( std::initializer_list < ID3D11ShaderResourceView *> srvs , std::initializer_list < ID3D11UnorderedAccessView *> uavs ) 36{ 37ID3D11DeviceContext * const ctx = context (); 38 39const size_t lengthResources = srvs .size (); 40const size_t lengthUnordered = uavs .size (); 41assert (lengthResources > 0 && lengthResources < D3D11_COMMONSHADER_INPUT_RESOURCE_REGISTER_COUNT ); 42assert (lengthUnordered > 0 && lengthUnordered < D3D11_PS_CS_UAV_REGISTER_COUNT ); 43 44ctx -> CSSetUnorderedAccessViews (0 , (UINT )lengthUnordered ,uavs .begin (),nullptr ); 45ctx -> CSSetShaderResources (0 , (UINT )lengthResources ,srvs .begin () ); 46 47maxSrv = std::max (maxSrv , (uint8_t )lengthResources ); 48maxUav = std::max (maxUav , (uint8_t )lengthUnordered ); 49} 50 51Binder ::~Binder () 52{ 53uint8_t count = std::max (maxSrv ,maxUav ); 54if (0 == count ) 55return ; 56#pragma warning (disable: 6255) // Compiler doesn't know we have very few of these things 57size_t * arr = (size_t * )_alloca (count * sizeof (size_t ) ); 58memset (arr ,0 ,count * sizeof (size_t ) ); 59 60ID3D11DeviceContext * const ctx = context (); 61ctx -> CSSetShaderResources (0 ,maxSrv , (ID3D11ShaderResourceView ** )arr ); 62ctx -> CSSetUnorderedAccessViews (0 ,maxUav , (ID3D11UnorderedAccessView ** )arr ,nullptr ); 63}