使用 PPL 查找数组中的最大元素
Find max element in array using PPL
我需要实现一个函数,使用 ppl.h
.
找到浮点数组中的最大元素
我有这个代码,基于 this answer:
float find_largest_element_in_matrix_PPL(float* m, size_t dims)
{
float max_element;
int row, col;
concurrency::combinable<float> locals([] { return INT_MIN + 0.f; });
concurrency::parallel_for_each(size_t(0), dims * dims, [&locals](int curr)
{
float & localMax = locals.local();
localMax = max<float>(localMax, curr);
});
max_element = locals.combine([](float left, float right) { return max<float>(left, right); });
cout << max_element << endl;
return max_element;
}
但是,此代码存在问题:
- 执行前抛出如下异常:
Error C2780 'void Concurrency::_Parallel_for_each_impl(const
_Random_iterator &,const _Random_iterator &,const _Function &,_Partitioner &&,std::random_access_iterator_tag)': expects 5
arguments - 4 provided parp D:\Microsoft Visual Studio
14.0\VC\include\ppl.h 2987
Error C2780 'void Concurrency::_Parallel_for_each_impl(_Forward_iterator,const
_Forward_iterator &,const _Function &,const Concurrency::auto_partitioner &,std::forward_iterator_tag)': expects 5
arguments - 4 provided parp D:\Microsoft Visual Studio
14.0\VC\include\ppl.h 2987
Error C2893 Failed to specialize function template 'iterator_traits<_Iter>::iterator_category
std::_Iter_cat(const _Iter &)' parp D:\Microsoft Visual Studio
14.0\VC\include\ppl.h 2987
你能帮我解决这个问题吗?
如何重写代码以利用 parallel_for
? (我无法在 parallel_for
块中引用传递给函数的数组参数)
float SimpleTest::SimpleTestfind_largest_element_in_matrix_PPL(float* m, size_t dims)
{
float max_element;
concurrency::combinable<float> locals([&]{ return INT_MIN + 0.f; });
int last= dims*dims;
concurrency::parallel_for(0, last, [&](int curr)
{
float & localMax = locals.local();
localMax = max<float>(localMax, curr);
});
max_element = locals.combine([](float left, float right) { return max<float>(left, right); });
std::cout << max_element << endl;
return max_element;
}
也许会奏效
我需要实现一个函数,使用 ppl.h
.
我有这个代码,基于 this answer:
float find_largest_element_in_matrix_PPL(float* m, size_t dims)
{
float max_element;
int row, col;
concurrency::combinable<float> locals([] { return INT_MIN + 0.f; });
concurrency::parallel_for_each(size_t(0), dims * dims, [&locals](int curr)
{
float & localMax = locals.local();
localMax = max<float>(localMax, curr);
});
max_element = locals.combine([](float left, float right) { return max<float>(left, right); });
cout << max_element << endl;
return max_element;
}
但是,此代码存在问题:
- 执行前抛出如下异常:
Error C2780 'void Concurrency::_Parallel_for_each_impl(const _Random_iterator &,const _Random_iterator &,const _Function &,_Partitioner &&,std::random_access_iterator_tag)': expects 5 arguments - 4 provided parp D:\Microsoft Visual Studio 14.0\VC\include\ppl.h 2987
Error C2780 'void Concurrency::_Parallel_for_each_impl(_Forward_iterator,const _Forward_iterator &,const _Function &,const Concurrency::auto_partitioner &,std::forward_iterator_tag)': expects 5 arguments - 4 provided parp D:\Microsoft Visual Studio 14.0\VC\include\ppl.h 2987
Error C2893 Failed to specialize function template 'iterator_traits<_Iter>::iterator_category std::_Iter_cat(const _Iter &)' parp D:\Microsoft Visual Studio 14.0\VC\include\ppl.h 2987
你能帮我解决这个问题吗?
如何重写代码以利用
parallel_for
? (我无法在parallel_for
块中引用传递给函数的数组参数)
float SimpleTest::SimpleTestfind_largest_element_in_matrix_PPL(float* m, size_t dims)
{
float max_element;
concurrency::combinable<float> locals([&]{ return INT_MIN + 0.f; });
int last= dims*dims;
concurrency::parallel_for(0, last, [&](int curr)
{
float & localMax = locals.local();
localMax = max<float>(localMax, curr);
});
max_element = locals.combine([](float left, float right) { return max<float>(left, right); });
std::cout << max_element << endl;
return max_element;
}
也许会奏效