2016-08-29 5 views
1

Woe는 저입니다. GPU와 CPU에서 동일한 부동 소수점 결과를 보장해야합니다. 좋아, 나는 IEEE가 나를 돌보고 몇 가지 반올림 옵션을 고수 할 좋은 표준을 제공했다는 것을 이해한다. CUDA 부분이 정렬됩니다 (다른 반올림 모드에 대한 내장 함수가 있음). 이것이 바로 동기입니다.C++에서 다른 IEEE 부동 소수점 반올림 모드로 작업

호스트 측 C++ 코드 - 특정 반올림 모드에서 부동 소수점 산술을 수행하려면 어떻게해야합니까? 후드 아래에서 어셈블리를 사용하는 래퍼 함수가 있습니까? 다른 반올림 모드가있는 부동 소수점 프록시 용 클래스 집합이 있습니까?

번역 단위 수준에 대해서도 동일한 질문을하고 있습니다. 번역 단위를 컴파일 할 때 컴파일러 (gcc/clang/MSVC)를 특정 반올림 모드로 기본 설정하려면 어떻게합니까? @AndreasPapadopoulos에서 리드에 따라

+0

http://en.cppreference.com/w/cpp/numeric/fenv/FE_round IEEE 반올림 모드는 CPU의 런타임 구성 속성이며, 컴파일시 특정 반올림 모드를 선택할 수 있다고는 생각하지 않습니다. . –

+0

@ AndreasPapadopoulos하지만 http://en.cppreference.com/w/cpp/numeric/fenv/feround를 설정할 수 있습니다 (또는 사용자가 재편성 할 수 없다는 것을 알아 내십시오). – StoryTeller

+0

@StoryTeller 예, 근본적으로 무엇입니까? 위의 내 코멘트에 링크되어 있습니다. –

답변

0

, 그것은 둥근 모드 변경 there is an official way 다음과 같습니다

int fesetround(int round) 
int fegetround() 

을하지만 몇 가지주의 사항이 있습니다 :

  1. 이것은 C++ (11),하지의 C + +98 (실제로는 C99의 <fenv.h> 시스템을 사용할 수도 있지만
  2. #pragma
  3. 0123을 통해 컴파일러와 통신해야합니다.
  4. 이 전환이 느릴 수 있습니다.

실제로 얼마나 널리 사용되는지 (그리고 주변에 더 멋진 추상화가 있는지를 잘 모르겠다.)