c - 使用 OpenMP 生成字符串
问题描述
我正在尝试使用 OpenMP生成仅包含 4 个小写英文字母(从aaaa
to )的所有字符串。zzzz
我的想法是:创建 4 个嵌套循环,每个循环在字符串中生成 1 个字母。
char a, b, c, d, start = 'a', end = 'z';
for (a = start; a <= end; a++)
{
for (b = start; b <= end; b++)
{
for (c = start; c <= end; c++)
{
for (d = start; d <= end; d++)
{
printf("%c%c%c%c\n", a, b, c, d);
}
}
}
}
问题是,当我使用 OpenMP 并行化for
循环时:
char a, b, c, d, start = 'a', end = 'z';
#pragma omp parallel for collapse(4)
for (a = start; a <= end; a++)
{
for (b = start; b <= end; b++)
{
for (c = start; c <= end; c++)
{
for (d = start; d <= end; d++)
{
printf("%c%c%c%c\n", a, b, c, d);
}
}
}
}
我只得到了这个结果:
aaam
aaan
aaao
aaap
aaae
aaaf
aaag
aaah
aaai
aaaj
aaak
aaal
aaaa
aaab
aaac
aaad
解决方案
您必须将 a、b、c、d 声明为每个循环的局部变量,而不是全局变量,否则在给定循环上运行的所有 openmp 线程都说循环“a”将覆盖“a”值。
char start = 'a', end = 'z';
#pragma omp parallel for
for (char a = start; a <= end; a++)
{
for (char b = start; b <= end; b++)
{
for (char c = start; c <= end; c++)
{
for (char d = start; d <= end; d++)
{
printf("%c%c%c%c\n", a, b, c, d);
}
}
}
}
我几乎可以肯定在这种特定情况下您不能使用 collaspe。更多信息: 了解 openmp 中的折叠子句
推荐阅读
- python - 如何将 matplotlib 图保存到列表中,然后显示它们?
- python - 从 YahooFinance 获取价格数据原因:AttributeError 'nonetype' object has no attribute 'text'
- hdfs - putHDFS 后重命名文件
- html - PowerShell HTML 方法 getElementsByClassName 返回 null
- mobile-safari - Safari Mobile / 从独立 PWA 强制新窗口
- amazon-web-services - 在我自己的应用程序中集成 Private Alexa Skill
- angular - 如何在浏览器刷新Angular 4时处理CanActivate
- python - Django 反向 m2m 查询
- excel - Excel - 返回包含特定行中三个特定值的列
- jquery - 预加载器脚本 - 在页面加载之前更改 SVG 填充颜色