अंदर अनुक्रमण 3 डी सरणियों मैं अजगर में छवियों को संसाधित करने और कर्नेल में एक 3 डी numpy सरणी (height
एक्स width
एक्स 4
) भेजने के लिए PyOpenCL उपयोग कर रहा हूँ। मुझे कर्नेल कोड के अंदर 3 डी सरणी अनुक्रमणित करने में समस्या हो रही है। अभी के लिए मैं केवल प्रति आउटपुट में संपूर्ण इनपुट सरणी की प्रतिलिपि बनाने में सक्षम हूं। वर्तमान कोड ऐसा दिखाई देता है जहां img
img.shape = (320, 512, 4)
साथ छवि है:PyOpenCL कर्नेल कोड
__kernel void part1(__global float* img, __global float* results)
{
unsigned int x = get_global_id(0);
unsigned int y = get_global_id(1);
unsigned int z = get_global_id(2);
int index = x + 320*y + 320*512*z;
results[index] = img[index];
}
हालांकि, मैं काफी यह कैसे काम समझ में नहीं आता। उदाहरण के लिए, मैं इस कर्नेल के अंदर img[1, 2, 3]
के पाइथन समकक्ष को कैसे अनुक्रमणित करूं? और आगे, कुछ इंडेक्स को स्टोर करने के लिए results
में कौन सा इंडेक्स इस्तेमाल किया जाना चाहिए यदि मैं पाइथन पर परिणाम प्राप्त करते समय results[1, 2, 3]
स्थिति में होना चाहता हूं तो मुझे अंक चाहिए?
इस मैं इस अजगर कोड का उपयोग कर रहा चलाने के लिए:
import pyopencl as cl
import numpy as np
class OpenCL:
def __init__(self):
self.ctx = cl.create_some_context()
self.queue = cl.CommandQueue(self.ctx)
def loadProgram(self, filename):
f = open(filename, 'r')
fstr = "".join(f.readlines())
self.program = cl.Program(self.ctx, fstr).build()
def opencl_energy(self, img):
mf = cl.mem_flags
self.img = img.astype(np.float32)
self.img_buf = cl.Buffer(self.ctx, mf.READ_ONLY | mf.COPY_HOST_PTR, hostbuf=self.img)
self.dest_buf = cl.Buffer(self.ctx, mf.WRITE_ONLY, self.img.nbytes)
self.program.part1(self.queue, self.img.shape, None, self.img_buf, self.dest_buf)
c = np.empty_like(self.img)
cl.enqueue_read_buffer(self.queue, self.dest_buf, c).wait()
return c
example = OpenCL()
example.loadProgram("get_energy.cl")
image = np.random.rand(320, 512, 4)
image = image.astype(np.float32)
results = example.opencl_energy(image)
print("All items are equal:", (results==image).all())
मैंने देखा, कि pyopenCL सीधे सीएल Arrays को इंटरफ़ेस करने में सक्षम होना चाहिए। मैंने फिर भी इंडेक्सिंग सहित ऐसा करने का प्रबंधन नहीं किया। – Dschoni
क्या यह प्रश्न अभी भी प्रासंगिक है? यदि आप कोशिश करने के इच्छुक हैं तो मुझे कुछ दिलचस्प जानकारी मिल सकती है। – jurij
@jurij अब मेरे लिए नहीं। लेकिन अगर आपके पास कुछ मूल्यवान अंतर्दृष्टि हैं, तो उन्हें दूसरों के लिए साझा करने में संकोच न करें, जो एक ही समस्या का सामना कर सकते हैं। – nikicc