वैरिफिकेशन, सरल शब्दों में, एल्गोरिदम को अनुकूलित करने का मतलब है ताकि यह प्रोसेसर में SIMD निर्देशों का उपयोग कर सके।
AVX, AVX2 और AVX512 निर्देश सेट (इंटेल) हैं जो एक निर्देश में कई डेटा पर एक ही ऑपरेशन करते हैं। उदाहरण के लिए। AVX512 का मतलब है कि आप एक बार में 16 पूर्णांक मान (4 बाइट) पर काम कर सकते हैं। इसका मतलब यह है कि यदि आपके पास 16 पूर्णांक के वेक्टर हैं और आप प्रत्येक पूर्णांक में उस मान को दोगुना करना चाहते हैं और फिर उसमें 10 जोड़ दें। आप या तो सामान्य रजिस्टर [a, b, c] पर मूल्यों को 16 बार लोड कर सकते हैं और एक ही ऑपरेशन कर सकते हैं या आप SIMD रजिस्टरों [xmm, ymm] पर सभी 16 मानों को लोड करके एक ही ऑपरेशन कर सकते हैं और एक बार ऑपरेशन कर सकते हैं। यह वेक्टर डेटा की गणना को गति देता है।
वैश्वीकरण में हम अपने डेटा को रीमॉडेल करके अपने लाभ के लिए इसका उपयोग करते हैं ताकि हम उस पर SIMD संचालन कर सकें और कार्यक्रम को गति प्रदान कर सकें।
केवल वैश्वीकरण के साथ समस्या से निपटने की स्थिति है। क्योंकि स्थितियां निष्पादन के प्रवाह को शाखा देती हैं। यह मास्किंग द्वारा नियंत्रित किया जा सकता है। एक अंकगणितीय ऑपरेशन में हालत मॉडलिंग करके। जैसे। अगर हम 10 को जोड़ना चाहते हैं यदि यह अधिक है तो 100 है। हम या तो कर सकते हैं।
if(x[i] > 100) x[i] += 10; // this will branch execution flow.
या हम सिचुएशनल ऑपरेशन में कंडीशन को मॉडल कर सकते हैं, जिससे एक वेक्टर वेक्टर सी स्थिति बन जाएगी।
c[i] = x[i] > 100; // storing the condition on masking vector
x[i] = x[i] + (c[i] & 10) // using mask
हालांकि यह बहुत ही मामूली उदाहरण है ... इस प्रकार, c हमारी मास्किंग वेक्टर है जिसका उपयोग हम बाइनरी ऑपरेशन को उसके मूल्य के आधार पर करने के लिए करते हैं। यह निष्पादन प्रवाह की शाखा से बचता है और वैश्वीकरण को सक्षम बनाता है।
वैश्वीकरण उतना ही महत्वपूर्ण है जितना कि समानांतरकरण। इस प्रकार, हमें इसका यथासंभव उपयोग करना चाहिए। सभी आधुनिक दिनों के प्रोसेसर में भारी गणना कार्यभार के लिए SIMD निर्देश हैं। हम अपने कोड को वैश्वीकरण का उपयोग करके इन SIMD निर्देशों का उपयोग करने के लिए अनुकूलित कर सकते हैं, यह आधुनिक प्रोसेसर पर उपलब्ध कई कोर पर चलने के लिए हमारे कोड को parrallelizing के समान है।
मैं ओपनएमपी के उल्लेख के साथ छोड़ना चाहूंगा, जो यो को प्रैग्मस का उपयोग करके कोड को वेक्टर करने देता है। मैं इसे एक अच्छा शुरुआती बिंदु मानता हूं। OpenACC के लिए भी यही कहा जा सकता है।