C ++ 11 범위 기반 for 루프와 함께 OpenMP를 사용하십니까?
이 작업에 대한 반대 표시가 있습니까? 아니면 동작이 잘 지정되어 있습니까?
#pragma omp parallel for
for(auto x : stl_container)
{
...
}
OpenMP 사양은 C ++ 98에서만 유효하지만 여기에서는 사용되지 않는 C ++ 11 스레드로 인해 더 많은 비 호환성이있을 수 있다고 생각합니다. 나는 여전히 확신하고 싶었다.
OpenMP 4.0 사양은 며칠 전에 완성되어 여기에 게시 되었습니다 . 병렬 루프는 여전히 표준 형식이어야합니다 (§2.6, p.51).
for (
init-expr;
test-expr;
incr-expr)
구조화 블록
이 표준은 랜덤 액세스 반복기를 제공하는 컨테이너를 모든 표현식에서 사용할 수 있도록 허용합니다. 예 :
#pragma omp parallel for
for (it = v.begin(); it < v.end(); it++)
{
...
}
여전히 C ++ 11 구문 설탕 사용을 고집하고의 각 요소를 처리하는 데 (비교적으로) 많은 시간이 걸리는 stl_container
경우 단일 생산자 작업 패턴을 사용할 수 있습니다.
#pragma omp parallel
{
#pragma omp single
{
for (auto x : stl_container)
{
#pragma omp task
{
// Do something with x, e.g.
compute(x);
}
}
}
}
태스크는 특정 오버 헤드를 유발하므로 compute(x);
완료 하는 데 시간이 거의 걸리지 않으면이 패턴을 사용하는 것은 의미가 없습니다 .
OpenMP 5.0은 99 페이지에 다음 행을 추가하여 많은 범위 기반 for 루프를 만들었습니다.
2.12.1.3 랜덤 액세스 반복기가있는 범위 기반 for 루프는 표준 루프 형식을 갖습니다.
출처 : https://www.openmp.org/wp-content/uploads/OpenMP-API-Specification-5.0.pdf
참고 URL : https://stackoverflow.com/questions/17848521/using-openmp-with-c11-range-based-for-loops
'developer tip' 카테고리의 다른 글
Swift Dictionary에 nil 값을 추가하는 방법은 무엇입니까? (0) | 2020.12.03 |
---|---|
C ++ 11 범위 기반 for 루프와 함께 OpenMP를 사용하십니까? (0) | 2020.12.02 |
이 코드가 Visual Studio 2015에서 충돌하는 이유는 무엇입니까? (0) | 2020.12.02 |
Windows 실행 파일에 JRE를 포함 하시겠습니까? (0) | 2020.12.02 |
emplace_back ()이 균일 한 초기화를 사용하지 않는 이유는 무엇입니까? (0) | 2020.12.02 |