使用CUDA计算所有可能的单词组合?

时间:2012-11-08 08:00:24

标签: cuda permutation combinations

我想找到可以从11个字的给定图块组形成的所有可能单词的组合。是否有可能在CUDA上做到这一点?如果是,那么如何。谢谢!

2 个答案:

答案 0 :(得分:2)

是的,您可以在CUDA中进行排列,事实上,先生。 Wong Shao Voon实施Permutations algorithm with CUDA and OpenCL

他没有按照你的意愿使用String,但这不是一个主要的问题,你必须制作一个方法,在算法完成后将他使用的符号(字母)转换为你的(字)。想象一下,他将所有排列保存在二维字符数组中,您可以查看所有矩阵,而不是打印实际的字符,而是打印出您想要的单词(例如if(matrix[i][j] == 'A') printf("Anaconda");)。

基准

“我已经针对CPU应用程序对CUDA进行了基准测试。基准测试中使用的CPU和GPU分别是Intel 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 = 439,084,800。这是我1GB内存的最大排列数GPU可以存储。“

折叠|复制代码 CPU:550ms

具有纯因子分解的版本1(平均时间) CUDA:550ms OpenCL:581ms

版本2,每个因子分解1次next_permutation(平均时间) CUDA:317ms OpenCL:373ms

版本3,每个因子分解9次next_permutation(平均时间) CUDA:681ms OpenCL:456ms

答案 1 :(得分:0)

看看https://github.com/kkilictepe/CudaCombination 它是使用numba的python实现,但有帮助。