【发布时间】:2021-12-15 18:05:21
【问题描述】:
我在下面做错了什么?代码将 CPU 固定在 100% 并且没有结束。似乎是一个无限循环。帮助表示赞赏。
#include <stdio.h>
int main(void)
{
unsigned long number2;
unsigned long number = 1;
#pragma omp parallel for
for (number = 1; number <= 10000; number++)
{
unsigned long max = 0, count = 0;
number2 = number;
while (number2 != 1)
{
if (number2 > max)
max = number2;
if (number2 % 2 == 0)
number2 /= 2;
else
number2 = 3 * number2 + 1;
count++;
}
}
}
更新:以下工作。
不确定根本原因是什么。本来可以
- 数据类型溢出其边界,即 int -> unsigned int
- number2 必须设为私有,等等。
#include <omp.h>
int main(int argc, char **argv)
{
unsigned int i;
#pragma omp parallel for
for (i = 1; i < 10000000; i++)
{
unsigned int number2 = i; unsigned int max; unsigned int count = 0;
while (number2 != 1)
{
if (number2 > max)
max = number2;
if (number2 % 2 == 0)
number2 /= 2;
else
number2 = 3 * number2 + 1;
count++;
}
}
}```
【问题讨论】:
-
number2是共享的还是私有的? -
@Shawn
number2是私人的。我已经解决了这个问题。将更新 OP。谢谢! -
在你的第二个版本中,
max看起来像你想要的unsigned int max = i;时没有初始化
标签: c loops for-loop parallel-processing openmp