Teste sugere que o NVIDIA PhysX é programado para não apresentar boa performance em CPU

O fato de a API NVIDIA PhysX funcionar melhor quando está acelerada pela GPU é conhecido há um bom tempo, e, inclusive, este foi um dos motivos que levou a NVIDIA a comprar a tecnologia da Ageia. Entretanto, essa diferença brutal de performance entre Physx rodando em CPU e GPU (em GPU muitas vezes mais rápida) pode ser decorrente de algo previamente concebido pela NVIDIA.

NVIDIA PhysX



O website Real World Technologies promoveu uma análise do funcionamento do NVIDIA PhysX rodando em um processador Intel Core i7 920 operando a uma frequencia de 3.2GHz. Foi usado também o software Intel VTune para verificar a forma como o Physx usa os recursos da CPU.

Os resultados mostram-se, no mínimo, curiosos. Em primeiro lugar, verificou-se que o Physx não usa o recurso Intel Hyper-Threading, mesmo quando uma thread está atingindo mais de 90% de nível de utilização.

Outro aspecto interessante foi a constatação de muitas das DLLs do Physx, incluindo a PhysXCore.dll, só faz uso de instruções x87 no processamento de cálculos em ponto flutuante. A pergunta que fica é: qual o motivo de o Physx preferir usar as instruções x87 ao invés das instruções SSE2, que são muitas vezes mais rápidos nesse tipo de operação?

Na realidade, observou-se que as instruções SSE são usadas pelo NVIDIA Physx em poucas e insignificantes situações de carga de trabalho. No teste Dark Basic PhysX Soft Body Demo, por exemplo, o PhysXCore.dll executou 91% de suas operações de cálculos em ponto flutuante usando instruções x87.

O fato de a NVIDIA não usar as instruções SSE e optar pelas antiquadas e legadas instruções x87 certamente não é decorrência de falta de atualização do código, tendo em vista que o set de instruções SSE2 já estava presente na primeira CPU Intel Pentium 4 de 1.4Ghz de dez anos atrás.

Se a NVIDIA tivesse optado por usar instruções SSE2, a performance do Physx na execução de cálculos em precisão simples dobraria em relação ao observado atualmente. "Não há nenhuma razão técnica para o PhysX estar usando código x87, sobretudo pelo fato de que o Physx para console já usa as extensões AltiVec, que são muito similares às SSE", relata o Real World Technologies em sua análise.

Ainda segundo o site, a adaptação do Physx para passar a usar as instruções SSE2 não levaria mais do que um ou dois dias de trabalho, seguida de poucas semanas de testes de compatibilidade.

O site também considera que o fato de o Physx deliberadamente não usar as instruções SSE2 pode ter razões comerciais, pois, da forma como está programado, ele auxilia a NVIDIA a vender mais GPUs.

Comentários