문제

.NET Framework의 수학 기능은 주로 이중 정밀 플로트에서 작동하며 단일 정밀 (Float) 오버로드가 없습니다. 고성능 시나리오에서 단일 정밀 데이터로 작업 할 때 불필요한 캐스팅이 발생하고 필요한 것보다 더 정밀한 기능을 계산하므로 성능은 어느 정도 영향을받습니다.

이 추가 CPU 오버 헤드 중 일부를 피하는 방법이 있습니까? 예를 들어 FPU 지침을 직접 호출하는 플로트 오버로드가있는 오픈 소스 수학 라이브러리가 있습니까? (내 이해는 이것이 CLR에서 지원이 필요하다는 것입니다). 그리고 실제로 현대 CPU에 단일 정밀 지침이 있는지 확실하지 않습니다.

이 질문은 Sigmoid 기능 최적화에 대한이 질문에서 부분적으로 영감을 받았습니다.

C#의 수학 최적화

도움이 되었습니까?

해결책

내가 아는 한, .NET 프레임 워크에는 수학 내입에 직접 액세스 할 수있는 API가 포함되어 있지 않습니다. 모노 라이브러리에는 내재에 대한 작업 지원이 포함되어 있지만 그 상태는 확실하지 않습니다.

편집 :이 단락은 왜 과부하를 보지 못하는지에 대한 논평입니다. float 매개 변수.] 한 가지 문제는 CLI 평가 스택 (ECMA-335)이 float 그리고 double 유형. 유효한 구현이 처리 될 수 있습니다 모든 것 A로 double 수학 운영의 경우, 그러나 CLR (Microsoft의 CLI 구현)이 할 수있는 경우 단일 정제 산술에 대한 최적화를 수행한다고 생각합니다.

내재 (특히 SIMD 확장) 문제가 아직 발표 된 제품에서 해결되지 않은 것은 불행한 일이라고 생각합니다. 내 외부인의 추측은 내부에 대한 지원은 .NET 프레임 워크 릴리스 사이클 에서이 시점에서 용납 할 수없는 위험을 초래하는 VM에 대한 상당한 변경이 필요하다는 것입니다. 쓰레기 수집기 (그리고 예외 처리 메커니즘)는 레지스터 할당 자와 밀접하게 결합되어 있으며, 내입을 지원하면 해당 영역에 급진적 인 새로운 변수가 추가됩니다.

다른 팁

예, 우리는 필요한 모든 경우 단일 정밀 부동 소수점 계산을 기본적으로 사용하는 고성능 선물 스케일링 수학 라이브러리를 구축합니다. 그리고 당신은 올바르게 구현되면 이중 정밀도를 사용할 때보 다 훨씬 빠를 수 있습니다.

체크 아웃 이것 센터 스페이스 소프트웨어의 수학 라이브러리.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top