|
|
内存对齐 NumPy v121dev0 Manual |
|
作者:佚名 文章来源:本站原创 点击数: 更新时间:2023/5/27 21:59:44 | 【字体:小 大】 |
小型制药压片机numpy使用两种不同的对齐方式来实现这些目标:“真正对齐”和“uint对齐”。
“真”对齐是指C中等效C类型的依赖于体系结构的对齐。例如,在X64系统中numpy.float64等于double在C.中,在大多数系统中,这要么是4字节,要么是8字节(这可以在GCC中由选项控制malign-double)如果变量的内存偏移量是其对齐的倍数,则该变量在内存中对齐。在某些系统(如SPARC)上,内存对齐是必需的,而在其他系统上,则会加速。
“uint”对齐取决于数据类型的大小。它被定义为numpy的复制代码用来复制数据类型的uint的“真正对齐”,如果没有等价的uint,则定义为undefined/unalinted。目前,numpy使用uint8、uint16、uint32、uint64和uint64分别复制大小为1、2、4、8、16字节的数据,并且所有其他大小的数据类型不能uint对齐。
aligndtype构造函数的关键字,它只影响结构化数组。如果未手动提供结构的字段偏移,numpy将自动确定偏移。在那种情况下,align=True填充结构,使每个字段在内存和集合中“真”对齐dtype.alignment要成为字段“真”对齐中最大的一个。这就像C-structs通常做的那样。否则,如果手动提供偏移量或项大小align=True只需检查所有字段是否“真”对齐,以及总项大小是否是最大字段对齐的倍数。在任何一种情况下dtype.isalignedstruct也设置为“真”。
ALIGNED数组的标志为false,ufuncs将在计算前缓冲/转换数组。这是必需的,因为ufunc内部循环直接访问原始元素,如果元素不是真对齐的话,可能会在某些arch上失败。
ALIGNED如果为false,则它们将使用缓冲参数的代码路径,以使参数正确对齐。
|
|
 栏目文章
|
|
|