Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.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
C++ Can';不要把我的头绕在平行线上,因为tbb #包括 #包括 #包括 #定义N 1000000 int main() { tbb::并发向量v(N); 标准:MT19937MT; 标准:统一国际分布区(0499); tbb::parallel_for(tbb::blocked_range(v.begin(),v.end()),[&]{return dist(mt);}); 返回(0); }_C++_Concurrency_Tbb - Fatal编程技术网

C++ Can';不要把我的头绕在平行线上,因为tbb #包括 #包括 #包括 #定义N 1000000 int main() { tbb::并发向量v(N); 标准:MT19937MT; 标准:统一国际分布区(0499); tbb::parallel_for(tbb::blocked_range(v.begin(),v.end()),[&]{return dist(mt);}); 返回(0); }

C++ Can';不要把我的头绕在平行线上,因为tbb #包括 #包括 #包括 #定义N 1000000 int main() { tbb::并发向量v(N); 标准:MT19937MT; 标准:统一国际分布区(0499); tbb::parallel_for(tbb::blocked_range(v.begin(),v.end()),[&]{return dist(mt);}); 返回(0); },c++,concurrency,tbb,C++,Concurrency,Tbb,我不明白为什么这不起作用,我的理解是,这个parallel\u for的接口应该包括容器的起始点、端点和在循环的每次迭代中应该执行的步骤的大小,最后一个参数是它将执行的函数 现在tbb::blocked_range它用于拆分容器(对吗?),所以在这种情况下它应该很有用,我无法让它工作,我不明白为什么它不能以更简单的方式与迭代器一起工作…您真正想要的似乎是: #include <tbb/concurrent_vector.h> #include <tbb/parallel_for

我不明白为什么这不起作用,我的理解是,这个
parallel\u for
的接口应该包括容器的起始点、端点和在循环的每次迭代中应该执行的步骤的大小,最后一个参数是它将执行的函数


现在
tbb::blocked_range
它用于拆分容器(对吗?),所以在这种情况下它应该很有用,我无法让它工作,我不明白为什么它不能以更简单的方式与迭代器一起工作…

您真正想要的似乎是:

#include <tbb/concurrent_vector.h>
#include <tbb/parallel_for.h>
#include <random>

#define N 1000000

int main()
{
    tbb::concurrent_vector<u_int32_t> v(N);

    std::mt19937 mt;
    std::uniform_int_distribution<u_int32_t> dist(0,499);

    tbb::parallel_for( tbb::blocked_range<tbb::concurrent_vector<u_int32_t>>(v.begin(),v.end()),[&]{return dist(mt);});

    return(0);

}

比较好:你真正想要的似乎是:

#include <tbb/concurrent_vector.h>
#include <tbb/parallel_for.h>
#include <random>

#define N 1000000

int main()
{
    tbb::concurrent_vector<u_int32_t> v(N);

    std::mt19937 mt;
    std::uniform_int_distribution<u_int32_t> dist(0,499);

    tbb::parallel_for( tbb::blocked_range<tbb::concurrent_vector<u_int32_t>>(v.begin(),v.end()),[&]{return dist(mt);});

    return(0);

}
比较好:D

我希望使用迭代器,v.begin()和v.end()或tbb::blocked_range,我希望避免使用常量,并尝试使用可重用组件实现这一点,并尝试更像c++-ish

TBB为每个基于迭代器的循环提供了
parallel\u
函数模板

int main() {
    typedef tbb::concurrent_vector<u_int32_t> vector;
    vector v(N);

    std::mt19937 mt;
    std::uniform_int_distribution<u_int32_t> dist(0,499);

    typedef tbb::blocked_range<vector::iterator> range;
    tbb::parallel_for( range(v.begin(),v.end()),[&](range& r){for(auto& i: r) { i = dist(mt); } });

    return(0);
}
我希望使用迭代器,v.begin()和v.end()或tbb::blocked_range,我希望避免使用常量,并尝试使用可重用组件实现这一点,并尝试更像c++-ish

TBB为每个基于迭代器的循环提供了
parallel\u
函数模板

int main() {
    typedef tbb::concurrent_vector<u_int32_t> vector;
    vector v(N);

    std::mt19937 mt;
    std::uniform_int_distribution<u_int32_t> dist(0,499);

    typedef tbb::blocked_range<vector::iterator> range;
    tbb::parallel_for( range(v.begin(),v.end()),[&](range& r){for(auto& i: r) { i = dist(mt); } });

    return(0);
}

您要做的是(0,N,[&](inti){v[i]=dist(mt);})的
tbb::parallel_?@yohjp不是真的,我想使用迭代器,v.begin()和v.end()或tbb::blocked_range,我想避免使用常量,并尝试用可重用的组件实现这一点,并尝试变得更c++-ish你想做的是
tbb::parallel_for(0,N,[&](inti){v[I]=dist(mt)})
?@yohjp不是真的,我想使用迭代器,v.begin()和v.end()或tbb::blocked_range,我想避免使用常量,并尝试使用可重用组件实现这一点,并尝试更多地使用c++-显然没有赋值,向量在并行_之后显然充满了零,lambda必须迭代它接收的范围,而不是返回值。现在编辑…谢谢,现在看起来它正在工作,所以并行_for并不是真的为每个迭代执行一个操作,它只是将一个数据结构拆分成若干部分,并为您提供一个迭代器?对。parallel_for的“range”形式是通用的,它甚至不知道迭代是什么。它只知道如何递归地分割迭代空间。顺便说一下,您可以使用tbb::concurrent\u vector::range\u类型,而不是tbb::blocked\u range。有一种方法tbb::concurrent_vector::range()可以为整个concurrent_向量提供一个范围。显然,没有赋值,向量在并行_之后充满了零。显然,lambda必须迭代它接收的范围,而不是返回值。现在编辑…谢谢,现在看起来它正在工作,所以并行_for并不是真的为每个迭代执行一个操作,它只是将一个数据结构拆分成若干部分,并为您提供一个迭代器?对。parallel_for的“range”形式是通用的,它甚至不知道迭代是什么。它只知道如何递归地分割迭代空间。顺便说一下,您可以使用tbb::concurrent\u vector::range\u类型,而不是tbb::blocked\u range。有一个方法tbb::concurrent_vector::range()可以为您提供整个concurrent_vector的范围。