Ultimamente, tenho me perguntado como as GPUs calculam seno e cosseno, e o Google não me ajudou a encontrar uma resposta precisa.
Inicialmente, eu pensava que, para tornar os cálculos o mais rápido possível, a GPU usaria algum tipo de tabela de pesquisa. Mas então eu percebi que armazenar todos os valores de pecado em uma tabela com o dobro de [0, 2 * pi] seria enorme e, portanto, não seria uma opção válida.
A tabela pode ser reduzida em resolução e os valores ausentes para uma pesquisa podem ser lidos. Isso, no entanto, introduz um possível erro que pode se propagar para erros maiores e inaceitáveis ao executar o cálculo várias vezes.
Minha última idéia é que eles poderiam estar usando uma aproximação de Taylor, mas isso envolveria bastante aritmética, que pode ser muito lenta para uma GPU. Portanto, a pergunta é: o que as GPUs usam para calcular os senos? São tabelas de pesquisa, aproximações ou um híbrido de ambos? E possível, eles usam o mesmo método para outros cálculos como sqrt ()?
fonte
Respostas:
Acredito que as GPUs NVidia usam uma pesquisa de tabela, seguida por uma interpolação quadrática. Eu acho que eles estão usando um algoritmo semelhante ao descrito em: Oberman, Stuart F; Siu, Michael Y: "Um interpolador de mutlifunções com eficiência de área e alto desempenho", Aritmética interna da IEEE Symp Comp (ARITH-17): 272-279, 2005 .
A pesquisa da tabela é indexada com os bits mais significativos da entrada, , e retorna três coeficientes, , , . O resultado final é produzido avaliando . Os coeficientes para cada intervalo de são escolhidos para minimizar o erro máximo da função de destino nesse intervalo.m x c0 c1 c2 c0+c1x+c2x2 x
Para que a unidade possa ser totalmente canalizada para produzir um resultado por ciclo, a unidade contém uma unidade quadrada especial e dois multiplicadores wallace-tree codificados em estande. Para cada função especial, eles escolhem o número de entradas da tabela ( ) para que a avaliação polinomial lhes forneça uma resposta IEEE FP de precisão única, correta em duas unidades, em último lugar.2m
fonte