【发布时间】:2015-07-15 16:57:54
【问题描述】:
我用 VisualStudio 2013 编写了一个 openmp 的基本示例,该示例是曲线下面积的计算。这是安全实现
int integral(int a, int b, int n_intervalos, int(*function)(int))
{
int long_interv = (b - a) / n_intervalos;
int suma = 0;
for (int i = a; i < b; i+=long_interv)
{
int h = function(i);
suma += h * long_interv;
}
return suma;
}
当我去测试这段代码时,我使用这个数据集
int intg = integral(0, 120, 120, funcion);
我想使用 OpenMP 来提高性能然后我做了以下功能
void integralParalelo(int a, int b, int n_intervalos, int(*function)(int), int *area)
{
int max_threads = omp_get_max_threads();
int thread_id = omp_get_thread_num();
int sub_intervalo = n_intervalos / max_threads;
int long_interv = (a + b) / n_intervalos;
int ini = thread_id * long_interv * sub_intervalo;
int fin = sub_intervalo * long_interv + ini;
int suma = integral(ini, fin, sub_intervalo, function);
#pragma omp critical
{
(*area) = (*area) + suma;
}
}
我就是这样调用这个函数的
#pragma omp parallel num_threads(4)
{
integralParalelo(0, 120, 120, funcion, &area);
}
但在测试中并行解决方案比安全解决方案要慢
- secuencial:0 毫秒
- 并行:25 毫秒!!!!
为什么会这样?
我使用的是 Visual Studio Ultimate 2013,我的电脑是 AMD A10-5745M
【问题讨论】:
-
很难超过“0毫秒”;)
-
jajaja,这是真的,但我预计 0 毫秒
标签: c++ visual-studio-2012 visual-c++ parallel-processing openmp