【发布时间】:2018-06-10 18:04:58
【问题描述】:
我有以下家庭作业:
我需要使用以下掩码暴力破解 4 字符密码
%%@@
(其中 @ - 是数字字符,% - 是字母字符)
在多个线程中使用 OpenMP。
这是一段代码,但我不确定它是否做对了:
int i, j, m, n;
const char alph[26] = "abcdefghijklmnopqrstuvwxyz";
const char num[10] = "0123456789";
#pragma omp parallel for private(pass) schedule(dynamic) collapse(4)
for (i = 0; i < 26; i++)
for (j = 0; j < 26; j++)
for (m = 0; m < 10; m++)
for (n = 0; n < 10; n++) {
pass[0] = alph[i];
pass[1] = alph[j];
pass[2] = num[m];
pass[3] = num[n];
/* Working with pass here */
}
所以我的问题是:
如何正确指定“parallel for”指令,以便在多个内核之间拆分密码范围?
非常感谢您的帮助。
【问题讨论】:
-
嗯,在两个地方你有
alph,你应该有num,这显然是错误的,但这与OpenMP没有任何关系。 OMP 编译指示本身在我对 OpenMP 的理解(有限)范围内似乎是正确的。请展示您的完整程序,并详细描述您希望它做什么以及它实际上做了什么。 -
如果您将
pass[0] = alph[i];等从最里面的循环移到相关循环的内部,这对您来说会更明显。 -
这是我们要求Minimal, Complete, and Verifiable example 的原因之一。
-
@JoaoAlby 再次,请展示完整程序,并详细描述您希望它做什么以及它实际做了什么。
-
@WeatherVane 如果我理解正确,这不是
collapse关键字的工作方式。要使用它,所有外循环必须“完全嵌套”(外循环的循环体只能由内循环组成)。
标签: c multithreading parallel-processing openmp brute-force