在numpy中获取页面对齐的内存

时间:2014-06-14 00:08:12

标签: numpy opencl memory-alignment pyopencl

有没有办法在页面边界上分配numpy array的数据部分(即数据)?

为什么我关心,如果我在英特尔设备上使用PyOpenCL,我想使用CL_MEM_USE_HOST_PTRthey recommend创建一个缓冲区,数据是1)页面对齐和2)大小a多个缓存行。

C中有多种分配页面对齐内存的方法,例如:aligned malloc() in GCC?

1 个答案:

答案 0 :(得分:1)

我不知道Numpy此时有任何明确的调用记忆的调用。除了@Saulio Castro建议的Cython之外,我能想到的唯一方法就是通过明智的内存分配,使用numpy分配或PyOpenCL API进行填充"填充"。

你需要创建一个缓冲区"填充"对齐64K字节的倍数。你还需要" pad"您在数组中分配的各个数据结构元素,因此它们也与4k字节边界对齐。这当然取决于你的元素是什么样的,它们是用numpy数据类型构建的,还是用numpy dtype创建的结构。 dtype的API有一个"对齐"关键字,但基于this link的讨论,我会对此保持警惕。

一个旧学校的技巧来对齐结构是从最大的元素开始,向下工作,然后"垫"有足够的uint8,所以一个或N个结构填充对齐边界。

希望不要太模糊......