예제 #1
0
int main()
{
  try
  {
    const int s = 1001;
    std::vector<int> vec;
    vec.reserve(s);
    for (int i=0; i<s;++i)
      vec.push_back(1);
    int r = parallel_accumulate(vec.begin(), vec.end(),0);
    std::cout << r << std::endl;

  }
  catch (std::exception& ex)
  {
    std::cout << "ERROR= " << ex.what() << "" << std::endl;
    return 1;
  }
  catch (...)
  {
    std::cout << " ERROR= exception thrown" << std::endl;
    return 2;
  }
  return 0;
}
예제 #2
0
int main()
{
    std::vector<int> vi;
    for(int i=0;i<1000;++i)
    {
        vi.push_back(10);
    }
    int sum=parallel_accumulate(vi.begin(),vi.end(),5);
    std::cout<<"sum="<<sum<<std::endl;
}
예제 #3
0
파일: 2.8.cpp 프로젝트: qianlv/learning
int main(void)
{
    std::vector<int> ivec;
    for (int i = 0; i < 2000000; ++i) {
        ivec.push_back(1);
    }

    std::chrono::system_clock::time_point b = std::chrono::system_clock::now();
    std::cout << parallel_accumulate(ivec.begin(), ivec.end(), 0) << std::endl;
    std::chrono::system_clock::time_point e = std::chrono::system_clock::now();
    std::cout << (e - b).count() << std::endl;
    b = e;
    std::cout << std::accumulate(ivec.begin(), ivec.end(), 0) << std::endl;
    e = std::chrono::system_clock::now();
    std::cout << (e - b).count() << std::endl;
    return 0;
}
예제 #4
0
T parallel_accumulate(Iterator first, Iterator last, T init)
{
    unsigned long const length = std::distance(first, last);
    unsigned long const max_chunk_size = 25;

    if (length <= max_chunk_size) {
        return std::accumulate(first, last, init);
    } else {
        Iterator mid_point = first;
        std::advance(mid_point, length / 2);
        std::future<T> first_half_result =
            std::async(parallel_accumulate<Iterator, T>,
                       first, mid_point, init);
        T second_half_result = parallel_accumulate(mid_point, last, T());
        return first_half_result.get() + second_half_result;
    }
}