2010-08-23 13 views
5

मैं ओपनसीएल में एक CUDA एप्लिकेशन (this if you must know) का अनुवाद करने पर काम कर रहा हूं। मूल एप्लिकेशन सी-स्टाइल सीयूडीए एपीआई का उपयोग करता है, परिणाम पढ़ने के दौरान स्वचालित व्यस्त-प्रतीक्षा से बचने के लिए केवल एक स्ट्रीम के साथ।ओपनसीएल घटनाक्रम और कमांड कतार

अब मुझे पता है कि ओपनसीएल कमांड कतार सीयूडीए धाराओं की तरह दिखती है। लेकिन the device read command में, और इसी प्रकार लिखने और कर्नेल निष्पादित आदेशों में, मैं घटनाओं के लिए पैरामीटर भी देखता हूं। तो मैं सोच रहा हूं, डिवाइस लिखने को निष्पादित करने में क्या लगता है, कई कर्नेल (उदाहरण के लिए एक कर्नेल को एक कॉल, फिर 100 कर्नेल को दूसरे कॉल), और एक डिवाइस पढ़ा जाता है, सभी अनुक्रमिक रूप से?

  1. यदि मैं उन्हें अनुक्रमिक रूप से एक ही कतार में अनुक्रमित करता हूं, तो क्या वे अनुक्रमिक रूप से निष्पादित करेंगे जैसे वे CUDA में करते हैं?
  2. यदि यह काम नहीं करता है, तो क्या मुझे डेज़ी-चेन घटनाएं करनी चाहिए, क्या प्रत्येक कॉल की प्रतीक्षा पिछले कॉल की घटना को सूचीबद्ध कर सकती है?
  3. या क्या मुझे प्रत्येक कॉल की प्रतीक्षा सूची में सभी पिछली घटनाएं जोड़नी चाहिए, जैसे कि निर्भरता या कुछ के लिए एन^2 खोज है?
  4. या क्या मुझे अलग-अलग कॉल के लिए event.wait() करना है, जैसा कि यह AMD's tutorial में कहता है?

धन्यवाद!

उत्तर

5

यह इस बात पर निर्भर करता है कि आप कमान कमान कैसे बनाते हैं। clCreateCommandQueue में एक गुण पैरामीटर है जिसमें CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE हो सकता है, जो कमांड कतार में अनुक्रमिक निष्पादन को सक्षम बनाता है।

यदि वह संपत्ति सेट की गई है, तो आदेश आदेश से या समानांतर में निष्पादित हो सकते हैं, और सिंक्रनाइज़ करने का एकमात्र तरीका ईवेंट का उपयोग कर रहा है।

जब वह संपत्ति सेट नहीं होती है, तो कतार में अनुक्रमिक रूप से निष्पादित आदेश कमांड होते हैं।

+0

एक जगह जिसे मैंने नहीं देखा था। धन्यवाद! –

+0

मुझे अपने कथन में "अधिकतर स्वीकार्य" में संशोधन करना होगा। ऐसा लगता है कि क्रम में क्रमबद्ध गणना में कई कर्नेल लगाए गए हैं। हालांकि, बफर पढ़ता है और लिखता है जब तक कि मैं दोनों घटनाओं का उपयोग नहीं करता * और * इंतजार करता हूं, संभवतः भले ही पढ़ना/लिखना सिंक्रोनस के रूप में निर्दिष्ट किया गया हो। एक कामकाजी उदाहरण के लिए BOINC (boinc.berkeley.edu) में atiopencl उदाहरण भी देखें। –

+0

यह नहीं है कि सीएल कैसे काम करता है, कमांड कतार बनाने पर ओपनसीएल स्पेक सेक्शन 5.1 देखें। यदि आप एक अलग व्यवहार देखते हैं, तो यह एक कार्यान्वयन त्रुटि (बग) है। –

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