पर सी ++/सीयूडीए कक्षा उत्तीर्ण करने के लिए मेरे पास सी ++ में लिखी गई एक कक्षा है जो cuda_runtime.h से कुछ परिभाषाओं का भी उपयोग करती है, यह एडीओएल-सी नामक ओपनसोर्स प्रोजेक्ट का एक हिस्सा है, आप here देख सकते हैं!पीसीयूडीए के स्रोत मॉड्यूल
यह काम करता है जब मैं CUDA-C का उपयोग कर रहा हूं, लेकिन मुझे ऐसा करने की संभावना होने पर पीईसीयूडीए में इस वर्ग को आयात करना है। इसलिए, मैं फ़ंक्शन के व्युत्पन्नों की गणना के लिए उपयोग किए जाने वाले विशिष्ट चर को परिभाषित करने के लिए इस वर्ग का उपयोग कर्नल के अंदर (मुख्य 'में नहीं) का उपयोग करूंगा। क्या इस कक्षा को पीईसीयूडीए के स्रोत मॉड्यूल में पास करने का कोई तरीका है?
मैंने एक समान प्रश्न पूछा, लेकिन यहां मैं थोड़ा और समझाना चाहता हूं। तो, एनवीसीसी-क्यूबिन (talonmies के लिए धन्यवाद) का उपयोग करके मेरे सी कोड को संकलित करने का एक समाधान है और फिर इसे driver.module_from_file() के साथ आयात कर रहा है, लेकिन, मैं SourceModule का उपयोग करना चाहता हूं और उन कर्नेल को एक .py फ़ाइल के अंदर लिखना चाहता हूं, इसलिए यह अधिक उपयोगकर्ता के अनुकूल हो सकता है। मेरे उदाहरण कुछ इस तरह दिखेगा:
from pycuda import driver, gpuarray
from pycuda.compiler import SourceModule
import pycuda.autoinit
kernel_code_template="""
__global__ void myfunction(float* inx, float* outy, float* outderiv)
{
//defining thread index
...
//declare dependent and independet variables as adoubles
//this is a part of my question
adtl::adouble y[3];
adtl::adouble x[3];
// ...
}
"""
... यह सिर्फ एक विचार है, लेकिन SourceModule पता नहीं होगा क्या कर रहे हैं "adouble के", क्योंकि वे वर्ग परिभाषा adoublecuda.h में परिभाषित कर रहे हैं, इसलिए मैं आशा है कि अब आप मेरे प्रश्न को बेहतर समझेंगे। क्या किसी के पास कोई सुराग है जहां मुझे शुरू करना चाहिए? यदि नहीं, तो मैं इस कर्नल्स को CUDA-C में लिखूंगा, और nvcc -cubin विकल्प का उपयोग करूंगा।
मदद के लिए धन्यवाद!
वाह, यही वह समाधान है जिसे मैं ढूंढ रहा था! मैं बस इस हेडर फ़ाइल को शामिल करना चाहता था, ताकि मेरे कर्नल को पता चले कि एडबेल क्लास की परिभाषा कहां है, लेकिन मुझे नहीं पता था कि कैसे। मैं इस "डबल" के अंदर इस दोहरी कक्षा का उपयोग नहीं करूंगा, लेकिन मुझे यह पता लगाने की आवश्यकता होगी कि gpu से यह एडोब सरणी कैसे प्राप्त करें। जैसा कि आप देख सकते हैं, एडबेल क्लास में केवल दो निजी सदस्य हैं: 'डबल वैल' 'डबल एडवल' शायद मुझे इसी तरह के पायथन में एक स्ट्रक्चर बनाने की आवश्यकता होगी। मेरी मदद करने के लिए बहुत बहुत धन्यवाद! – Banana
जब मैं इस कक्षा को शामिल करने का प्रयास करता हूं तो मुझे बहुत अधिक त्रुटियां मिलती हैं: "इस घोषणा में बाहरी" सी "लिंकेज नहीं हो सकता है। क्या मुझे adoublecuda.h बदलने की ज़रूरत है या कुछ और है? – Banana
जैसा कि मैंने अपने उत्तर में उल्लेख किया है, SourceModule कोड 'तार' को 'बाहरी "सी" {} 'घोषणा के साथ ब्रैकेट कर सकता है। आपके कोड में शुद्ध सी ++ परिभाषाओं के साथ, आप इसे नहीं चाहते हैं। आप उस व्यवहार को 'no_extern_c = True' कीवर्ड तर्क के साथ अक्षम कर सकते हैं। आउटपुट में प्रतीक उलझन में होगा, आपको इसे अपने पायथन कोड में accounnt में ले जाने की आवश्यकता हो सकती है। इस समय परीक्षण करने के लिए मेरे पास एक पिक्यूडा इंस्टॉलेशन नहीं है। – talonmies