2012-01-17 15 views
8

मैं कुछ आंकड़े गणना कर रहा हूं। मुझे उन्हें तेजी से होने की जरूरत है, इसलिए मैं एसएसई का उपयोग करने के लिए इसे अधिकतर लिखता हूं। मैं इसके लिए बहुत नया हूं, इसलिए मैं सोच रहा था कि यहां सही दृष्टिकोण क्या है:एसएसई के साथ लॉगरिदम, या एफपीयू पर स्विच?

मेरे ज्ञान के लिए, एसएसई में कोई लॉग 2 या एलएन फ़ंक्शन नहीं है, कम से कम 4.1 तक नहीं, जो नवीनतम संस्करण है मैं उपयोग हार्डवेयर द्वारा समर्थित है।

  1. निकालने 4 तैरता है, और enthropy निर्धारित करने के लिए उन पर एफपीयू गणना करते हैं - मैं रजिस्टर, सिर्फ उन्हें करने के लिए योग उन मूल्यों SSE में वापस के किसी भी लोड करने के लिए की जरूरत नहीं होगी:

    यह करने के लिए बेहतर है एक और नाव

  2. कि log2
+0

रेंज और सटीकता किस तरह आप अपने log2 के लिए की जरूरत है? –

+0

एफपीयू से मुझे प्राप्त होने वाली वही सटीकता वांछनीय होगी –

+1

आसपास कुछ एसएसई लॉग 2 कार्यान्वयन प्रतीत होता है, उदाहरण के लिए http://jrfonseca.blogspot.com/2008/09/fast-sse2-pow-tables-or-polynomials.html –

उत्तर

8

कुछ एसएसई log2 कार्यान्वयन के आसपास प्रतीत होता है, उदाहरण के लिए this one

Intel Approximate Maths Library भी है जिसमें log2 अन्य लोगों के बीच कार्य है - यह पुराना (2000) है लेकिन यह एसएसई 2 है और इसे अभी भी उचित रूप से अच्छी तरह से काम करना चाहिए।


यह भी देखें:

+1

ब्लॉग पर उपयोग की जाने वाली विधि के कारण, फ़ंक्शन अब CPU बाउंड के बजाय मेमोरी बाध्य है। मैंने लूप को कुछ _mm_prefetch प्यार का उपयोग करने के लिए थोड़ा सा अनलॉक किया, और यह अभी भी स्मृति बाध्य है। उस भयानक सूचक के लिए धन्यवाद! –

+0

खुशी है कि यह आपके लिए काम करता है। आप शायद पहले से ही यह जानते हैं, लेकिन यदि आप मेमोरी बैंडविड्थ बाधा को मार रहे हैं तो अपने ऑपरेशन को अपने लॉग 2 के साथ गठबंधन करने का प्रयास करें ताकि आप कैश में डेटा के अधिक उपयोग कर सकें। –

+1

यदि आप अपना उत्तर अपडेट कर रहे हैं, तो आप libmvec का उल्लेख करना चाहेंगे, जिसे हाल ही में ग्लिबैक के साथ भेज दिया गया है। –

1

कोई SSE अनुदेश एक लघुगणक समारोह लागू करता है वह यह है कि करता है SSE के लिए एक समारोह पाते हैं। हालांकि, कोई एकल x86 निर्देश भी नहीं है जो सामान्य जेनेरिक लॉग करता है। यदि आप सी मानक लाइब्रेरी से log या log10 जैसे लॉगरिदम फ़ंक्शन का उपयोग करने के बारे में सोच रहे हैं, तो libc जैसे ओपन-सोर्स लाइब्रेरी में उपयोग किए जाने वाले कार्यान्वयन को देखने के लायक है। आप आसानी से अपना खुद का लॉगरिदम अनुमान लगा सकते हैं जो एसएसई रजिस्टर में सभी तत्वों पर काम करता है।

इस तरह के एक फ़ंक्शन को अक्सर बहुपद अनुमान का उपयोग करके कार्यान्वित किया जाता है जो टेलर श्रृंखला जैसे इनपुट तर्कों के एक निश्चित क्षेत्र पर कुछ सटीकता विनिर्देश के भीतर मान्य होता है। फिर आप अपने लॉगरिदम रूटीन के लिए स्वीकार्य इनपुट रेंज में जेनेरिक इनपुट तर्क को लपेटने के लिए लॉगरिदम गुणों का लाभ उठा सकते हैं। इसके अलावा, आप संपत्ति का लाभ उठाते हुए लघुगणक के आधार parameterize कर सकते हैं:

log_y(x) = log_a(x)/log_a(y) 

कहाँ a लघुगणक दिनचर्या आपके द्वारा बनाए गए का आधार है।

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