我正在使用PyOpenCL編寫OpenCL代碼。我的內核程序有一個輸入爲float2。如何在pyopencl中使用float2?
__kernel void Pack_Cmplx(__global float2* Data_In, __global float2* Data_Out, int N)
我需要在python聲明一個緩衝器,用於存儲和輸出用於傳遞輸入的內核。
python中的等效數據類型爲float2?我試過沒有成功:(
我正在使用PyOpenCL編寫OpenCL代碼。我的內核程序有一個輸入爲float2。如何在pyopencl中使用float2?
__kernel void Pack_Cmplx(__global float2* Data_In, __global float2* Data_Out, int N)
我需要在python聲明一個緩衝器,用於存儲和輸出用於傳遞輸入的內核。
python中的等效數據類型爲float2?我試過沒有成功:(
這裏numpy的D型處於pyOpenCL
程序使用FLOAT2一個MWE:
import numpy as np
###################################################
# openCL libraries
###################################################
import pyopencl as cl
import pyopencl.array as cl_array
deviceID = 0
platformID = 0
workGroup=(1,1)
N = 10
testData = np.zeros(N, dtype=cl_array.vec.float2)
dev = cl.get_platforms()[platformID].get_devices()[deviceID]
ctx = cl.Context([dev])
queue = cl.CommandQueue(ctx)
mf = cl.mem_flags
Data_In = cl.Buffer(ctx, mf.READ_WRITE, testData.nbytes)
prg = cl.Program(ctx, """
__kernel void Pack_Cmplx(__global float2* Data_In, int N)
{
int gid = get_global_id(0);
Data_In[gid] = 1;
}
""").build()
prg.Pack_Cmplx(queue, (N,1), workGroup, Data_In, np.int32(N))
cl.enqueue_copy(queue, testData, Data_In)
print testData
我希望幫助
哦,我不知道有一個由pyopencl爲float2內置的數據類型。這有幫助。 –
使用cl_array.vec.float2
另一種是隻使用np.float32
類型,使您numpy的(和OpenCL)緩衝器的兩倍。
testData = np.zeros(N*2, dtype=np.float32)
Data_In = cl.Buffer(ctx, mf.READ_WRITE, testData.nbytes)
prg = cl.Program(ctx, """
__kernel void Pack_Cmplx(__global float2* Data_In, int N)
{
int gid = get_global_id(0);
Data_In[gid] = 1; // not sure about this tbh. do we set both values to 1 here ?
}
""").build()
prg.Pack_Cmplx(queue, (N,1), workGroup, Data_In, np.int32(N))
這實際上適用於FLOAT2。讓我知道如果有賭注三路! 'dt = np.dtype([(「num1」,np.float16),(「num2」,np.float16)]) Data_Out = np.empty(100,dtype = dt)'。 –
相當確定它應該是兩個'np.float32'值的向量而不是float16。 – M4rtini