Tôi đã xem xét các định nghĩa chính thức, nhưng tôi vẫn khá bối rối.
firstprivate
: Chỉ định rằng mỗi luồng phải có phiên bản riêng của một biến và biến đó phải được khởi tạo với giá trị của biến, vì nó tồn tại trước cấu trúc song song.
Đối với tôi, điều đó nghe có vẻ giống như chuyện riêng tư. Tôi đã tìm kiếm các ví dụ, nhưng dường như tôi không hiểu nó đặc biệt như thế nào hoặc làm thế nào nó có thể được sử dụng.
lastprivate
: Chỉ định rằng phiên bản của biến ngữ cảnh bao quanh được đặt bằng phiên bản riêng của bất kỳ luồng nào thực hiện lặp lại cuối cùng (cấu trúc vòng lặp for) hoặc phần cuối cùng (# phầnpragma).
Tôi cảm thấy mình hiểu điều này tốt hơn một chút vì ví dụ sau:
#pragma omp parallel
{
#pragma omp for lastprivate(i)
for (i=0; i<n-1; i++)
a[i] = b[i] + b[i+1];
}
a[i]=b[i];
Vì vậy, trong ví dụ này, tôi hiểu rằng lastprivate
cho phép i
trả về bên ngoài vòng lặp như giá trị cuối cùng của nó.
Tôi mới bắt đầu học OpenMP hôm nay.