Pytorch, mécanisme de stockage du tenseur

Le stockage du tenseur en mémoire est divisé en deux parties (c'est-à-dire qu'un tenseur occupe deux emplacements de mémoire), et une mémoire stocke des informations telles que la taille de la forme, la foulée et l'indice de données du tenseur. Nous appelons cette partie It est la zone d'informations d'en-tête (Tensor); l'autre stocke les données réelles, que nous appelons la zone de stockage (Storage).

Semblable à TCP IP, en-tête d'adresse et espace de stockage. La structure du langage C peut également y parvenir.

1)stockage().data_ptr()

(Pdb) xx= batch_T.storage().data_ptr()
(Pdb) p xx
2506820080832
(Pdb) batch_T[0,0].storage().data_ptr()
2506820080832
(Pdb) batch_T[0,1].storage( ).data_ptr()
2506820080832
(Pdb) batch_T[0,2].storage().data_ptr()
2506820080832

On peut voir que les positions d'en-tête des différents éléments sont les mêmes,

2) storage_offset() peut obtenir le décalage

(Pdb) batch_T[0,0,0].storage_offset()
0
(Pdb) batch_T[0,2,0].storage_offset()
4
(Pdb) batch_T[0,4,0].storage_offset()
8
(Pdb ) batch_T[0,4,0].dtype
torche.float64

(Pdb) batch_T[0,4,0]
tenseur(-0.0550, dtype=torch.float64)

Cela peut obtenir le décalage, mais l'adresse mémoire réelle est encore inconnue. Chacun aura un type?

추천

출처blog.csdn.net/anlongstar/article/details/130561843