PyOpenCL:如何创建本地内存缓冲区?

时间:2015-05-16 03:49:51

标签: python-2.7 opencl pyopencl

这里可能是一个非常简单的问题,但是我一直在寻找它几个小时没有任何东西要显示。

我有这段代码,我想在设备中使用256位(8 uint32)bitstring_gpu作为localmemory指针:

def Get_Bitstring_GPU_Buffer(ctx, bitstring):
    bitstring_gpu = cl.Buffer(ctx, mem_flags.READ_ONLY | mem_flags.COPY_HOST_PTR, hostbuf=bitstring)
return bitstring_gpu

稍后在内核调用中使用它:

prg.get_active_hard_locations_64bit(queue, (HARD_LOCATIONS,), None, memory_addresses_gpu.data, bitstring_gpu, distances_gpu.data, hash_table_gpu.data ).wait()

...而bitstring只是一个随机的256位位串(通过sha256生成,然后转换为numpy数组。

def Get_Random_Bitstring():    
    bitstring = address_space_through_sha256_SDM.get_bitstring(str(random.randrange(2**32-1)))
return bitstring

如何让bitstring_buf进入快速本地内存?

相关但不同的问题;这里缓冲区是在内核中创建的......

How to create variable sized __local memory in pyopencl?

1 个答案:

答案 0 :(得分:1)

我可能误解了这个问题,但是如果你想把你的数组放在本地内存中 - 你完全在内核中完成。您的OpenCL代码,而不是您的Python代码,负责分配和复制到本地内存。

例如,这个OpenCL代码 - 在内核中 - 将创建一个包含8个本地uint的数组,并将一个uint从全局内存复制到新的本地数组中。

__local uint my_local_array[8];

my_local_array[0] = my_global_array[0];

如果希望从本地内存返回结果,则从本地复制到全局,然后从全局复制回主机。

希望有所帮助!

相关问题