2011-05-16 16 views
11

Ho un vettore di colonna A che è lungo 10 elementi. Ho una matrice B che è 10 per 10. La memoria per B è la colonna maggiore. Desidero sovrascrivere il primo fila in B con il vettore colonna A.Esiste una versione standard, striata di memcpy?

Chiaramente, posso fare:

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

dove ho lasciato lo zero in 0 + 10 * i evidenziare che B utilizza colonna -maggior memoria (zero è l'indice di riga).

Dopo alcuni imbrogli in CUDA-land stasera, ho pensato che potrebbe esserci una funzione CPU per eseguire una memepia stridulo ?? Suppongo che a un livello basso, le prestazioni dipenderebbero dall'esistenza di un'istruzione di carico/immagazzinamento stridente, che non ricordo che ci sia nell'assemblaggio x86?

+0

forse dovresti prendere in considerazione la possibilità di cambiare strategia di archiviazione per questa matrice o di memorizzarne la trasposizione. –

risposta

8

Risposta breve: il codice che hai scritto è veloce quanto sta per essere ricevuto.

Risposta lunga: la funzione memcpy viene scritta utilizzando complicati elementi intrinseci o assembly perché opera su operandi di memoria che hanno dimensioni e allineamento arbitrari. Se stai sovrascrivendo una colonna di una matrice, i tuoi operandi avranno un allineamento naturale e non dovrai ricorrere agli stessi trucchi per ottenere una velocità decente.

+0

Immagino di avere solo speranze di accedere al livello di assemblaggio per dire "istruzioni di caricamento/archiviazione per la memoria a doppio e triplo canale. –

+0

Non sono sicuro di cosa intendiate per operazioni di caricamento/archiviazione "senza strette". –

+0

Forse solo una percezione errata da parte mia, ma pensavo che la ram del canale triplo fosse barrata nello spazio degli indirizzi? Se potessi scrivere su uno solo dei chip di memoria (scrivere solo su un canale a una velocità minore) sarebbe l'equivalente di una meme mpia striata? Ciò ovviamente dipenderebbe fortemente dalla granularità dello striping. –

Problemi correlati