Question

J'ai un vecteur colonne A qui fait 10 éléments de long.J'ai une matrice B qui fait 10 sur 10.Le stockage mémoire pour B est la colonne majeure.Je voudrais écraser le premier rangée en B avec le vecteur colonne A.

En clair, je peux faire :

for ( int i=0; i < 10; i++ )
{
    B[0 + 10 * i] = A[i];
}

où j'ai laissé le zéro 0 + 10 * i pour souligner que B utilise le stockage dans la colonne principale (zéro est l'index de la ligne).

Après quelques manigances dans CUDA-land ce soir, j'ai pensé qu'il pourrait y avoir une fonction CPU pour effectuer une mémoire stridée ??Je suppose qu'à bas niveau, les performances dépendraient de l'existence d'une instruction de chargement/stockage progressif, dont je ne me souviens pas qu'elle existe dans l'assemblage x86 ?

Était-ce utile?

La solution

Réponse courte:Le code que vous avez écrit est aussi rapide que possible.

Longue réponse:Le memcpy La fonction est écrite à l'aide d'intrinsèques ou d'assemblages compliqués, car elle fonctionne sur des opérandes de mémoire qui ont une taille et un alignement arbitraires.Si vous écrasez une colonne d'une matrice, vos opérandes auront un alignement naturel et vous n'aurez pas besoin de recourir aux mêmes astuces pour obtenir une vitesse décente.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top