2011-01-25 5 views
10

Tôi đang cố gắng song song chương trình của mình với openMP. Chương trình đang sử dụng STL-iterators rất nhiều. Đó là said rằng OpenMP 3.0 có thể đối phó với điều này:OpenMP và STL-style cho

std::vector<int> N(2*N_max+1); 

std::vector<int>::const_iterator n,m; 
#pragma omp parallel for 
for (n=N.begin(); n!=N.end(); ++n){ 
    //Task to be in parallel 
}; 

Nhưng tôi đã nhận lỗi sau:

error: invalid controlling predicate 

Tôi đang sử dụng gcc 4.5.0, (openMP3 thực hiện trong 4.4.0) và chuỗi xây dựng của tôi là:

g++ -O0 -g3 -Wall -c -fmessage-length=0 -fopenmp -MMD -MP 

Trả lời

7

OpenMP chuẩn không chịu với trình lặp C++ nói chung. Tiêu chuẩn yêu cầu trình vòng lặp là các trình vòng lặp truy cập ngẫu nhiên với thời gian không đổi để truy cập ngẫu nhiên. Nó cũng chỉ cho phép <<= hoặc >>= trong biểu thức kiểm tra cho vòng lặp, nhưng không phải là !=.

Nếu bạn đang sử dụng trình vòng lặp và STL nhiều, bạn có thể nên sử dụng tốt hơn với Thread building blocks.

+0

cho (n = N.begin(); n galadog

7

Thật không may, đặc tả OpenMP V3.0 không bao gồm "! =" như một phần cú pháp pháp lý cho vòng lặp chuẩn. Tuy nhiên, nếu bạn có quyền truy cập vào một trình biên dịch Intel gần đây, họ cho phép nó như là một phần mở rộng.