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 的成員填入為 1 維的位元組陣列。

使用給定的元素大小,以給定形狀的連續陣列的位元組跨距填入 strides 陣列。

填入 viewitem_desc 成員。

如果 MemoryView view 中的資料是列優先或行優先連續的,則傳回 true

否則傳回 false

如果 MemoryView view 中的資料是列優先連續的,則傳回 true

否則傳回 false

如果 MemoryView view 中的資料是行優先連續的,則傳回 true

否則傳回 false