2011-10-16 8 views
9

Sto facendo alcuni calcoli e faccio alcune analisi sulle forze e debolezze delle diverse implementazioni BLAS. tuttavia mi sono imbattuto in un problema.Come trasporre una matrice in modo ottimale usando blas?

Sto testando cuBlas, fare linAlg sulla GPU potrebbe sembrare una buona idea, ma c'è un problema.

L'implementazione cuBlas utilizza il formato colonna-principale, e poiché questo non è ciò di cui ho bisogno alla fine, sono curioso di sapere se esiste un modo per far sì che BLAS esegua la trasposizione delle matrici?

+1

".... e poiché questo non è quello che alla fine .....". Manca un paio di parole? – talonmies

+2

A partire da CUDA 5.0, cuBLAS ha 'cublas geam', che è una routine molto efficiente per eseguire la trasposizione di matrici. Per un codice completo che implementa questa soluzione e confrontando le prestazioni con la trasposizione di matrici usando Thrust, vedere [Qual è il modo più efficace per trasporre una matrice in CUDA?] (Http://stackoverflow.com/questions/15458552/what-is- il-più-efficiente-way-to-trasporre-a-matrix-in-CUDA/21803459 # 21803459). – JackOLantern

risposta

10

BLAS non ha una routine di trasposizione matrice incorporata. L'SDK CUDA include un esempio di trasposizione di matrice con una carta che discute la strategia ottimale per eseguire una trasposizione. La vostra strategia migliore è probabilmente quella di utilizzare gli input principali di riga su CUBLAS con la versione di input transpose delle chiamate, quindi eseguire i calcoli intermedi nella colonna major e infine eseguire un'operazione di trasposizione in seguito utilizzando il kernel di trasposizione SDK.


A cura di aggiungere che CUBLAS aggiunto una routine di trasposizione in CUBLAS versione 5, geam, che può eseguita matrice di trasposizione in memoria della GPU e deve essere considerata come ottimale per qualsiasi architettura che si sta utilizzando.