【发布时间】:2011-04-30 21:24:14
【问题描述】:
我想说我在 C 方面的知识是公平的,我希望扩展一个程序来增强我的并行编程知识。
我所指的程序本质上是一个蛮力生成器,通过密码递增,例如从特定字符集的 0000 .. zzzz 开始: Need help with brute force code for crypt(3)
算法概述如下(感谢 Jerome)
int len = 3;
char letters[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
int nbletters = sizeof(letters)-1;
int main() {
int i, entry[len];
for(i=0 ; i<len ; i++) entry[i] = 0;
do {
for(i=0 ; i<len ; i++) putchar(letters[entry[i]]);
putchar('\n');
for(i=0 ; i<len && ++entry[i] == nbletters; i++) entry[i] = 0;
} while(i<len);
}
您认为这可以通过多线程以何种合乎逻辑的方式进行扩展?
CUDA 是一个愚蠢但简单的解决方案。我听说过 OpenMP,在我的书中它看起来像是一个很好的解决方案,您认为如何将其拆分以受益于我的计算机的多个内核? IE。核心 1 计算 aaaa..ffff,核心 2 计算 ffff...zzzz,这是唯一有意义的方法吗?
【问题讨论】:
-
entry数组怎么样? 像{3, 21, 10}这样更现实的东西不是全零。您也可以添加所需的输出。 -
@vbence,我不知道他在那里做了什么,从其他算法我看到数字表示字符集中的字母(然后你可以定义任意字符集),虽然我不确定,我将不得不修补它,找不到其他方法。
标签: c multithreading algorithm brute-force