2011-12-12 29 views
6

Tôi có một chương trình OpenMP với chương trình C++. Có các vùng song song có chứa #pragma omp task bên trong một khu vực song song. Bây giờ, tôi muốn biết làm thế nào để chấm dứt khu vực song song tùy thuộc vào một điều kiện mà bất kỳ của các chủ đề đang chạy đáp ứng.Làm cách nào để chấm dứt điều kiện một vùng song song trong OpenMP?

#pragma omp parallel 
{ 
#pragma omp task 
{ 
    //upon reaching a condition i would like to break out of the parallel region. (all threads should exit this parallel region) 
} 

} 

Trả lời

5

Bạn không thể chấm dứt cấu trúc song song sớm. OpenMP không có cấu trúc cho điều này và nó chỉ định rằng các vùng song song có thể chỉ có một điểm thoát (vì vậy không có phân nhánh nào ra khỏi vùng ...). Tôi nghĩ rằng cách duy nhất (sane và di động) để thực hiện điều đó là có một biến cho biết công việc đã được hoàn thành chưa và có chủ đề kiểm tra biến đó thường xuyên (sử dụng hướng dẫn nguyên tử và/hoặc flushes để đảm bảo độ nhớt chính xác). . Nếu biến chỉ ra rằng công việc được thực hiện, các chủ đề có thể bỏ qua công việc còn lại của họ (bằng cách đặt công việc còn lại trong cơ thể nếu không được phân nhánh nếu công việc được thực hiện).

Có thể viết mã hệ thống cụ thể, đình chỉ các chủ đề khác và đặt chúng vào cuối khối (ví dụ: thao tác ngăn xếp và chỉ dẫn ...) nhưng điều đó dường như không được khuyến khích (có nghĩa là rất giòn).

Nếu bạn cho chúng tôi biết thêm một chút về những gì bạn đang cố gắng làm (và lý do bạn cần điều này), nó có thể giúp bạn dễ dàng hơn (ví dụ bằng cách thiết kế một thiết kế không cần thiết) .

Các vấn đề liên quan