2012-04-20 44 views
5

Phân kỳ chủ đề thuật ngữ được sử dụng trong CUDA; từ sự hiểu biết của tôi đó là một tình huống mà các chủ đề khác nhau được chỉ định để thực hiện các nhiệm vụ khác nhau và kết quả này trong một hit hiệu suất lớn.Phân tách chuỗi Openmp?

Tôi đã tự hỏi, liệu có một hình phạt tương tự cho việc này trong openmp? Ví dụ, nói rằng tôi có một bộ xử lý 6 lõi và một chương trình với 6 chủ đề. Nếu tôi có một điều kiện mà làm cho 3 chủ đề thực hiện một nhiệm vụ nhất định, và sau đó có ba chủ đề khác thực hiện một nhiệm vụ hoàn toàn khác nhau, sẽ có một hit hiệu suất lớn? Tôi đoán trong bản chất đó là loại sử dụng openmp để làm MIMD.

Về cơ bản, tôi đang viết một chương trình có openmp và CUDA. Tôi muốn hai chủ đề để chạy một hạt nhân CUDA trong khi khác còn lại trên chủ đề chạy mã C. Cảm ơn.

+0

Chỉ cần tò mò, làm cách nào để thực hiện điều này trong OpenMP? Tôi biết bạn đã trả lời câu hỏi của bạn rồi, nhưng thật tuyệt khi thấy một đoạn mã. –

+0

Đây là chủ đề không chính xác, nhưng trước khi bạn làm cho mã máy chủ của bạn quá phức tạp, bạn có thể không cần nhiều hơn một chuỗi CPU cho CUDA - với lập trình CUDA 4.0 và sau nhiều GPU có thể được thực hiện từ một chuỗi máy chủ duy nhất, do đó, trừ khi bạn có công việc song song để làm ở phía máy chủ, nhiều chủ đề có thể không thêm bất cứ điều gì nhưng phức tạp. Nếu bạn có công việc song song để thực hiện trên CPU, bạn có thể sử dụng một luồng CPU cho CUDA và phần còn lại để làm CPU hoạt động song song. – harrism

Trả lời

7

Không, không có lần truy cập hiệu suất nào cho các chuỗi phân tách bằng OpenMP. Đó là một vấn đề trong CUDA vì cách thức hướng dẫn được phát đồng thời tới một bộ lõi. Khi một luồng OpenMP nhắm vào một lõi CPU, mỗi lõi CPU có một tập các lệnh độc lập riêng để làm theo, và nó chạy giống như bất kỳ chương trình đơn luồng nào khác.

Bạn có thể thấy một số lõi của bạn đang bị sử dụng quá mức nếu bạn có các rào cản đồng bộ sau phân kỳ luồng, vì điều đó sẽ buộc các luồng nhanh hơn phải chờ các chủ đề chậm hơn bắt kịp.

+0

Cảm ơn bạn đã phản hồi! Lần đầu tiên đăng bài trên tràn ngăn xếp và tôi nhận được hai phản hồi trong 10 phút. Khá tuyệt vời. – Justin

3

Khi nói về tính song song của CPU, không có hiệu suất nội tại nào được nhấn từ việc sử dụng một mẫu thiết kế luồng nhất định. Không phải ở mức lý thuyết ít nhất.

Vấn đề duy nhất tôi thấy là vì các chủ đề đang làm những việc khác nhau có thể có thời gian hoàn thành khác nhau, một số chủ đề có thể ngồi không hoạt động sau khi hoàn thành công việc, chờ đợi những người khác hoàn thành nhiệm vụ dài hơn.

+0

Cảm ơn bạn đã phản hồi. – Justin

1

Phân kỳ chuỗi thuật ngữ trong CUDA đề cập đến tình huống khi không phải tất cả các chuỗi của một bock đánh giá điều kiện có cùng kết quả. Các chủ đề như vậy được cho là phân kỳ. Nếu các chủ đề phân tách nằm trong cùng một sợi dọc thì các luồng đó có thể thực hiện công việc serially dẫn đến mất hiệu năng.

Tôi không chắc chắn rằng OpenMP có cùng một vấn đề. Khi các luồng khác nhau thực hiện công việc khác nhau thì cân bằng tải có thể được sử dụng bởi thời gian chạy có lẽ, nhưng nó không dẫn đến việc tuần tự hóa công việc cần thiết.

1

không có loại vấn đề này trong openmp vì mọi luồng mở có PC riêng của nó.

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