有没有办法array
在页面边界上分配 numpy 的数据部分(即数据)?
对于我关心的原因,如果我在 Intel 设备上使用 PyOpenCL,并且我想使用创建缓冲区CL_MEM_USE_HOST_PTR
,他们建议数据是 1)页面对齐和 2)大小为缓存行的倍数。
C 中有多种分配页面对齐内存的方法,例如:aligned malloc() in GCC?
有没有办法array
在页面边界上分配 numpy 的数据部分(即数据)?
对于我关心的原因,如果我在 Intel 设备上使用 PyOpenCL,并且我想使用创建缓冲区CL_MEM_USE_HOST_PTR
,他们建议数据是 1)页面对齐和 2)大小为缓存行的倍数。
C 中有多种分配页面对齐内存的方法,例如:aligned malloc() in GCC?
我不知道 Numpy 目前有任何显式调用来对齐内存。除了@Saulio Castro 建议的 Cython,我能想到的唯一方法是使用 numpy 分配或 PyOpenCL API 通过“填充”来明智地分配内存。
您需要创建一个“填充”缓冲区以对齐 64K 字节的倍数。您还需要“填充”您在数组中分配的各个数据结构元素,以便它们也依次对齐到 4k 字节边界。这当然取决于您的元素的外观,它们是使用 numpy 数据类型构建的,还是使用 numpy dtype 创建的结构。dtype 的 API 有一个“align”关键字,但根据此链接上的讨论,我会对此保持警惕。
对齐结构的一个老派技巧是从最大的元素开始,向下工作,然后用足够的 uint8“填充”,以便一个或 N 个结构填充对齐边界。
希望不要太模糊...