Módulo V
Bibliotecas Otimizadas
Bibliotecas de OtimizaçãoBibliotecas otimizadas para os processadores Intel ® XScale™
Disponíveis e no site
PCA Developer Networkhttp://www.intel.com/pca
Intel ® IPP/GPP Library Integrated Performance Primitives (IPP)
Funções DSP
Áudio
Codecs de vídeo
Criptografia (novo na versão 4)
Graphics Performance Primitives (GPP)Funções geométricas
Funções gráficas
Licenciado a baixo custo em microprocessadores Intel® XScale™
Intel ® IPP Library
FFT, IFFT, DCT, IDCT
Average, FIR, Median, etc...
RGB, YUV, YCbCr, YCC, etc...
Erode and Dilate
Norms, Moment
Add, Sub, Mul, Sqr, Set, Zero,etc.
Transformações
Filtros
Conversão de Cores
Morfologia
Estatísticas de Vetores
Manipulação de Vetores
Intel ® IPP Codec Library
GSM-AMR G.723.1
MP3 Decoder
MPEG-4 Decoder H.263 Decoder
JPEG
Fala
Áudio
Vídeo
Imagem
Intel ® GPP Library
Ponto Flutuante Ponto Fixo
Mul, SQ, Div, Inv
Div, Inv, Sqrt, Inv Sqrt Sin, Cos, SinCos
Add, Sub, Scale, Dot, Cross, Length, Normalize, Transform
Identity, Translate, Scale, RotX, RotY, RotZ, Multiply
Conversão de Tipo de Dado
Aritmética com ponto fixo
Com aproximações
Trigonometria
Vetor
Matriz
Scanline(F/G, +/-Z, +/-T(M/A/D)) Rasterização
Formato Ponto Fixo IPP/GPP usam o formato de ponto fixo
Algumas funções usam Q15.16, algumas Q0.15, algumas permitem especificar o n de Qm.n
Formato Qm.n n especifica quantos bits disponíveis para a parte fracionária
Precisão de 2n
m especifica o número de bits da parte inteira.
1 bit reservado para o sinal Exemplo: Q16.15
-216 215 21 20 2-1 2-14 2-15... ...b31 b30 b16 b15 b14 b1 b0
Operações com Ponto Fixo
Multiplicação a=1,5; em Q15.16 → 1,5*216=98304 b=0,5; em Q15.16 → 0,5*216=32768 Somando a e b → 98304+32768=131072=2,0*216
((1,5+0,5)*216)/216
Q15.16Q15.16
O resultado deverá ser dividido por 216 (65536 )
Precisão Interna da Biblioteca
O resultado deve ser deslocado para baixo
unsigned long tmp, result;unsigned short data;
tmp = data << 8;gppSqrtHP_n_32s(tmp1,&result,8);data = result >> 8;
Um número Q15.0 precisa ser antes deslocado para cima, reservando assim espaço para os valores fracionários
O dado está no formato Q15.0, desloca-se 8 bits para esquerda criando
espaço para uma melhor precisão. Então o número
está no formato Q23.8. Depois da chamada, o dado
retornado deve ser deslocando mais uma vez
de 8 bits para a direita.
Esquema dos Nomes IPP ipp<domain><operation>_<function-specific
modifier>_<datatype>_<data modifier> (parameter list) domain: funcionalidade do subconjunto
s - “signal processing.”
operation: comportamento da função FFTFwd – FFT Forward
function-specific modifier: especifica melhor a operação RToCCSL128 – Real para “Complex Conjugate Symmetric” com
128 pontos
Esquema dos Nomes IPP ipp<domain><operation>_<function-specific
modifier>_<datatype>_<data modifier> (parameter list) datatype: especifica o número de bits e/ou a disposição dos
dados: #<u|s>[c] 16s – 16 bits com sinal (tipo dos parâmetros de entrada e saída) 16s32sc - 16 bits de entrada com sinal e 32 bits de saída
complexos com sinal
data modifier : dados associados com a operação D1 – sinal de uma dimensão; D2 – sinal de duas dimensões; I –
operação “in-place”; Sfs – operação com saturação.
parameter list: Lista de parâmetros (podem ser tipos IPP ou não)
Esquema dos Nomes IPP
IppStatus ippsSet_16s(Ipp16s val,
Ipp16s * pDst,
int len);
IppStatus ippsFFTFwd_RToCCSL128_16s32sc(const Ipp16s * pSrc,
Ipp32sc * pDst);IppStatus ippsAddC_16s_ISfs(
Ipp16s val,
Ipp16s * pSrcDst,
int len,
int scaleFactor);
Esquema dos Nomes GPP gpp<graphics/data entity>
<action>_<fraction_part>_<datatype> (parameter list) graphics/data entity: tipo de funcionalidade
Vet3D; Matrix4x4
action: comportamento da função SinCos – cálculo de seno e coseno
fraction_part: especifica a parte fracionária 16, 32 ou n que indica n bits para representação fracionária
datatype: especifica o número de bits e/ou a disposição dos dados: #<u|s>[c] (#=16 ou 32)
Esquema dos Nomes GPPGppStatus gppSinCosHP_n_32s (
I32 theta,
I32* sin_theta,
I32* cos_theta,
U32 n);
GppStatus gppDiv_16_32s(I32 num,
I32 denom,
I32* pDst);
GppStatus gppDiv_n_32s(I32 num,
I32 denom,
I32* pDst,
U32 n);
quad_eqn(I32 a, I32 b, I32 c, U32 n, I32 *r1, I32 *r2) { I32 val1, val2, sqrt_val, num1, num2, den;
gppSquare_n_32s(b, &val1, n); // Eleva ao quadrado gppMul_n_32s(a, c, &val2, n); // a*c val2 <<= 2; //*4 gppSqrtHP_n_32s((val1 – val2), &sqrt_val, n); num1 = -b – sqrt_val; num2 = -b + sqrt_val; den = a << 1; gppDiv_n_32s(num1, den, r1, n); gppDiv_n_32s(num2, den, r2, n);}
Cálculo das Raízes de uma Equação do 2o Grau
IPP/GPP Library – Ajustando a IDE Insira o caminho dos
arquivos .lib
C:\ARQUIVOS DE PROGRAMAS\INTEL CORPORATION\GPP\LIB
C:\ARQUIVOS DE PROGRAMAS\INTEL CORPORATION\IPP\ IPPWMMX40\LIB
IPP/GPP Library – Ajustando a IDE Insira o caminho dos
arquivos .h C:\ARQUIVOS DE
PROGRAMAS\INTEL CORPORATION\GPP\INCLUDE
C:\ARQUIVOS DE PROGRAMAS\INTEL CORPORATION\IPP\ IPPWMMX40\INCLUDE
IPP/GPP Library – Ajustando a IDE
Aquivos que terminam com _r são para release
Arquivos que terminam com _d são para debug
Adicione o arquivo da biblioteca para a guia de ligação em Project->Settings
Arquivos binários de imagem das Intel IPP para Windows
Tipos de funções Pocket PC ou Smartphone
Processamento de SinaisippSP_WMMX40PPC_r.lib
ippSP_WMMX40PPC_d.lib
CODEC de ÁudioippAC_WMMX40PPC_r.lib
ippAC_WMMX40PPC_d.lib
CODEC de VídeoippVC_WMMX40PPC_r.lib
ippVC_WMMX40PPC_d.lib
CODEC de VozippSC_WMMX40PPC_r.lib
ippSC_WMMX40PPC_d.lib
Arquivos binários de imagem das Intel IPP para Windows
Tipos de funções Pocket PC ou Smartphone
Processamento de ImagensippIP_WMMX40PPC_r.lib
ippIP_WMMX40PPC_d.lib
CODEC JPEGippJP_WMMX40PPC_r.lib
ippJP_WMMX40PPC_d.lib
CriptografiaippCP_WMMX40PPC_r.lib
ippCP_WMMX40PPC_d.lib
Áudio Toolkit APIippSR_WMMX40PPC_r.lib
ippSR_WMMX40PPC_d.lib
Arquivos binários de imagem das Intel GPP para Windows
• Apenas um arquivo • gppXSC11_r.lib ou• gppXSC11_d.lib
Intel ® Compiler Library O Compilador Intel possui uma biblioteca em tempo
de execução (run-time) ligada estaticamente
A biblioteca possui funções de alta performance para raiz quadrada, multiplicação com ponto flutuante, divisão, divisão inteira, etc.
É possível usar a biblioteca sem usar o compilador da Intel (mesmo não sendo muito conveniente fazer isso)
Você pode encontrar informações detalhadas na seção libraries da ajuda do compilador da Intel, em Tools->Intel Help
Módulo V
Laboratório
Top Related