2015-10-06 51 views
0

我有一個std::vector不同尺寸的矩陣,我將計算每個矩陣的平方。我有兩個解決方案:推力與立方體的性能

1 /將所有矩陣平坦化,並將它們作爲巨大的平面數組(float *)存儲在設備中,並使用該矩陣中每個矩陣的開始和結束索引,並以cublas爲例做平方。

2將矩陣存儲在thrust::device_vector<float *>中,並使用thrust::for_each來排列它們。

很明顯,第二種解決方案提供了更多可讀代碼,但會影響性能嗎?

+1

您發佈的代碼對我來說編譯得很好。你*必須*用nvcc在一個擴展名爲.cu的文件中編譯推薦的GPU代碼。除此之外,我不明白你的問題是 – talonmies

+0

謝謝!我現在知道推力碼必須在.cu文件中,並且必須用nvcc編譯。我編輯了這個問題,使其更清晰。 –

回答

2

我認爲這是(現在)只是question you already asked的重複。

假設您想要做的元素操作就像每個元素的平方一樣簡單,那麼兩種情況下的性能或效率應該沒有什麼區別。

這是因爲這樣的操作會受內存限制,這意味着它的性能將受(GPU)內存帶寬的限制。因此,兩種實現將具有大致相同的限制器,並且性能大致相同。

注意,在您的兩個提案,但這些數據最終需要得到有效的以同樣的方式「扁平化」(推力操作不能在一個典型的或簡單的方式構造上thrust::device_vector<float *>操作)

如果例如,您已經擁有了推力和CUBLAS的組合,那麼您可以使用適合您的任何方法。另一方面,如果你的模塊只使用了CUBLAS,並且你可以使用CUBLAS或推力實現你的操作,我不確定我是否會爲這一操作注入推力。但這只是一個意見問題。