Xin lỗi nếu tiêu đề không rõ ràng. Tôi hoàn toàn không biết phải nói thế nào.Lặp lại OpenMP cho vòng lặp trong vùng song song
Tôi đang tự hỏi nếu có bất kỳ cách nào tôi có thể làm như sau:
#pragma omp parallel
{
for (int i = 0; i < iterations; i++) {
#pragma omp for
for (int j = 0; j < N; j++)
// Do something
}
}
Bỏ qua những thứ như bỏ qua specifiers tin trong vòng lặp for, có cách nào mà tôi có thể ngã ba đề bên ngoài bên ngoài của tôi vòng lặp để tôi chỉ có thể song song vòng lặp bên trong? Từ sự hiểu biết của tôi (xin vui lòng làm cho tôi đúng nếu tôi sai), tất cả các chủ đề sẽ thực hiện vòng lặp bên ngoài. Tôi không chắc chắn về hành vi của vòng lặp bên trong, nhưng tôi nghĩ rằng for
sẽ phân phối các khối cho mỗi chủ đề gặp phải nó.
Điều tôi muốn làm là không phải ngã ba/tham gia iterations
lần mà chỉ thực hiện một lần trong vòng ngoài. Đây có phải là chiến lược đúng đắn để làm như vậy không?
Điều gì xảy ra nếu có một vòng lặp ngoài khác không được song song? Đó là ...
#pragma omp parallel
{
for (int i = 0; i < iterations; i++) {
for(int k = 0; k < innerIterations; k++) {
#pragma omp for
for (int j = 0; j < N; j++)
// Do something
// Do something else
}
}
}
Thật tuyệt nếu có ai đó chỉ cho tôi một ví dụ về ứng dụng lớn song song bằng OpenMP để tôi có thể hiểu rõ hơn về các chiến lược sử dụng khi sử dụng OpenMP. Tôi không thể tìm thấy bất kỳ thứ gì.
Làm rõ: Tôi đang tìm các giải pháp không thay đổi thứ tự vòng lặp hoặc liên quan đến việc chặn, lưu vào bộ nhớ cache và các cân nhắc hiệu suất chung. Tôi muốn hiểu làm thế nào điều này có thể được thực hiện trong OpenMP trên cấu trúc vòng lặp như quy định. Các // Do something
có thể hoặc không có phụ thuộc, giả sử rằng họ làm và bạn không thể di chuyển mọi thứ xung quanh.
Có thể bạn có thể đưa ra một ví dụ về những gì bạn muốn làm. Tôi có nghĩa là điền vào mã // làm điều gì đó –
@raxman, Điều đó sẽ không giúp ích gì. Điều này có nghĩa là yêu cầu giải pháp chung cho vấn đề như vậy, không phải là giải pháp cho một ứng dụng cụ thể. – Pochi
Bạn có thể tiếp tục và upvote/chấp nhận một số câu trả lời. Có vẻ như mọi người bỏ một số nỗ lực và nhận được số tiền rất nhỏ cho tất cả những điều đó. –