c++omp,比较参数和常量
c++ omp, compare parameter and constant
例如,我有一个函数:
void function(int x, int y)
{
code here;
}
与我用常数代替给定的x和y相比,当我传入参数时要慢得多。
那么,即使在使用变量x和y的情况下,我如何获得和使用常数一样快的速度呢?
(代码中主要有一些核心for循环)我试着为代码中的每个循环的firstprivate(x,y)#pragma omp parallel,我得到了一个加速,但仍然没有我使用常量那么快,有什么建议吗?或者,有没有什么方法可以把x和y中的传递看作两个常数?
我认为通过做:
firstprivate(x,y)的pragma omp并行
从本质上讲,你在每个核心上运行相同的for循环,因为这些值对每个线程都是私有的,所以它们并没有真正协同工作以更快地完成任务,最终会完全适得其反。尝试使用";共享的";并在同步子句中添加barrier。
例如:
#include <stdio.h>
int main(int argc, char *argv[])
{
int x = 0;
int y = 0;
#pragma omp parallel shared(x, y)
{
#pragma omp barrier
for(x = 0, y = 0; x <= 500000; x++, y++) {
printf("x: %d, y: %dn", x, y);
}
}
return 0;
}
针对这个的时间
#include <stdio.h>
int main(int argc, char *argv[])
{
int x = 0;
int y = 0;
#pragma omp parallel firstprivate(x, y)
{
#pragma omp barrier
for(x = 0, y = 0; x <= 500000; x++, y++) {
printf("x: %d, y: %dn", x, y);
}
}
return 0;
}
我不认为我有你的完整答案,因为我自己还在玩,但希望它能帮助我找到一个。
";OpenMP";维基百科上的这篇文章看起来真的很好,我仍在阅读它并理解它。。。
相关文章:
- 如何创建长度由常量参数指定的数组
- 常量参数"real"常量吗?
- 常量参数存储在哪里 (C++)?
- 区分接受常量参数的函数引用/指针和与函数参数同名的非常量参数
- 一个模板方法,用于同时接受常量和非常量参数
- 如何在使用 Qt5 构造函数时将非常量参数修改为常量参数?
- C++演示函数同时使用常量参数,即指针,这是为什么?
- C++函数中的常量参数
- 为什么一个方法对同一个变量有常量和非常量参数?
- 重载、常量参数、const_cast、const_cast<字符串 &>
- 提供带有常量参数的函数指针作为带有非常量参数的函数指针是否安全?
- 将函数赋值给函数指针,常量参数正确性
- 完美转发常量参数以进行持续评估
- 为什么重载"<<"需要一个常量参数?
- 我可以有常量参数包吗
- C++-常量参数和类变量是否令人讨厌
- 类的C++常量参数
- C++:复制构造函数,该构造函数使用具有非常量参数的函数
- C++日食给出了常量参数的"Invalid Arguments"
- 如果我使用非常量参数定义那些,我是否仍然会获得默认的复制构造函数和运算符 =