- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图在 C 中的孤立例程中使用一个归约变量。我意识到我需要通过指向例程的指针传递变量,以确保它被视为共享(它在封闭的并行区域中共享) 。然而,当我尝试编译时,编译器不喜欢变量是指针这一事实(我认为),并提示它没有指针的归约类型,即使用 cray 编译器时,我收到此错误:
CC-1642 craycc: ERROR File = main.c, Line = 33
The OpenMP reduction clause does not accept pointer or reference types.
#pragma omp for reduction(+:sum)
使用此示例代码时:
#include<stdio.h>
#include<stdlib.h>
#include<omp.h>
int myroutine(double *, double *, int);
int main(void){
double a[100];
double sum;
int i;
int n = 100;
for(i=0;i<n;i++){
a[i]=3.2;
}
#pragma omp parallel shared(a,n,sum)
{
myroutine(a, &sum, n);
}
printf("sum = %lf\n",sum);
return 0;
}
int myroutine(double *a, double *sum, int n){
int i;
#pragma omp for reduction(+:sum)
for(i=0;i<n;i++){
*sum += a[i];
}
return 0;
}
我需要从传递的指针变量到局部变量进行一些复制吗?或者还有其他方法可以实现这一目标吗?
最佳答案
int myroutine(double *a, double *sum, int n)
{
int i;
static double localSum = *sum;
#pragma omp for reduction(+:localSum)
for(i=0;i<n;i++){
localSum += a[i];
}
*sum = localSum;
return 0;
}
可以工作,但是很恶心而且很可怕,因为如果您在嵌套并行区域中的不同团队中尝试它,它就会崩溃。 (尽管如果您不使用嵌套并行性,并且不从独立的 pthread 启动 OpenMP,那么它是安全的,这几乎是同一件事!)
我希望有类似的事情
#pragma omp for reduction(+:sum[0])
可以在 OpenMP 5.0 中工作,其中支持减少数组部分,但不幸的是编译器可能还没有(可以理解,因为规范尚未最终确定!)
关于c - 是否可以在孤立的 C 例程中使用来自指针传递参数的归约变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52333881/
我有一个需要映射/缩减的文件,其中输出需要总和和日期的最大值。我有总和部分的工作,但是,我不确定如何将最大日期作为减少的输出的一部分。 输入数据如下所示: ID1, ID2, date,
我必须为 C 的一个子集构建一个编译器。显然,因为这是我第一次做这样的事情,所以进展得不是很好。然而。我目前正在尝试为所述子集构建词法分析器和解析器。 我决定逐步构建它,并在出现错误时进行修复。所以我
我听说过很多关于 Map/Reduce 的内容,尤其是在 Google 大规模并行计算系统的背景下。到底是什么? 最佳答案 来自 Google 的摘要 MapReduce研究发表页面: MapRedu
我正在使用 JavaScript 原生 reduce,但是我想稍微改变分组以获得我想要的结果。我有一个数组如下: const people = [ {name: "John", age: 23,
我试图让一个简单的 map reduce 在 MongoVUE 中工作,但它没有返回任何结果,我只是想让它输出每个 userID 的计数,这样我就可以有一个工作示例来构建。 function Map(
我可能错了,但我见过的所有(?)Apache Hadoop 示例都将存储在本地文件系统上的文件作为输入(例如 org.apache.hadoop.examples.Grep) 有没有办法在 Hadoo
如何在 Swift 4 中以更优雅的方式完成类似以下的事情,例如使用 map 和/或 reduce。 为了在此处发布,我简化了代码,但请注意它确实需要使用索引。 var numbers = [50,
我是一名优秀的程序员,十分优秀!