2016-08-27 4 views
1

이중 정밀도를 사용하여 sincos() 함수에 대한 막대한 양의 호출을 만드는 프로그램을 CUDA에 작성하고 있습니다. 이것이 코드의 가장 큰 병목 중 하나 인 것 같아요. 함수 호출 횟수를 줄일 수는 없습니다.CUDA에서 sincos 호출을 최적화 할 수있는 방법이 있습니까?

CUDA 또는 가져올 수있는 라이브러리에서 sincos에 대한 근사한 근사값이 있습니까? 나는 또한 정확도에 상당히 관심이있다. 그래서 근사치가 좋을수록, 나의 코드는 더 행복해질 것이다.

나는 또한 룩업 테이블을 만들거나 테일러 시리즈로 값을 근사하는 것에 대해 생각해 봤지만, 그 길을 가기 전에 몇 가지 의견을 원합니다.

답변

3

매우 빠르고 정확한 sincos 기능은 CUDA math api에서 사용할 수 있습니다. math.h을 포함하면됩니다. 또는 sincosf (here)을 사용하면됩니다. (난 당신이 귀하의 질문에 배정 밀도 그냥 몇 가지를 지적. 말했다 알고 있어요.)

당신이 sincospif 대신 sincosf를 사용할 수있는 경우, @njuffa 당신을 관심을 가질 그의 마법 here을 일했다.

This questionthis question도 관심있어합니다.

+0

저는 이미'math.h'에서'sincos'를 사용하고 있습니다.'sincosf'를 사용하여 너무 많은 정확성을 느낄지 모르겠다. 어떻게 생각하니?. 내 앵글은'pi * expr'이 아니지만'sincospif '를 가리켜 주셔서 감사합니다! – Alejandro

+1

확실하게'sincosf'와'sincos' 사이의 정밀도 (비트)에는 많은 차이가 있습니다. 나는 당신의 특정한 알고리즘이 얼마나 중요한지 모르겠다. 성능에 관심이 있고 일반적으로 성능과 정밀도가 균형을 이루기 때문에 질문의 규정에 따라 알고리즘의 민감도를 정밀하게 조사하는 것이 논리적으로 보입니다. njuffa가 올 때, 그는 당신의 모든 질문에 대답 할 수있을 것입니다. –

+2

@Alejandro'sincos'의 적용 가능성 외에도 다른 특별한 사용 패턴이있을 수 있습니다. 어떤 코드는 사인과 코사인을 규칙적인 각도 단위로 사용하기 때문에'sincos'를 호출하지 않고 그 값을 계산할 수 있습니다. 다른 코드는 역 삼각 함수와 함께 사인과 코사인을 사용합니다. 이러한 사용은 잠재적으로 더 저렴한 대수 계산으로 대체 될 수 있습니다. 특정 유즈 케이스에서 사인 및 코사인 호출을 줄일 수있는 방법에 대해 질문하는 것을 고려해 볼 수 있습니다. – njuffa

관련 문제