C语言中字母组合排序的多线程计算
我想多线程一个“蛮力”算法 我有一个函数C语言中字母组合排序的多线程计算,c,performance,combinations,C,Performance,Combinations,我想多线程一个“蛮力”算法 我有一个函数bool check(const char*s,size\t n),它检查大小n的字符串s是否为密码 此函数用于我的字母表中可能的所有字符串组合(字母表中约90个字符) 我可以在一个线程中完成它,但现在我想要多线程我还希望每个线程的工作量几乎相同我不希望一个线程必须测试1B个组合,而另一个线程只测试1k) 我想把负载分成“批量”组合。每个批都有一个start索引和一个stop索引,因此拥有该批的线程必须测试start和stop之间的所有组合 我所说的组合索
bool check(const char*s,size\t n)
,它检查大小n
的字符串s
是否为密码
此函数用于我的字母表中可能的所有字符串组合(字母表中约90个字符)
我可以在一个线程中完成它,但现在我想要多线程我还希望每个线程的工作量几乎相同我不希望一个线程必须测试1B个组合,而另一个线程只测试1k)
我想把负载分成“批量”组合。每个批都有一个start
索引和一个stop
索引,因此拥有该批的线程必须测试start
和stop
之间的所有组合
我所说的组合索引是它的字典索引,例如字母[a,B,C]:
index combination
1 A
2 B
3 C
4 AA
5 AB
6 AC
7 BA
8 BB
... ...
例如,一个被分配了批处理start=4
和stop=7
的线程将测试组合AA、AB、AC、BA
如何在线程中轻松生成批处理的组合?优先考虑的是它要快,因为程序的全部要点是暴力强迫
是否有另一种在线程之间分割工作的快速方法?如果列表中已包含所有字符串,则可以使用字典顺序,但如果要生成字符串,则使用字典顺序并不容易。所以,我会把它当作一个想法忘记
相反,你可以做的是启动90个线程,给每个线程一个开始的字母来处理,并且每个线程都考虑由它所给出的第一个字母组成的单词,加上剩余字母的所有组合。
我可能建议将起始字符划分为多个线程,这些线程的数量等于您拥有的逻辑核的数量,以避免任何上下文切换overhead@Nic事实上,按照我对现代流水线CPU工作原理的理解,拥有比内核更多的线程会带来显著的好处。但我们不要在这里争论这个问题,因为这是一个不同的主题,适合不同的问题和答案