MemoryView

MemoryView bietet die Funktionen, um multidimensionale homogene Arrays mit Elementen fester Größe auf Speicher unter Erweiterungsbibliotheken zu teilen.

Haftungsausschluss

Übersicht

Wir befassen uns manchmal mit bestimmten Arten von Objekten, die Arrays mit gleich typisierten Elementen fester Größe auf einem zusammenhängenden Speicherbereich als interne Darstellung haben. Numo::NArray in numo-narray und Magick::Image in rmagick sind typische Beispiele für solche Objekte. MemoryView spielt die Rolle der Drehscheibe, um die internen Daten solcher Objekte ohne Kopie zwischen solchen Bibliotheken zu teilen.

Das kopierfreie Teilen von Daten ist in einigen Bereichen wie Datenanalyse, maschinelles Lernen und Bildverarbeitung sehr wichtig. In diesen Bereichen müssen die Leute große Mengen von Daten im Speicher mit mehreren Bibliotheken bearbeiten. Wenn wir gezwungen sind, zum Austausch großer Daten zwischen Bibliotheken zu kopieren, muss ein großer Teil der Datenverarbeitungszeit mit dem Kopieren von Daten belegt sein. Sie können solche Zeitverschwendung vermeiden, indem Sie MemoryView verwenden.

MemoryView hat zwei Kategorien von APIs

  1. Producer API

    Klassen können ihren eigenen MemoryView-Eintrag registrieren, der es Objekten dieser Klassen ermöglicht, ihre MemoryView preiszugeben.

  2. Consumer API

    Die Consumer API ermöglicht es uns, die MemoryView eines Objekts zu erhalten und zu verwalten.

MemoryView-Struktur

Eine MemoryView-Struktur, rb_memory_view_t, wird verwendet, um die MemoryView von Objekten zu exportieren. Diese Struktur enthält die Referenz auf das Objekt, das der Besitzer der MemoryView ist, den Zeiger auf den Kopf des exportierten Speichers und die Metadaten, die die Struktur des Speichers beschreiben. Die Metadaten können multidimensionale Arrays mit Strides beschreiben.

Die Mitglieder der MemoryView-Struktur

Die MemoryView-Struktur besteht aus den folgenden Mitgliedern.

MemoryView APIs

Für Konsumenten

Füllt die Mitglieder von view als 1-dimensionales Byte-Array.

Füllt das Array strides mit den Byte-Strides eines zusammenhängenden Arrays mit der gegebenen Form und Elementgröße.

Füllt das Mitglied item_desc von view.

Gibt true zurück, wenn die Daten in der MemoryView view zeilenweise oder spaltenweise zusammenhängend sind.

Gibt andernfalls false zurück.

Gibt true zurück, wenn die Daten in der MemoryView view zeilenweise zusammenhängend sind.

Gibt andernfalls false zurück.

Gibt true zurück, wenn die Daten in der MemoryView view spaltenweise zusammenhängend sind.

Gibt andernfalls false zurück.