c++ - Open MP 中的冒泡排序较慢
问题描述
我在openMP中编写的冒泡排序程序比这个的串行版本慢,这是为什么,我不明白是什么问题。
串行版本大约需要 0.07,并行版本大约需要 0.9 来处理 5000 个元素的数组
#include <omp.h>
#include <stdio.h>
#include <stdlib.h>
void swap(int *num1, int *num2)
{
int temp = *num1;
*num1 = *num2;
*num2 = temp;
}
int main (int argc, char *argv[]) {
int SIZE =5000;
int A[SIZE];
for(int i=0;i<SIZE;i++)
{
A[i]=rand()%SIZE;
}
int N = SIZE;
int i=0, j=0;
int first;
double start,end;
start=omp_get_wtime();
#pragma omp parallel reduction( +:first )
for( i = 0; i < N; i++ )
{
first = i % 2;
#pragma omp parallel for default(none),shared(A,first,N)
for( j = first; j < N-1; j += 2 )
{
if( A[ j ] > A[ j+1 ] )
{
swap( &A[ j ], &A[ j+1 ] );
}
}
}
end=omp_get_wtime();
for(i=0;i<N;i++)
{
printf(" %d",A[i]);
}
printf("\n-------------------------\n Time Parallel= %f",(end-start));
}
解决方案
您只需要删除该行
#pragma omp parallel reduction( +:first )
此行是错误的,因为它多次运行算法,但如果您跳过此行,算法将正确并行运行并且使用 openMP 会更快,请查看这些幻灯片。
推荐阅读
- wagtail - 有没有办法在 Wagtail modeladmin 中添加实时链接到基于页面的列表视图?
- android - 使用 Realm 和 Parcel 将 API 响应存储在两个不同的模型对象中
- html - 网格布局未显示
- r - 在 R 中按特定顺序排序数据
- c++ - 序列化人脸特征以在 DLIB 中进行识别
- django - Django:无法解析 /accounts/password_reset/ 上的关键字“is_active”
- javascript - 在渲染方法 [REACT NATIVE] 中访问此变量
- mysql - SQL查询统计图片并获取封面图片
- javascript - 如何以角度调用外部jQuery函数
- caching - Angular 和 ASP .NET MVC 的缓存