बनाम मैं सरल गिरी है?OpenCL अदिश वेक्टर
सभी ट्यूटोरियल का कहना है, कि वेक्टर प्रकार का उपयोग कर गणना को गति ...
मेजबान पक्ष, स्मृति Float4 तर्क के लिए alocated पर 16 बाइट्स गठबंधन और global_work_size clEnqueueNDRangeKernel 4 बार छोटा होता है के लिए है।
कर्नेल एएमडी एचडी 5770 जीपीयू, एएमडी-एपीपी-एसडीके-वी 2.6 पर चलता है। CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT के लिए
उपकरण जानकारी देता है 4.
संपादित करें:
global_work_size = 1024 * 1024 (और अधिक)
local_work_size = 256
समय CL_PROFILING_COMMAND_START और CL_PROFILING_COMMAND_END का उपयोग कर मापा जाता है।
छोटे global_work_size (फ्लोट 4 के लिए फ्लोट/2048 के लिए 8196) के लिए, वेक्टरिज्ड संस्करण तेज है, लेकिन मैं जानना चाहता हूं, क्यों?
वैश्विक कार्य आकार और कार्यसमूह के आकार के मूल्य क्या हैं? आप किस समय माप रहे हैं, और कैसे? –
वैश्विक कार्य आकार = 1024 * 1024 स्थानीय कार्य आकार = 256, मैं CL_PROFILING_COMMAND_START और CL_PROFILING_COMMAND_END का उपयोग करके clEnquueNDRange कर्नेल का समय मापता हूं। छोटे global_work_size (फ्लोट 4 के लिए फ्लोट/2048 के लिए 8196) के लिए, वेक्टरिज्ड संस्करण तेज है, लेकिन मैं जानना चाहता हूं, क्यों? – ldanko
छोटे और बड़े काम के आकार के बीच का अंतर आपके निरंतर कैश के कारण हो सकता है। तो 2 प्रश्न: 1) यदि आप कॉन्स को हटाते हैं, तो क्या यह अभी भी छोटे और धीमे के लिए धीमा है? 2) यदि आप कहीं भी अंदर जाते हैं, तो फ्लोट के लिए 65536 और फ्लोट 4 के लिए 16384 कहें, तब क्या होता है? – user1111929