alt*_*are 2 c++ parallel-processing default openmp
我想用OpenMP对c ++代码进行parallalize.代码并不是很简单,但在我看来,并行化并不难,因为我有一个独立系统的集合,我想要对包含系统的std :: vector的for循环进行分析.
ensamble的维度是DIM_ENSEMBLE
这是代码的有趣部分,我尝试并行化.这当然不起作用.
vector<Systems> system(DIM_ENSEMBLE);
vector<double> current(100);
Run Code Online (Sandbox Code Playgroud)
System是一个包含一些std :: vector的结构
/* do things
...
*/
while (time < T){
/*154*/ #pragma omp parallel for default(none) shared(r, DIM_ENSEMBLE, system, current) private(i, max_rate, time_increment, R, j, status)
for (i =0; i< DIM_ENSEMBLE; i++) {
max_rate = function_A_of(i);
time_increment = function_B_of(r,max_rate);
R = function_C_of(r,max_rate);
j = function_D_of(System, i, R);
status = update_the_system(&system[0], i, time_increment, j, ¤t[0]);
if (status!=1) {
#pragma omp critical
{
/*173*/ cout << "ERROR " << i << " " << time_increment << " " << j <<endl;
}
}
update_time(time);
} //end for loop
/* now calculate some averages and distributions from the ensemble
....
*/
} //end while loop
Run Code Online (Sandbox Code Playgroud)
这是一个编译错误:
one-node-hirsch-parallel.cpp:173: error: ‘cout’ not specified in enclosing parallel
one-node-hirsch-parallel.cpp:154: error: enclosing parallel
Run Code Online (Sandbox Code Playgroud)
cout是一个extern变量,在标准C++库中声明,通常是输出流class(ostream)的一个实例,可能是一个专门用的模板类型char.与任何其他C++变量一样,OpenMP parallel区域范围内的数据共享属性必须是隐式确定或显式指定的.鉴于该default(none)条款,隐含的决定被关闭.因此,您必须显式声明数据共享属性cout.这同样适用于endl.
问题解决:添加cout和endl(或可能std::cout和std::endl)到shared子句中的变量列表.
| 归档时间: |
|
| 查看次数: |
1352 次 |
| 最近记录: |