2012-07-16 8 views
4

CUDA 프로그래밍 가이드 w.r.t -use-fast-math 최적화에 대해 간략하게 살펴 보았지만 부록 C에서는 본질을 고유로 변환하는 것을 언급했지만 곱셈에 대해서는 언급하지 않았습니다. 제가이 질문을하는 이유는 제 커널이 많은 곱셈을 가지고 있기 때문입니다. 나는 NVCC가 곱셈과 덧셈 (정규 '*'와 '+'연산자가 사용되고 그 내장 함수가 결코 FMAD 연산으로 합쳐지지 않을 때)을 융합하려고 시도한다는 것을 알고있다. 그러나 내 코드가 무거운 곱셈이면 __fmul_rn과 같은 SP 내장 함수를 반올림하면 이점이 있습니까?-use-fast-math 옵션은 SP 곱셈을 내장 함수로 변환합니까?

  1. 는 -use-빠른 수학 옵션 __fmul_rn 같은 instrinsics를 SP하기 위해 '*'연산자 곱셈을 번역 하는가 :

    그래서 두 가지 질문이 있습니다?

  2. __fmul_rn을 명시 적으로 사용하기 위해 곱셈을 손으로 코딩 할 경우 성능상의 이점이 있습니까? 예 또는 일부 숫자가 나를 이해하는 데 도움이됩니다.

답변

3

"독립"단 ​​정밀도 곱셈은 항상 하드웨어 지침 ("내장")로 컴파일합니다. 다른 유형의 부동 소수점 곱셈 명령어는 없습니다. nvcc의 -use_fast_math 옵션은 컴퓨팅 기능 1.x 대상에 대해 생성 된 부동 소수점 곱셈 명령어에 영향을 미치지 않습니다. 2.x 및 3.x 대상에서 컴파일러는 호환 모드로 전환되고 모든 단일 정밀도 곱셈 명령어는 mul.ftz.f32 (0으로 플러시)이됩니다.

언급 한 부동 소수점 intrinics (__fmul_{rm,rn,rp,rz,ftz,sat})는 IEEE 반올림 동작 만 명시 적으로 제어합니다. 페르미 (Fermi) 또는 케플러 (Kepler) GPU에서 처리량 차이가 있다고 생각하지 않습니다.

+0

설명해 주셔서 감사합니다. – Sayan

+1

__fmul_rn()은 특정 IEEE 반올림 모드가있는 PTX 명령어에 매핑됩니다. 이 기능은 특정 최적화, 특히 단 정밀도 곱셈을 병합 한 다음 다중 가형 유형 명령어 (sm_1x의 경우 FMAD, sm_2x 및 sm_3x의 FFMA)에 단 정밀도 추가를 수행하는 것을 억제합니다. PTX 설명서를 참조하십시오. 이 속성은 특정 코드에 대해 특정 숫자 속성을 얻기를 원할 때 유용 할 수 있습니다. 예를 들어 CUDA 수학 라이브러리 내의 다양한 위치에서이 목적으로 사용됩니다. – njuffa

+0

"일부 코드에 특정 숫자 속성을 적용하고 CUDA 수학 라이브러리 내의 다양한 위치에서이 용도로 사용됩니다"- 예제를 제공해 줄 수 있습니까? 고맙습니다. – Sayan