Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么并行二进制搜索比顺序搜索花费更多的时间? 我在OpenMP C++中有以下代码,它们顺序地并行地运行迭代二元搜索。根据输出,为什么即使并行运行4个部分,并行搜索也比顺序搜索花费更多的时间 #include <iostream> #incl_C++_Parallel Processing_Openmp_Binary Search - Fatal编程技术网

为什么并行二进制搜索比顺序搜索花费更多的时间? 我在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个额外指令来设置它们。