2010-12-13 11 views
10

मैं खुले स्रोत (लाइसेंस पर कोई प्रतिबंध नहीं) लॉग समारोह के कार्यान्वयन, हस्ताक्षर के साथ कुछSSE2: डबल परिशुद्धता लॉग समारोह

__m128d _mm_log_pd(__m128d); 

यह इंटेल लघु वेक्टर गणित लाइब्रेरी (आईसीसी का हिस्सा) में उपलब्ध है की जरूरत है, लेकिन आईसीसी न तो मुक्त है और न ही खुला स्रोत है। मैं केवल इंट्रिनिक्स का उपयोग करके कार्यान्वयन की तलाश में हूं।

इसे विशेष तर्कसंगत फ़ंक्शन अनुमानों का उपयोग करना चाहिए। मुझे सीएमएथ लॉग के रूप में लगभग सटीक कुछ चाहिए, 9-10 दशमलव अंक कहें, लेकिन तेज़।

+0

ओपन सोर्स कोड के लिए पूछते समय, आपको आमतौर पर अपने प्रोजेक्ट के लिए लाइसेंस निर्दिष्ट करने की आवश्यकता होती है, ताकि लोग जान सकें कि आप किसी निश्चित लाइसेंस के तहत कोड का उपयोग करने में सक्षम होंगे या नहीं। – Cascabel

+0

लाइसेंस कोई फर्क नहीं पड़ता। यह नली परियोजना के लिए है। इसके लिए सभी ओपन सोर्स लाइसेंस अच्छे हैं। – watson1180

+0

@ जेफ्रोमी: इसके विपरीत, उत्तर भविष्य में अन्य प्रश्नकर्ताओं के लिए उपयोगी होने की अधिक संभावना है यदि वे बहुत कम निर्माण नहीं कर रहे हैं। – caf

उत्तर

5

AMD LibM पर एक नज़र डालें। यह खुला स्रोत नहीं है, लेकिन मुफ़्त है। AFAIK, यह इंटेल CPUs पर काम करता है। उसी वेब पेज पर आपको एसीएमएल का एक लिंक मिलता है, एएमडी से एक और मुफ्त गणित lib। इसमें एएमडी लिबएम + मैट्रिक्स अल्गोस, एफएफ और वितरण से सबकुछ है।

मैं डबल परिशुद्धता vectorized गणित कार्यों के किसी भी खुला स्रोत कार्यान्वयन पता नहीं है। मुझे लगता है कि इंटेल और एएमडी libs को सीपीयू निर्माता द्वारा अनुकूलित किया जाता है और जब गति तेज होती है तो हर कोई उनका उपयोग करता है। आईआईआरसी, जीसीसी में वेक्टरकृत गणित कार्यों के लिए अंतर्निहित कार्यान्वयन का प्रयास था। मैं नहीं जानता कि वे कितने दूर हैं। जाहिर है, यह एक छोटा काम नहीं है।

0

यदि आप मौजूदा ओपन सोर्स कार्यान्वयन नहीं ढूंढ पा रहे हैं तो टेलर श्रृंखला के मानक विधि का उपयोग करके अपना खुद का निर्माण करना अपेक्षाकृत आसान है। इस के लिए Wikipedia और अन्य विधियों के लिए देखें।

+0

मेरा मानना ​​है कि एक पूर्ण सटीक कार्यान्वयन के लिए कई सटीक अंकगणितीय की आवश्यकता होती है। – caf

+6

टेलर श्रृंखला इसे करने का एक उचित तरीका नहीं है। एक विशेष तर्कसंगत समारोह अनुमानों का उपयोग करना चाहिए। मुझे लगभग cmath लॉग के रूप में सटीक कुछ चाहिए, लेकिन तेज़। अन्यथा मैं आसानी से cmath लॉग में सबकुछ भेज सकता था। आईसीसी कार्यान्वयन सटीक और तेज़ है। मुझे कुछ समान, लेकिन खुला स्रोत चाहिए। – watson1180

+0

@ watson1180 जाहिरा तौर पर तर्कसंगत समारोह सन्निकटन आधुनिक हार्डवेयर पर टेलर श्रृंखला तरीकों की तुलना में धीमी –

1

Framewave project अपाचे 2.0 लाइसेंस प्राप्त है और इसका उद्देश्य इंटेल आईपीपी के ओपन सोर्स समकक्ष होना है। इसमें कार्यान्वयन हैं जो आप जो खोज रहे हैं उसके करीब हैं। दस्तावेज़ीकरण में निश्चित सटीकता अंकगणितीय कार्यों की जांच करें।

6

मेरा मानना ​​है कि log2 गणना करने के लिए आसान है। आप अपनी संख्या को दो (बहुत तेज़) की शक्ति से गुणा/विभाजित कर सकते हैं जैसे कि यह (0.5, 2] में है, और फिर आप Pade approximant (एन के करीब एम लेते हैं) का उपयोग करते हैं जो एक बार और सभी के लिए प्राप्त करना आसान है, और जिसका क्रम आप अपनी आवश्यकताओं के अनुसार चुन सकते हैं। आप केवल अंकगणितीय आपरेशनों कि आप SSE intrinsics साथ कर सकते हैं की जरूरत है। जोड़ने/ऊपर स्केलिंग कारक के अनुसार एक निरंतर दूर करने के लिए मत भूलना।

आप प्राकृतिक लॉग चाहते हैं , log2(e) द्वारा विभाजित है, तो आप एक बार और सभी के लिए गणना है कि कर सकते हैं।

यह कस्टम देखने के कुछ विशिष्ट परियोजनाओं में कार्य लॉग इन करने के दुर्लभ नहीं है। स्टैंडर्ड पुस्तकालय कार्यों सामान्य मामले का समाधान है, लेकिन आप कुछ अधिक विशिष्ट की जरूरत है। मैं ईमानदारी से लगता है इसे स्वयं करना मुश्किल नहीं है।

1

यहां __m256d: https://stackoverflow.com/a/45898937/1915854 के समकक्ष है। __m128d पर इसे काटने के लिए यह बहुत छोटा होना चाहिए। अगर आपको इससे कोई समस्या आती है तो मुझे बताएं।

या आप मेरे कार्यान्वयन को दो बार __m128d नंबर प्राप्त करने के रूप में देख सकते हैं।

संबंधित मुद्दे