这里可能是一个非常简单的问题,但是我一直在寻找它几个小时没有任何东西要显示。
我有这段代码,我想在设备中使用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进入快速本地内存?
相关但不同的问题;这里缓冲区是在内核中创建的......
答案 0 :(得分:1)
我可能误解了这个问题,但是如果你想把你的数组放在本地内存中 - 你完全在内核中完成。您的OpenCL代码,而不是您的Python代码,负责分配和复制到本地内存。
例如,这个OpenCL代码 - 在内核中 - 将创建一个包含8个本地uint的数组,并将一个uint从全局内存复制到新的本地数组中。
__local uint my_local_array[8];
my_local_array[0] = my_global_array[0];
如果希望从本地内存返回结果,则从本地复制到全局,然后从全局复制回主机。
希望有所帮助!