특정 코드 단편에서 OpenMP를 사용하려고합니다. 스 니펫에 개편이 필요한지 확실하지 않은 경우 순차적 구현을 위해 너무 엄격하게 설정되어있을 수 있습니다. 어쨌든 여기에 내가 병렬화 노력하고있어 (사이비) 코드입니다 : 이것은 순차적 인 의미에서 (몇 시간 동안 그것을 쳐다보고 후) 완전한 의미가병렬 for 루프에 대한 C++ OpenMP 지시문?
#pragma omp parallel for private(id, local_info, current_local_cell_id, local_subdomain_size) shared(cells, current_global_cell_id, global_id)
for(id = 0; id < grid_size; ++id) {
local_info = cells.get_local_subdomain_info(id);
local_subdomain_size = local_info.size();
...do other stuff...
do {
current_local_cell_id = cells.get_subdomain_cell_id(id);
global_id.set(id, current_global_cell_id + current_local_cell_id);
} while(id < local_subdomain_size && ++id);
current_global_cell_id += local_subdomain_size;
}
, 그것은 필요가도 어느 의미 할 수 있습니다 OpenMP 용으로 다시 작성하십시오. 내 관심사는 current_local_cell_id 및 local_subdomain_size는 private이지만 current_global_cell_id 및 global_id는 공유됩니다.
따라서 문 current_global_cell_id + = local_subdomain_size은 내부 루프 후 :do {
...
} while(...)
current_global_cell_id += local_subdomain_size;
는 OpenMP를 설정에서 오류가 발생할 수있다, 나는 생각한다. OpenMP 전문가가 코드에 최소한의 변경을 가할 수 있지만 여전히 for 루프와 같은 유형의 OpenMP를 사용할 수있는 특수 OMP 지시문에 대한 몇 가지 지침을 제공 할 수 있다면 크게 감사하겠습니다.
GNU 병렬 모드에서 힌트가 추가되었습니다. – sehe
흥미로운 의견입니다. 이 정보를 공유해 주셔서 감사합니다. –