2012-05-14 9 views
10

का उपयोग कर लुक-अप टेबल मेरे पास एक बड़ा पिक्सेल प्रोसेसिंग फ़ंक्शन है जिसे मैं वर्तमान में आंतरिक कार्यों का उपयोग करके अनुकूलित करने का प्रयास कर रहा हूं।सिमड

एसएसई नौसिखिया होने के नाते, मुझे यकीन नहीं है कि कोड के भाग से कैसे निपटें, जिसमें लुकअप टेबल शामिल हैं। मैं क्या कोशिश कर रहा हूँ

//outside loop 
const float LUT_RATIO = 1000.0F; 

//in loop 
float v = ... //input value 
v = myLookupTable[static_cast<int>(v * LUT_RATIO)]; 

:

असल में, मैं निम्नलिखित वेनिला सी ++ कोड vectorize करने के लिए कोशिश कर रहा हूँ

//outside loop 
const __m128 LUT_RATIO = _mm_set1_ps(1000.0F); 

//in loop 
__m128 v = _mm_set_ps(v1, v2, v3, v4); //input values 
__m128i vI = _mm_cvtps_epi32(_mm_mul_ps(v, LUT_RATIO)); //multiply and convert to integers 
v = ??? // how to get vI indices of myLookupTable? 

संपादित करें: ildjarn एक मुद्दा यह है कि अपनी ओर से स्पष्टीकरण की मांग करता है। मैं लुकअप टेबल कोड के लिए स्पीडअप हासिल करने की कोशिश नहीं कर रहा हूं, मैं बस रजिस्टरों को विशेष रूप से लुकअप करने के लिए तैरने के लिए स्टोर करने से बचने की कोशिश कर रहा हूं, क्योंकि यह हिस्सा 2 अन्य हिस्सों के बीच सैंडविच किया गया है जो एसएसई से सैद्धांतिक रूप से लाभ उठा सकता है।

+0

आप किसने आश्वस्त किया है कि आप 'myLookupTable [static_cast (v) * LUT_RATIO]' में सुधार कर सकते हैं? यहां कोई गणना नहीं की जा रही है, एसएसई क्यों लागू होगा? – ildjarn

+2

@ildjarn मुझे पूरा यकीन है कि मैं इस भाग में सुधार नहीं कर सकता, लेकिन मैं समारोह के अन्य हिस्सों में सुधार करने की उम्मीद कर रहा हूं, और '__m128' और 'फ्लोट [4]' के बीच आगे बढ़ने के दंड से बचने के लिए मुझे यह कोड भी सदिश करना होगा। – Rotem

उत्तर

12

यदि आप अगले वर्ष तक इंतजार कर सकते हैं तो इंटेल के हैसवेल सीपीयू में AVX2 होगा जिसमें एकत्रित भार के लिए निर्देश शामिल होंगे। यह आपको ऐसा करने में सक्षम बनाता है उदा। एक निर्देश में 8 समांतर LUT लुकअप (उदा। VGATHERDPS देखें)। इसके अलावा, आप भाग्य से बाहर हैं, जब तक कि आपके LUTs बहुत छोटे न हों (उदा। 16 तत्व), इस मामले में आप PSHUFB का उपयोग कर सकते हैं।

+0

दुर्भाग्यवश मेरे एलयूटी 10000 तत्व बड़े हैं। यहां तक ​​कि अगर मैं एक नए प्रोसेसर की प्रतीक्षा कर रहा था, तब भी यह वर्षों तक होगा जब तक कि हैसवेल को न्यूनतम सीपीयू के रूप में निर्दिष्ट करना वैध नहीं होगा। :) जानकारी के लिए धन्यवाद। – Rotem

+1

ठीक है - यदि आप अपने LUTs का अनुमान लगा सकते हैं, उदा। एक बहुपद के साथ फिर भी आप एसएसई के साथ जीत प्राप्त कर सकते हैं, अन्यथा मुझे डर है कि आप स्केलर कोड से फंस गए हैं। –

+3

तब स्केलर कोड है। यह एक तरह से अच्छी खबर है, मैं इस हिस्से के बारे में चिंता करना बंद कर सकता हूं और उन हिस्सों पर काम कर सकता हूं जो अधिक अनुकूलन साबित हो सकते हैं। – Rotem

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