我有一個std::vector
不同尺寸的矩陣,我將計算每個矩陣的平方。我有兩個解決方案:推力與立方體的性能
1 /將所有矩陣平坦化,並將它們作爲巨大的平面數組(float *)存儲在設備中,並使用該矩陣中每個矩陣的開始和結束索引,並以cublas爲例做平方。
2將矩陣存儲在thrust::device_vector<float *>
中,並使用thrust::for_each
來排列它們。
很明顯,第二種解決方案提供了更多可讀代碼,但會影響性能嗎?
我有一個std::vector
不同尺寸的矩陣,我將計算每個矩陣的平方。我有兩個解決方案:推力與立方體的性能
1 /將所有矩陣平坦化,並將它們作爲巨大的平面數組(float *)存儲在設備中,並使用該矩陣中每個矩陣的開始和結束索引,並以cublas爲例做平方。
2將矩陣存儲在thrust::device_vector<float *>
中,並使用thrust::for_each
來排列它們。
很明顯,第二種解決方案提供了更多可讀代碼,但會影響性能嗎?
我認爲這是(現在)只是question you already asked的重複。
假設您想要做的元素操作就像每個元素的平方一樣簡單,那麼兩種情況下的性能或效率應該沒有什麼區別。
這是因爲這樣的操作會受內存限制,這意味着它的性能將受(GPU)內存帶寬的限制。因此,兩種實現將具有大致相同的限制器,並且性能大致相同。
注意,在您的兩個提案,但這些數據最終需要得到有效的以同樣的方式「扁平化」(推力操作不能在一個典型的或簡單的方式構造上thrust::device_vector<float *>
操作)
如果例如,您已經擁有了推力和CUBLAS的組合,那麼您可以使用適合您的任何方法。另一方面,如果你的模塊只使用了CUBLAS,並且你可以使用CUBLAS或推力實現你的操作,我不確定我是否會爲這一操作注入推力。但這只是一個意見問題。
您發佈的代碼對我來說編譯得很好。你*必須*用nvcc在一個擴展名爲.cu的文件中編譯推薦的GPU代碼。除此之外,我不明白你的問題是 – talonmies
謝謝!我現在知道推力碼必須在.cu文件中,並且必須用nvcc編譯。我編輯了這個問題,使其更清晰。 –