Trong một hàm thành viên, tôi có thể parallelize bằng cách sử dụng biến thành viên chia sẻ int *x
như thế nàyTại sao biến thành viên lớp x không được phép chia sẻ (x) trong OpenMP?
#pragma omp parallel for default(shared)
for(int i=0;i<size;i++) {
x[i]=i;
}
Nhưng nếu tôi cố gắng
#pragma omp parallel for default(none) shared(x,size)
for(int i=0;i<size;i++) {
x[i]=i;
}
tôi nhận được lỗi: 'obj::x' is not a variable in clause 'shared'
. Tôi thích phiên bản thứ hai vì nó thông báo các biến được chia sẻ mà nó đang làm việc, nhắc tôi để đảm bảo không có điều kiện chủng tộc hoặc các vấn đề tương tự.
Điều gì đang diễn ra mà OpenMP tuyên bố rằng obj::x
không phải là một biến?
bạn đã thử điều này-> x chưa? bạn cũng sử dụng trình biên dịch nào? – Beanz
trình biên dịch là g ++ 4.4. Thử '#pragma omp song song cho mặc định (none) được chia sẻ (this-> x, size)' cho lỗi 'error: expected unqualified-id trước 'this'' –