2010-12-13 2 views
10

나는 오픈 소스 (라이센스에 제한 없음) 로그 기능의 구현,SSE2 : 더블 정밀 로그 기능

__m128d _mm_log_pd(__m128d); 

그것은 인텔 짧은 벡터 수학 라이브러리 (ICC의 일부)에서 사용할 수 있습니다 서명 뭔가가 필요하지만, ICC는 무료 또는 오픈 소스가 아닙니다. intrinsics 만 사용하여 구현을 찾고 있습니다.

특별한 합리적인 함수 근사법을 사용해야합니다. cmath log와 거의 똑같은 것이 필요합니다. 예를 들어 9-10 십진수이지만 더 빠릅니다.

+0

오픈 소스 코드를 묻는 경우 일반적으로 프로젝트의 라이센스를 지정해야합니다. 그러면 사람들이 특정 라이센스에서 코드를 사용할 수 있는지 여부를 알 수 있습니다. – Cascabel

+0

라이센스는 중요하지 않습니다. 그것은 in-hose 프로젝트를위한 것입니다. 모든 오픈 소스 라이센스가 이에 적합합니다. – watson1180

+0

@ Jefromi : 반대로 응답이 너무 좁지 않은 경우에는 다른 질문자에게 도움이 될 가능성이 높습니다. – caf

답변

5

AMD LibM을보세요. 오픈 소스는 아니지만 무료입니다. AFAIK, 그것은 인텔 CPU에서 작동합니다. 같은 웹 페이지에서 AMD의 또 다른 무료 수학 라이브러리 인 ACML에 대한 링크를 찾을 수 있습니다. AMD LibM + Matrix algos, FF 및 배포판의 모든 것을 갖추고 있습니다.

이중 정밀도 벡터화 된 수학 함수의 오픈 소스 구현을 알지 못합니다. 인텔과 AMD 라이브러리는 CPU 제조업체가 손으로 최적화했으며 속도가 중요 할 때 모두 사용합니다. IIRC에서 GCC의 벡터화 된 수학 함수에 대한 내장 함수를 구현하려는 시도가있었습니다. 나는 그들이 얼마나 그럭저럭 얻을 수 있는지에 관해 모른다. 분명히, 그것은 사소한 작업이 아닙니다.

0

기존의 오픈 소스 구현을 찾을 수 없다면 Taylor 시리즈의 표준 방법을 사용하여 자신 만의 파일을 생성하는 것이 상대적으로 쉽습니다. 이 방법과 다양한 다른 방법에 대해서는 Wikipedia을 참조하십시오.

+0

완벽하게 정확한 구현을 위해서는 여러 정밀도 산술 연산이 필요하다고 생각합니다. – caf

+6

테일러 시리즈는 적절한 방법이 아닙니다. 특별한 합리적인 함수 근사법을 사용해야합니다. cmath 로그만큼 정확하지만 빠를만한 것이 필요합니다. 그렇지 않으면 단순히 cmath 로그에 모든 것을 보낼 수 있습니다. ICC 구현은 정확하고 빠릅니다. 비슷하지만 오픈 소스가 필요합니다. – watson1180

+0

@ watson1180 명백하게 합리적인 함수 근사는 현대 하드웨어의 테일러 (Taylor) 시리즈 방법보다 느립니다. –

1

Framewave project은 Apache 2.0 라이센스이며 인텔 IPP와 동등한 오픈 소스를 목표로합니다. 그것은 당신이 찾고있는 것에 가깝게 구현되어 있습니다. 설명서의 고정 정확도 산술 기능을 확인하십시오.

6

log2은 계산하기가 쉽습니다. 당신은 2의 거듭 제곱으로 당신의 수를 곱하거나 나눌 수 있습니다. (0.5, 2), 그러면 Pade approximant (M을 N에 가깝게 만듭니다)을 사용하면, SSE 내장 함수로 수행 할 수있는 산술 연산 만 필요합니다. 위의 배율 인수에 따라 상수를 추가/제거하는 것을 잊지 마십시오.

자연 로그를 원한다면 , log2(e)으로 나누어 계산하면 한 번에 계산할 수 있습니다.

특정 프로젝트에서 사용자 지정 로그 함수를 보는 것은 드문 일이 아닙니다. 표준 라이브러리 함수는 일반적인 경우를 다루지 만 좀 더 구체적인 것을 필요로합니다. 너 자신에게하는 것이 그렇게 어렵지 않다.

1

여기는 __m256d에 해당하는 사람 : https://stackoverflow.com/a/45898937/1915854입니다. 그것을 __m128d로 자르는 것은 아주 사소한 일입니다. 이 문제가 발생하면 알려주십시오.

또는 내 구현을 한 번에 두 개의 __m128d 번을 얻는 것으로 볼 수 있습니다.