Tensor ve bellek
64 bayt hizalama, paylaşımlı depolama ve yaşam süresi.
01Düzen ve oluşturma#
Yoğun, bitişik, satır-major float32; en fazla 8 eksen. Tensor(shape) belleği sıfırlamaz. zeros, full ve from_values başlatılmış veri üretir. Varsayılan boş Tensor rank=0, numel=0 taşır. AlignedStorage veri adresi 64 bayta hizalıdır.
auto a = Tensor::zeros({2, 3});auto b = Tensor::full({2, 3}, 0.5f);auto c = Tensor::from_values({2, 2}, {1, 2, 3, 4});02Kopya veya görünüm#
Atama yalnız başlığı kopyalar ve veriyi paylaşır. clone bağımsız kopyadır. reshape/view_as aynı depoya farklı şekil verir. [] veya data() ile yazma diğer görünümü de değiştirir; genel copy-on-write yoktur.
auto shared = c;auto independent = c.clone();auto flat = c.reshape({4});shared[0] = 9; // c[0] and flat[0] also become 903Boyut çıkarımı#
Tensor::reshape tek size_t(-1) ile boyut çıkarır. Eleman sayısı korunur. Literal -1 daraltma hatası verebilir; açık dönüşüm kullanın. Reshape modülü bu çıkarımı yapmaz, somut şekil ister.
auto t = Tensor::zeros({2, 3, 4});auto rows = t.reshape({2, static_cast<std::size_t>(-1)}); // [2,12]04Ödünç bellek#
borrow(float*,shape) sahip değildir; ömür çağırana aittir. resize/copy_from ödünç belleği koruma garantisi vermez. operator[] sınır kontrolsüz; size(axis) geçersiz eksende ModelError üretir.
05Tampon yeniden kullanımı#
resize_dims yalnız tek sahiplik, yeterli kapasite ve sıfır offset ile depoyu kullanır. Dönen başlığı sonraki çağrıya kadar tutmak yeni ayırma doğurabilir. allocation_count sadece AlignedStorage sayar; bütün heap ayırmalarını ölçmez.