MemoryView

MemoryView 提供了在扩展库之间共享内存中固定大小元素的多维同构数组的功能。

免责声明

概述

我们有时会处理某些类型的对象,这些对象在其内部表示中具有在连续内存区域上的相同类型固定大小元素的数组。numo-narray 中的 Numo::NArray 和 rmagick 中的 Magick::Image 是此类对象的典型示例。MemoryView 在这些库之间扮演了共享此类对象内部数据的枢纽角色,无需复制。

在数据分析、机器学习和图像处理等领域,无复制数据共享非常重要。在这些领域,人们需要使用多个库来处理大量内存中的数据。如果我们被迫复制数据以在库之间交换大型数据,则大量的数据处理时间将被用于复制数据。您可以使用 MemoryView 来避免这种浪费时间。

MemoryView 有两类 API

  1. 生产者 API

    类可以注册自己的 MemoryView 条目,这允许该类的对象公开其 MemoryView

  2. 消费者 API

    消费者 API 允许我们获取和管理对象的 MemoryView

MemoryView 结构

MemoryView 结构 rb_memory_view_t 用于导出对象的 MemoryView。此结构包含对象的引用,该对象是 MemoryView 的所有者,指向导出内存头的指针,以及描述内存结构的元数据。元数据可以描述具有步长的多维数组。

MemoryView 结构的成员

MemoryView 结构包含以下成员。

MemoryView API

对于消费者

view 的成员填充为一维字节数组。

使用给定元素大小,将 strides 数组填充为给定形状的连续数组的字节步长。

填充 viewitem_desc 成员。

如果 MemoryView view 中的数据是行主序或列主序连续的,则返回 true

否则返回 false

如果 MemoryView view 中的数据是行主序连续的,则返回 true

否则返回 false

如果 MemoryView view 中的数据是列主序连续的,则返回 true

否则返回 false