对不起,如果标题是一个很大的不清楚.我不太清楚怎么说这个.
我想知道我是否有办法做到以下几点:
#pragma omp parallel
{
for (int i = 0; i < iterations; i++) {
#pragma omp for
for (int j = 0; j < N; j++)
// Do something
}
}
Run Code Online (Sandbox Code Playgroud)
忽略诸如在for循环中省略私有说明符之类的东西,有什么方法可以在我的外部循环之外分叉线程,这样我就可以并行化内部循环?根据我的理解(如果我错了请纠正我),所有线程都将执行外部循环.我不确定内循环的行为,但我认为for会将块分配给遇到它的每个线程.
我想要做的是不必fork/join iterations次,而只需在外循环中执行一次.这是正确的策略吗?
如果有另一个外环不应该并行化怎么办?那是...
#pragma omp parallel
{
for (int i = 0; i < iterations; i++) {
for(int k = 0; k < innerIterations; k++) {
#pragma omp for
for (int j = 0; j < N; j++)
// Do something
// Do …Run Code Online (Sandbox Code Playgroud) 我正在尝试提高执行大量操作的应用程序的性能.
一个操作是:
c |= (1 << i)
Run Code Online (Sandbox Code Playgroud)
我想在一个字节中设置一个位.我在考虑使用查找表来获取OR中的每个值.如果数组访问比原始位操作更快或更慢吗?
或许还有更好的方法吗?
我有这样的事情:
CLASS CLASS::operator|(CLASS& right) {
return binop(*((CLASS*) this), right, OP_OR);
}
Run Code Online (Sandbox Code Playgroud)
CLASS只是一些课程.binop的原型是
CLASS binop(CLASS& left, CLASS& right, OP op);
这一切都很好,并使用Visual C++ 2010进行编译,但在g ++中失败并出现错误:
someheader.h: In member function 'void CLASS::set(int64_t)':
someheader.h:469:29: error: no match for 'operator|' in '*(CLASS*)this | CLASS(bit)'
someheader.h:469:29: note: candidate is:
someheader.h:376:1: note: CLASS CLASS::operator|(CLASS&)
someheader.h:376:1: note: no known conversion for argument 1 from 'CLASS' to 'CLASS&'
Run Code Online (Sandbox Code Playgroud)
现在,我只是将当前对象(*this)作为一些参数传递出来时遇到了问题,所以我明确地将其删除以删除const指针上的限定符,这很好用,似乎欺骗Visual C++编译器接受它作为一个普通指针.g ++似乎不喜欢这个.如果我删除了强制转换,它仍然会给我一个错误,因为它this是const限定的.我对操作符的左手和右手大小的处理要求两者都是可变的.
从我可以收集的内容来看,似乎我在传递一些对象并将其转换为函数调用中的引用时出现问题......这对我来说没有多大意义.有什么建议?