मेरा प्रश्न किताब से निम्नलिखित वाक्यांश के संबंध में है:सरणी vectorization
दुर्भाग्य से, SOA प्रपत्र सभी में आदर्श नहीं है परिस्थितियों। यादृच्छिक या अनौपचारिक परिस्थितियों के लिए, डेटा तक पहुंचने के लिए एकत्रित किया जाता है और सोए फॉर्म के परिणामस्वरूप अतिरिक्त अनइडेड डेटा को कैश में पढ़ा जा सकता है, जिससे प्रदर्शन कम हो जाता है। इस मामले में, एओएस फॉर्म का उपयोग इसके बजाय एक छोटे से काम करने वाले सेट और प्रदर्शन में सुधार होगा। आम तौर पर, हालांकि, यदि गणना वेक्टरकृत होना है, तो एसओए फॉर्म को प्राथमिकता दी जाती है।
मेरे अनुमान क्यों AOS बेहतर प्रदर्शन में हो सकता है पर जब अलग है, या सब बेहतर, एक ही ढांचे में क्षेत्रों एकल vectorization समय में भाग ले रहे हैं।
उदाहरण (सिर्फ एक अवधारणा है, कोई ठोस, या बिल्कुल भी काम कर कोड):
/*Note that the types of data I maintain the same intentionally,
to simplify discussion*/
struct Data {
float mean;
float distribution[10]
}
और परिभाषित उन की सरणी
Data aos[5];
अब कुछ डेटा स्रोत से बेतरतीब ढंग से मिला , यदि वेक्टरेशन लूप के दौरान मैं कुछ ऐसा करता हूं:
float* dataPtr = &(aos[0].mean);
#pragma simd
for(int i=0; i< 60; i++)
{
const float mean = (*dataPtr);
/*do something with mean */
dataPtr++;
/*do something with distribution */
}
इसके परिणामस्वरूप बेहतर प्रदर्शन होगा, एसओए के मामले में, मैं कैश लाइन पर अधिक जानकारी दूंगा जो मुझे वास्तव में इस गणना के दौरान आवश्यक हो सकता है। कुछ सीपीयू प्री-कैशिंग? एओएस के परिणामस्वरूप बेहतर प्रदर्शन में इसके परिणामस्वरूप।
क्या मेरी धारणा सही है, या कुछ और है?
डरावनी तीन अक्षर शब्दकोष: SOA = Arrays का संरचना, AoS = संरचनाओं का ऐरे। –
@ हंसपैसेंट: इस तरह वे कैसे कहते हैं, और पूर्ण नाम लिखने से शीर्षक बहुत लंबा और कम बदसूरत नहीं होता है। – Tigran
@ टिग्रान: उन लोगों के लाभ के लिए, जो आपकी पुस्तक की शब्दावली नहीं जानते हैं, के लिए शर्तों को परिभाषित करना, इसमें अधिक समय नहीं लगता है। –