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-math
은 no-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
}
};
__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] 삭제
몇 마디 만하겠습니다