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