2014-12-01 2 views
0

사용 가능한 CPU 기능에 따라 사용되는 클래스를 어떻게 변경합니까? 클라이언트 측에서 지원 SIMD하여 사용 Vector4 - 클래스를 변경하는 예를 들어사용 가능한 CPU 지원시 다른 클래스 사용

:

bool has_sse = get_cpuid_info("sse"); 

if(has_sse) { 
    // use Vector4SIMD only in the entire app 
} else { 
    // fallback to a plain Vector4-class 
} 
나는 몇 가지 방법 (편집 : 추가 제안) : 생각할 수

동적 라이브러리을 사용

  • 동적 캐스트
  • 가상 디스패치
  • 컴파일러 특정 찬사

요즘 소프트웨어에서 이와 유사한 동작이 어떻게 발생합니까?

+1

가상 메서드를 사용하고 모든 다른 구현을 일부 마스터의 하위 클래스로 사용합니다. 그런 다음 클래스를 인스턴스화 할 때'if' 문을 사용하여 만들 서브 클래스를 결정하십시오. –

+1

별도의 실행 파일이있는 것을 선호합니다. 그런 다음 실행 프로그램에서 CPU를 확인하고 원하는 실행 파일을 실행하십시오. – Mysticial

답변

0

컴파일러마다 다를 수 있습니다. Mark Ransom가 주석으로, 가상 방법을 사용할 수 있습니다, 물론의 ifunc function attribute

참조 특정 x86 builtins__builtin_cpu_supports처럼 최근 GCC을 제공합니다. 그러나 그것은 매우 짧고 빠른 작은 함수 (당신은 그것들을 인라인되기를 원합니다)를위한 노력의 가치가 없을 수도 있습니다.

+0

나는 컴파일 타임이 아닌 실행 시간에 만들어진 선택에 대한 의문을 가졌다. 짧고 빠른 기능에 대해 좋은 점은 통화 당 의미있는 양의 작업을 수행하려는 기능에 대해 내 기술을 예약하려고합니다. –

관련 문제