연관 최적화를 방지하기 위해 단일 함수에 대해 ICC 속성 "fp-model precision"을 설정하는 방법은 무엇입니까?

NicholasM

gcc47, gcc48, clang33, icc13 및 icc14를 사용한 컴파일을 지원하는 프로젝트에서 Kahan summation을 구현 하고 있습니다.

이 알고리즘의 일부로 실수 추가의 연관성을 활용하는 최적화를 비활성화하고 싶습니다. (부동 점 연산은 연관되지 않습니다.)

관련 기능에서만 이러한 최적화를 비활성화하고 싶습니다 . ''no-associative-math '' 속성을 사용하여 gcc에서이를 수행하는 방법을 알아 냈습니다 . icc 또는 clang에서 어떻게 할 수 있습니까? 나는 운없이 검색했습니다.

class KahanSummation
{
  // GCC declaration
  void operator()(float observation) __attribute__((__optimize__("no-associative-math")))
  {
    // Kahan summation implementation
  }
};

암시하는 다른 GCC 속성 no-associative-mathno-unsafe-math-optimizations또는 no-fast-math입니다.

보면 인텔의 프리젠 테이션 (PDF, 슬라이드 8) 또는 다른 또는 다른 (PDF, 슬라이드 11) , I는이 기능에 대한 ICC의 세트 "정확한 FP-모델"로합니다. 내가 신경 쓰는 컴파일러는 ICC 13과 ICC 14입니다.

class KahanSummation
{
  // ICC or clang declaration
  void operator()(float observation) __attribute__((????))
  {
    // Kahan summation implementation
  }
};
TC

__attribute__GCC 확장입니다. Clang은 GCC 호환성을 유지하기 위해 해당 구문도 지원하지만 지원하는 것으로 보이는 유일한 최적화 관련 속성은 optnone모든 최적화를 해제하는입니다. ICC 에는 몇 가지 최적화 pragma 가 있지만 내가 말할 수있는대로 원하는 작업을 수행하는 것은 없습니다. VC ++ 호환성 을 지원 #pragma float_control 하는 것처럼 보이지만 ICC 문서에서 해당 pragma가 어떻게 사용되어야하는지 정확히 알 수는 없으므로 VC ++ 를 사용해야 합니다.

하지만 할 수있는 일은 별도의 번역 단위 (예 : cpp 파일)에서 원하는 기능을 정의하는 것입니다.

// Your header
class KahanSummation
{
  // Declaration
  void operator()(float observation);
};

// Separate cpp file - implements only this function
void KahanSummation::operator()(float observation)
{
    // Kahan summation implementation
}

그런 다음 사용해야하는 컴파일러 옵션을 사용하여 별도의 파일을 컴파일하고 결과 개체 파일을 나머지 프로그램에 연결할 수 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관