为什么并行二进制搜索比顺序搜索花费更多的时间? 我在OpenMP C++中有以下代码,它们顺序地并行地运行迭代二元搜索。根据输出,为什么即使并行运行4个部分,并行搜索也比顺序搜索花费更多的时间 #include <iostream> #incl
为什么并行二进制搜索比顺序搜索花费更多的时间?为什么并行二进制搜索比顺序搜索花费更多的时间? 我在OpenMP C++中有以下代码,它们顺序地并行地运行迭代二元搜索。根据输出,为什么即使并行运行4个部分,并行搜索也比顺序搜索花费更多的时间 #include <iostream> #incl,c++,parallel-processing,openmp,binary-search,C++,Parallel Processing,Openmp,Binary Search,为什么并行二进制搜索比顺序搜索花费更多的时间? 我在OpenMP C++中有以下代码,它们顺序地并行地运行迭代二元搜索。根据输出,为什么即使并行运行4个部分,并行搜索也比顺序搜索花费更多的时间 #include <iostream> #include <algorithm> #include <omp.h> using namespace std; #define MAX1 500000 int binary_search(int arr[], int x
我在OpenMP C++中有以下代码,它们顺序地并行地运行迭代二元搜索。根据输出,为什么即使并行运行4个部分,并行搜索也比顺序搜索花费更多的时间
#include <iostream>
#include <algorithm>
#include <omp.h>
using namespace std;
#define MAX1 500000
int binary_search(int arr[], int x, int low, int high)
{
while(low <= high)
{
int mid = low + (high-low)/2;
if(arr[mid] == x)
return mid;
if(arr[mid] < x)
low = mid + 1;
else
high = mid - 1;
}
return -1;
}
void binary()
{
int array[MAX1];
int loc, loc1, loc2, loc3, loc4, k;
omp_set_num_threads(4);
for(int i=0; i<MAX1; ++i)
array[i] = rand()%1000;
sort(array, array+MAX1);
cout<<"Enter number to search : ";
cin>>k;
int mid = MAX1/2;
double start_time = omp_get_wtime();
loc1 = binary_search(array, k, 0, mid);
loc2 = binary_search(array, k, mid+1, MAX1-1);
double end_time = omp_get_wtime()-start_time;
cout<<loc1<<"\t"<<loc2<<endl;
cout<<"Sequential Binary search runtime : "<<end_time<<endl;
int one_quart = mid/2;
int three_quart = 3*one_quart;
start_time = omp_get_wtime();
#pragma omp parallel sections
{
#pragma omp section
loc1 = binary_search(array, k, 0, one_quart);
#pragma omp section
loc2 = binary_search(array, k, one_quart+1, mid);
#pragma omp section
loc3 = binary_search(array, k, mid+1, three_quart);
#pragma omp section
loc4 = binary_search(array, k, three_quart+1, MAX1-1);
}
end_time = omp_get_wtime()-start_time;
cout<<loc1<<"\t"<<loc2<<"\t"<<loc3<<"\t"<<loc4<<endl;
cout<<"Parallel Binary search runtime : "<<end_time<<endl;
}
#包括
#包括
#包括
使用名称空间std;
#定义最大值1 500000
整数二进制搜索(整数arr[],整数x,整数低,整数高)
{
虽然(我认为这很可能是因为你只搜索了500000个元素——对于一个平衡的二进制搜索,最坏的情况是,这仅仅是19个操作。并行运行线程的开销可能会导致性能比按顺序运行要慢。如果可以,试着放大程序,让它运行我们知道结果是什么。可能是因为单核的缓存已经很热,刚刚对阵列进行了排序,而所有其他核都必须等待较慢的RAM。log2(500000)
为~19,这意味着二进制搜索必须进行大约19次比较才能在更坏的情况下找到结果。这基本上没有什么。我对二进制搜索的并行处理有问题。如果在其中一个季度中找到了值,则其他季度仍在运行。此外,还需要额外的代码来确定哪一个季度是rter包含该值。使二进制搜索并行运行有什么显著的好处吗?19个比较(更糟糕的情况)与每个线程200到300个额外指令来设置它们。