将multithreading添加到这个简单算法的有效方法是什么?

我会说我在C中的知识是公平的,我希望扩展一个程序来增强我对并行编程的了解。

它本质上是我所指的程序是一个powershell生成器,通过密码增加,例如来自0000 .. zzzz的特定字符集: 需要帮助用于地下室的powershell代码(3)

该算法概述如下(为此归功于杰罗姆)

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); } 

用什么逻辑方式可以说multithreading可以扩展它?

CUDA是一个愚蠢的,如果简单的解决方案。 我听说OpenMP在我的书中看起来是一个很好的解决方案,您认为这可以分解为从我的计算机的多个内核中受益? 即核心1计算aaaa..ffff,核心2计算ffff … zzzz,这是唯一有意义的方法吗?

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

我假设您希望按照entry数组中引用的顺序查看输出字符。

这是一个无法并行化的顺序操作。

编辑:

好的,现在我看到我的错误了:)你实际上可以并行化这个程序,但你必须实现一个额外的层来处理输出中的字母顺序。 还需要实现同步。