저는 14 살 때부터 게임 엔진 북을 읽었습니다. (그 당시 나는 물건을 이해하지 못했습니다 : P) 이제 꽤 오랜 세월이 흘러서 제 게임 엔진의 수학적 기초를 프로그래밍하기 시작했습니다. 나는이 '도서관'을 어떻게 디자인 할 것인지 오랫동안 생각 해왔다. (필자가 "정리 된 파일 세트"라고 말함) 몇 년에 한 번씩 새로운 SIMD 명령어 세트가 나왔고, 나는 그들에게 낭비하지 않기를 바랬다. (이것에 대해 잘못 생각하면 말해.)함수 포인터를 사용하여 게임 엔진 수학 라이브러리에서 SIMD 사용하기 ~ 좋습니다.
나는 적어도 다음과 같은 특성을 가지고 싶어 :
- 그것을 경우 SIMD를 런타임시 SIMD를 가지고 있는지 확인하고 사용하는 것이 가능 만들기를 그렇지 않은 경우에는 정상적인 C++ 버전을 사용합니다. (약간의 호출 오버 헤드가있을 수 있습니까?)
- 컴파일 타임에 이미 타겟을 알고 있으면 SIMD 또는 일반 C++ 용으로 컴파일 할 수있게 만듭니다. 컴파일러는 SIMD 또는 C++가 사용되는지 여부를 알기 때문에 호출을 인라인으로 만들거나 교차 최적화에 적합하게 만들 수 있습니다.
편집 - 나는 소스 코드 휴대용 만들고 싶어 너무 너무
그래서 나는 함수 포인터를 사용하는 것이 좋은 해결책이 될 것이라고 생각이 다른 deviced 다음 86 (-64)에서 실행할 수있는 I 프로그램을 시작할 때 정적으로 초기화합니다. 그리고 적합한 기능 (예 : Matrix/Vector의 곱셈)이 호출됩니다.
이 디자인의 장점과 단점 (어느 쪽이 더 중량이 더 큽니까?)은 무엇이라고 생각합니까? 위에서 설명한대로 두 속성을 모두 사용하여 만들 수 있습니까? 기독교
[컴파일러 내장 함수] (http://en.wikipedia.org/wiki/Intrinsic_function) 함수를 살펴볼 수 있습니다. SIMD 명령어에 직접 매핑되는 명령어가 많이 있습니다. 타겟 플랫폼이 해당 명령어를 지원하지 않으면 컴파일러는 현재 명령어를 에뮬레이트 할만큼 똑똑해야합니다. g.e. [여기 VS2012 내장 함수] (http://msdn.microsoft.com/en-us/library/26td21ds%28v=vs.110%29.aspx). –
SSE2 지침은 최소 10 년 동안 사용할 수 있습니다. 구형 컴퓨터에서 실행되는 게임에 관심이 있습니까? (예 : 휴대 전화로 게임을하거나 그런 식으로 게임을하는 것은 아닙니다.) –
@MatsPetersson 나는 나의 질문을 편집했다! 나는 그것이 모든 시스템에 이식되어야한다는 것을 추가하는 매우 중요한 목표를 잊었다. –