2013-12-09 1 views
2

임의의 기본 기본 정밀도 산술을 수행하는 가장 좋은 방법은 무엇입니까 최상의 성능?기본 임의 정밀도 산술을위한 최상의 성능

바이너리로 전환하고 일부 인라인 어셈블리로 작업하려고 생각했지만 실제로는 성능을 최대로 높이는 방법이 필요하며 이것이 가장 좋은 방법이라고 확신하지 못합니다.

EDIT : standart C++ 이외의 라이브러리는 사용하고 싶지 않습니다.

+2

이것은 매우 광범위한 질문입니다. 1) "최상의"성능을 가진 임의의 정밀도는 그 자체로 큰 문제입니다. 2) 임의의 기반은 표현을 변경하는 경우와시기 사이에 상반 관계를 만들어야하기 때문에 훨씬 더 복잡합니다. 3) "표준 C++"을 사용하면 결코 "최고의 성능"을 얻을 수 없습니다. 나는 당신이 "최고의"성능을 원할 때 더러워 져야한다. – Mysticial

+2

1. 문제를 해결하는 코드를 작성하십시오. 2. 측정하십시오. 3. 그것을 조정하십시오. – Devolus

+0

답변 해 주셔서 감사합니다. 사실 standart 라이브러리를 사용한다는 의미는 아니 었습니다.이 방법은 내가 직접 만들 필요가 있다고 말하는 것입니다. 임의의 자료는 일의 일부입니다.이 방법이 쉽지는 않을 것이라는 것을 압니다. 그러나 훌륭한 성능 (어셈블리는 제가 더 나은 것을 찾지 못하면 아마 계속 진행할 것입니다)을 찾고 있습니다. 임의의 기본에서 2 진으로 전환하는 것에 대해, 이것이 최선의 방법이라고 확신하지는 않지만 더 좋은 방법은 없습니다. – Green

답변

2

문제는 다중 정밀도 수치 알고리즘에서 얻을 수있는 "최상의"성능은 작업하는 데이터 (예 : 계산해야 할 수도있는 평균 숫자 순서)에 따라 크게 달라집니다. 예를 들어 GNU GMP에 의해 사용되는 알고리즘의 선택에 대한 설명을 고려해

https://gmplib.org/manual/Algorithms.html

감에 부 정도로

은 GNU GMP 코드는 또한 (정밀 부동 소수점 변환 코드에 특히)의 glibc 내부 사용 "표준 c"라이브러리.

개인적인 경험에 비추어 볼 때, GMP의 성능 수치를 극복하는 것은 극히 어렵습니다. (사실 일반적인 경우 GMP 성능에 2 배까지 도달하기가 어렵 기 때문에 성능이 절대적인 우선 순위 인 경우 디자인 목표를 재고하고 싶습니다.) 다중 정밀도 계산의 성능은 구현 기술에 크게 의존하지 않습니다. 따라서 숫자가 상당히 길면 Java와 같은 것 대신 어셈블리를 사용하여 어떤 것도 이기지 않을 것입니다. 알고리즘의 복잡성이 반드시 우세 할 것입니다. 실제로 사용 가능한 최고 수준의 언어로 시작하여 거기에서 최적화하는 것이 좋습니다.

만약 당신이 그렇게하지 않았다면 Knuth의 TAoCP 2 권 2 장을 반드시 읽어야합니다.

나는 이것이 아마도 당신이 찾고있는 대답이 아니라는 것을 알고있다. 그러나 그것은 주석보다 길다.

관련 문제