quarta-feira, 4 de maio de 2011

As instruções SSE

Enquanto a Intel dava um passo errado lançando as instruções MMX, algo de que o mercado não precisava e que até hoje não obtiveram uma aceitação significativa, a AMD veio com seu K6-2 e suas instruções 3D-Now!, que realmente conseguiam melhorar o desempenho do processador em até 20% em jogos 3D com suporte a esta tecnologia. Apesar de seu fraco coprocessador aritmético, em alguns jogos o K6-2 chegava bem perto de um Pentium II do mesmo clock, graças às suas instruções 3D, que passaram a ser suportadas pelos principais jogos, além de beneficiarem outros indirectamente através do DirectX (a partir da versão 6) ou através de drivers de vídeo optimizados.

Como as instruções 3D-Now são patenteadas, apenas a AMD (e eventualmente outra companhia  licenciada por ela) podia utilizá-las nos seus processadores. A Intel então optou por criar seu próprio conjunto de novas instruções, baptizado de SEE, a fim de também acelerar o desempenho do Pentium III.

Enquanto as instruções MMX melhoravam o desempenho do sistema basicamente no cálculo de números inteiros (o que explica sua fraca aceitação), as instruções SSE e as instruções 3D-Now! serviam para agilizar o cálculo de números de ponto flutuante, usados principalmente em jogos 3D e em aplicativos gráficos tridimensionais, justamente onde os processadores de então eram mais solicitados.
As instruções 3D-Now! eram capazes de aumentar o desempenho do K6-2 em 10, 15 ou até 20%. Mesmo 15% de aumento de performance não é um ganho nada desprezível, pois equivaleria a trocar um processador de 300 MHz por outro de 350 MHz.

O 3D-Now! é composto por um set de 21 novas instruções, o SEE por sua vez é composto por um set  de 70 novas instruções, que são capazes de melhorar o desempenho do processador, não só em jogos e aplicativos gráficos, mas também em software de descompressão de vídeo, reconhecimento de fala e aplicações multimédia em geral.

Como as novas instruções são apenas software, é preciso que os programas fossem optimizados para fazer uso deles. No caso dos jogos 3D, também existia aumento de performance caso o jogo utilizasse o DirectX 6.1 (ou superior), optimizado para as novas instruções, ou caso os drivers da placa de vídeo 3D fossem optimizados para as instruções SSE. Neste caso porém, o ganho seria muito menor que numa aplicação realmente optimizada, praticamente imperceptível em muitos casos.
Antes do seu lançamento, houve muita especulação sobre qual seria o ganho real de performance trazido pelas novas instruções do Pentium III. Alguns especialistas chegaram a argumentar que o ganho seria praticamente nulo, pois ao contrário do K6-2, o Pentium III já possuía um excelente coprocessador aritmético. Felizmente, estas previsões não se concretizaram. Os criadores do Quake 3 Arena, jogo que estava sendo optimizado para as novas instruções, estimaram que o aumento de performance ficaria entre 10 e 15% com o uso das novas instruções. No Adobe Photoshop 5.02, que também foi optimizado para as novas instruções, o aumento de desempenho também ficava na casa dos 15%. E, teoricamente, algumas aplicações podiam funcionar até 25% mais rápido. Realmente quanto às instruções, o Pentium III não estava nada mal.

- Mas o que fazia as instruções SSE serem tão, ou até mesmo mais eficientes que as badaladas instruções 3D-Now?

Basicamente, as instruções SSE diferem das instruções 3D-Now! devido à forma como são executadas. As instruções 3D-Now! permitem que algumas rotinas dos programas sejam executadas 3, ou até mesmo 4 vezes mais rápido do que seriam usando as instruções padrão do coprocessador aritmético. Digamos, num exemplo tosco, que 30% das rotinas utilizadas por um determinado jogo sejam executadas usando o 3D-Now!, sendo que em média, estas instruções (apenas as optimizadas) seriam executadas 3 vezes mais rápido. Seguindo nosso exemplo, teríamos 30% das rotinas do programa executadas em 1/3 do tempo, resultando num aumento de performance em torno de 20%. (note-se que não estamos levando em consideração inúmeros factores aqui, o nosso objectivo com este exemplo é apenas ilustrar melhor o benefício gerado por estas instruções).
As instruções SSE funcionam de forma semelhante, permitindo que muitas rotinas utilizadas pelos programas possam ser executadas muito mais rapidamente. A vantagem é que o Pentium III é capaz de processar simultaneamente instruções normais e instruções SSE, o que resulta em um aumento ainda maior de performance.

Enquanto no 3D-Now! o programa tem a todo momento que escolher entre utilizar uma das instruções padrão ou uma das instruções 3D-Now!, no Pentium III é possível usar os dois tipos de instruções simultaneamente, mantendo as três unidades de execução do coprocessador aritmético cheias durante mais tempo. A única desvantagem deste processo é que, para ter um beneficio total das instruções SSE, é necessário um número muito maior de alterações nos códigos dos programas, o que acaba por desestimular muitos produtores de software a tornar seus produtos compatíveis.

Parece claro que as instruções SSE, devido à maneira como são implementadas, são mais eficientes do que as instruções 3D-Now! da AMD, talvez pelo facto dos projectistas da Intel terem tido bastante tempo para criá-las e implementá-las. Não podemos esquecer-nos porém, que para se beneficiar tanto das instruções 3D-Now quanto das SSE, o software precisa ser re-escrito. Já tínhamos uma grande base instalada de processadores K6-2, K6-3 e Athlon, assim como vários títulos já optimizados para o 3D-Now!. Mesmo com toda a sua influência, não foi nada fácil para a Intel reverter esta estatística.
A última cartada da Intel para estimular os programadores a incluir suporte às instruções SSE em seus produtos, foi o lançamento de um compilador em C que adiciona o suporte às instruções automaticamente. Usando este compilador, que é distribuído gratuitamente, o programador pode construir seu programa normalmente, sem se preocupar em incluir qualquer suporte ao SSE e depois de terminado o programa utilizar o compilador para adicionar o suporte.

O compilador então verifica todas as linhas do código e adiciona instruções optimizadas sempre que for possível. Note que o programa continua sendo compatível com os processadores sem SSE: caso o programa seja executado em um Pentium III serão utilizadas as linhas optimizadas para o SSE e caso esteja sendo usado outro processador serão utilizadas as instruções normais.

A optimização feita pelo programa não é tão eficiente como a feita por um programador experimente, mas já é melhor que nada. De qualquer forma, o uso deste compilador acabou fazendo com que a maioria dos títulos 3D e multimédia lançados durante o ano 2001 recebessem alguma optimização para o SSE.

As instruções SSE são encontradas em todas as versões do Pentium III e Pentium III Xeon, além das versões do Celeron com core Coppermine. O Pentium 4 traz um conjunto de instruções aprimorado, o SSE 2.

in Manual de Hardware Completo
de Carlos E Marimoto

Sem comentários: