2012-11-08 53 views

回答

1

是的,你可以在cuda中進行排列,實際上是sr。 Wong Shao Voon執行Permutations algorithm with CUDA and OpenCL

他沒有像你想要的那樣使用字符串,但這不是一個主要問題,你只需要製作一個方法,將算法完成後我們使用的字母(字母)轉換爲你的字符。想象一下,他將所有的排列都保存在一個二維數組中,你可以遍歷所有的矩陣,而不是打印出你想要打印的單詞(例如if(matrix [i] [j] =='A'))的printf( 「蟒蛇」))。

基準

「我的基準CUDA對CPU應用,使CPU和在基準使用的GPU,是英特爾的i7 870(8個內核),2.93GHz的和的Nvidia GeForce分別460,使CPU應用化妝充分利用8個內核來尋找排列,CPU應用程序使用因子分解來分割不同CPU內核和每個工作線程之間的第n個排列,STL next_permutation用於從第n個排列中找出每個連續排列。下面列出了11個元素的計算排列:找到的11個元素的排列總數爲39,916,800。數組的大小需要存儲結果爲39,916,800 x 11 = 439084800。這是我的1GB內存GPU可以存儲排列的最大數量「

崩潰|複製代碼 CPU:550ms 的OpenCL:581ms 550ms

純因子分解(平均時間) CUDA版本1

2版,每階乘分解(中等定時) CUDA 1個next_permutation:317ms 的OpenCL:373ms

第3版,每因子9 next_permutation ial分解(平均時間) CUDA:681ms OpenCL:456ms