有没有办法在页面边界上分配numpy array
的数据部分(即数据)?
为什么我关心,如果我在英特尔设备上使用PyOpenCL,我想使用CL_MEM_USE_HOST_PTR
,they recommend创建一个缓冲区,数据是1)页面对齐和2)大小a多个缓存行。
C中有多种分配页面对齐内存的方法,例如:aligned malloc() in GCC?
答案 0 :(得分:1)
我不知道Numpy此时有任何明确的调用记忆的调用。除了@Saulio Castro建议的Cython之外,我能想到的唯一方法就是通过明智的内存分配,使用numpy分配或PyOpenCL API进行填充"填充"。
你需要创建一个缓冲区"填充"对齐64K字节的倍数。你还需要" pad"您在数组中分配的各个数据结构元素,因此它们也与4k字节边界对齐。这当然取决于你的元素是什么样的,它们是用numpy数据类型构建的,还是用numpy dtype创建的结构。 dtype的API有一个"对齐"关键字,但基于this link的讨论,我会对此保持警惕。
一个旧学校的技巧来对齐结构是从最大的元素开始,向下工作,然后"垫"有足够的uint8,所以一个或N个结构填充对齐边界。
希望不要太模糊......