gpt4 book ai didi

c - 将多线程添加到这个简单算法的有效方法是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:45:09 26 4
gpt4 key购买 nike

我会说我在 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,这是唯一有意义的方法吗?

最佳答案

我想您已经回答了自己的问题。线程 #1 上的 aaaa..ffff 和线程 #2 上的 ffff..zzzz 可能是要走的路,除了可能将其分解为更多可线程部分以防您有更多可用内核。尝试启动一个线程来执行 do 循环的某些部分可能会引入更多的开销,而不是在如此紧凑的算法中获得的好处。

关于c - 将多线程添加到这个简单算法的有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5840799/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com