opendmp를 사용하여 루프를 std :: set을 통해 다중 쓰려고합니다. 나는 다음과 같은 코드를 작성할 때 -openmp에서 std 컨테이너를 통한 반복
#pragma omp parallel for
for (std::set<A>::const_iterator i = s.begin(); i != s.end(); ++i) {
const A a = *i;
operate(a);
}
을이 오류를 얻을 :
error: invalid type for iteration variable 'i'
error: invalid controlling predicate
error: invalid increment expression.
은 OpenMP의를 사용하여 표준 컨테이너를 반복하는 또 다른, 올바른 방법이 있습니까? int i
을 사용하고 루프 본문에 0
에서 s.size()
까지 반복하고 반복자 또는 operator[]
을 반복 사용할 수 있지만이 방법은 훨씬 덜 깨끗해 보입니다.
어떤 컴파일러입니까? GCC는'std :: for_each'의 병렬 구현 (http://gcc.gnu.org/onlinedocs/libstdc++/manual/parallel_mode.html)을 가지고 있습니다. 어쩌면 그 소스도 볼 수 있을까요? http://algo2.iti.kit.edu/singler/mcstl/을 참조하십시오. – stephan