मैंने कुछ परियोजनाओं पर ओपनसीएल के साथ काम किया है, लेकिन हमेशा कर्नेल को एक (कभी-कभी बड़ा) फ़ंक्शन के रूप में लिखा है। अब मैं एक और जटिल परियोजना पर काम कर रहा हूं और कई कर्नेल में कार्यों को साझा करना चाहता हूं।बड़े ओपनसीएल कर्नेल का निर्माण कैसे करें?
लेकिन उदाहरण मैं सभी पा सकते हैं एक एकल फाइल (बहुत कुछ भी माध्यमिक कार्य कहते हैं) के रूप में गिरी दिखा। ऐसा लगता है कि एकाधिक फ़ाइलों का उपयोग करना संभव होना चाहिए - clCreateProgramWithSource()
एकाधिक स्ट्रिंग स्वीकार करता है (और उन्हें जोड़ता है, मुझे लगता है) - हालांकि pyopencl का Program()
केवल एक ही स्रोत लेता है।
तो मैं अनुभव ऐसा करने वाले किसी भी व्यक्ति से सुनना पसंद करेंगे:
- वहाँ कई स्रोत फ़ाइलों के साथ जुड़े किसी भी समस्याओं कर रहे हैं?
- फाइलों को बस संयोजित करने के लिए पाइपोप्लेक्ल के लिए सबसे अच्छा कामकाज है?
- क्या कार्यों की एक लाइब्रेरी संकलित करने के लिए कोई तरीका है (प्रत्येक कर्नेल के साथ लाइब्रेरी स्रोत में गुजरने के बजाय, भले ही सभी का उपयोग नहीं किया जाता है)?
- यदि हर बार लाइब्रेरी स्रोत में पास करना आवश्यक है, तो अप्रयुक्त कार्यों को छोड़ दिया जाता है (कोई ओवरहेड नहीं)?
- कोई अन्य सर्वोत्तम अभ्यास/सुझाव?
धन्यवाद।
आप एक संयोजन #include "part1.cl" #include "part2.cl" होने फ़ाइल बना सकते हैं। यह मेरे लिए काम करता है (एनवीडिया कंपाइलर), हालांकि ऐप चलाने पर हर बार संकलित किया जाता है। मुझे लगता है कि प्रीकंपिल्ड फ़ंक्शंस की लाइब्रेरी होने पर थोड़ा सा विज्ञान-फाई होता है, क्योंकि फ़ंक्शन कोड प्रत्येक कर्नेल में रेखांकित किया जाता है (यही कारण है कि आप रिकर्सिव फ़ंक्शन नहीं लिख सकते हैं)। –