![]() |
1
2
首先,用户的高性能标记在他的评论中是正确的。如果循环索引值依赖于计算值,则不应使用折叠。在您的示例中,“j”依赖于“max”,这将产生不正确的结果。但是,这并不是造成分割错误的原因。 我建议您调试您的示例,以便找到崩溃的根源;默认情况下,“max”被初始化为负数,这导致“j”也具有所述值。因此,当试图访问数组[i*Alth+(-2147483648)]时,会得到分割错误。 这是因为openmp为每个reduction操作符指定了一个初始值。在这种情况下 最大算子 ,您可以在 specification of OpenMP 3.1 :
在我们的例子中,这意味着每个线程将在并行区域的开始处拥有最大值的私有副本,该最大变量保存可以作为int(通常为2147483648)存储的最低数量的值。 我已经为你的例子写了一个非常简单的解决方案。我删除了折叠子句,在并行区域开始时,我手动初始化max变量:
作为额外的评论,你不需要每次使用max = j。您可以尝试检查找到第一个0的时间并使用前一个位置。 希望有帮助 |
|
Dakalol · 从SQL中的字符串中选择最大字符数 7 年前 |
![]() |
Hans Wurst · Numpy查找数组小范围内最大值的索引 7 年前 |
![]() |
Chopin · 查找pandas df[关闭]中最大值旁边的列的值 7 年前 |