2011-06-30 44 views
13

Trong my previous question Tôi đã hỏi, tôi đã chạm vào đối tượng parallel_for từ ppl.h do Microsoft cung cấp.
Nhưng ngay sau khi tôi nhận ra rằng bằng cách sử dụng nó làm cho ứng dụng của mình không thể chuyển đổi (nếu tôi đúng, nó dành riêng cho Microsoft (tiêu đề ppl.h)).
Theo ý kiến ​​của tôi, điều này phá vỡ khía cạnh rất quan trọng của lập trình trong C++ - tính di động, và tôi không chuẩn bị để làm điều đó.
Vì vậy, câu hỏi của tôi là:
1. Tôi có quyền nói rằng việc sử dụng parallel_for từ ppl làm cho mã của bạn không thể chuyển đổi (không thể chuyển đổi được, nghĩa là nó không thể được biên dịch bởi trình biên dịch khác so với một từ MS)
phải nói rằng nếu ở giai đoạn sau, tôi muốn cung cấp giao diện người dùng (thực hiện trong Qt) cho ứng dụng tôi đang làm việc trên momment, sử dụng parallel_for trong mã của tôi sẽ là một tắc nghẽn có nghĩa là tôi sẽ thay thế parallel_for bằng một số khác (di động) thay thế hoặc tôi sẽ không thể làm giao diện người dùng trong Qt và lõi trong VS?
3. Các lựa chọn thay thế (di động) cho ppl là gì?Lựa chọn thay thế cho ppl

Trả lời

14

Bạn có thể xem xét Intel Thread Building Blocks. Không giống như OpenMP, TBB thực sự sử dụng C++, chứ không đơn giản biên dịch theo trình biên dịch C++ (tức là: là một thư viện C có thể biên dịch thành C++). Nó có nhiều thứ bạn thấy trong PPL, nhưng nó là nền tảng chéo.

Ngoài ra còn có Boost.Thread, là C++ (mặc dù không hoàn toàn trực tiếp như TBB), và nó là nền tảng chéo.

+0

cảm ơn bạn rất nhiều vì câu trả lời của bạn. Nicol, có bất cứ điều gì "thực sự đặc biệt" về ppl mà sẽ làm cho một người sử dụng nó hơn là TBB, hy sinh tính di động? – smallB

+0

OpenMP không phải là một thư viện, nó là một phần mở rộng trình biên dịch quan trọng nhất. Nó thêm tính song song * trong ngôn ngữ *. –

+0

@smallB, Trên VC10 có, nó giúp gỡ lỗi. VC10 cho thấy các nhiệm vụ song song và ngăn xếp song song, được tích hợp tốt với ConcRT. – Ajay

0

Tôi đúng khi nói rằng việc sử dụng parallel_for từ ppl làm cho mã của bạn unportable (bởi unportable Tôi có nghĩa là nó không thể được biên soạn bởi trình biên dịch khác so với cái từ MS)

unportable nếu bạn tự chuyển đổi nền tảng. Có thể được di động trên Windows, nếu bạn muốn sử dụng các trình biên dịch khác. Nhưng biết rằng PPL là một phần của Concurrency Runtime, được đặt trong MSVCRT100.DLL và bạn cần liên kết đến (hoặc liên kết tĩnh, mà không cần DLL lúc chạy). Tôi không chắc chắn làm thế nào điều này có thể được thực hiện với các trình biên dịch khác/linkers, nhưng tôi tin rằng nó là doable.

Tôi đúng khi nói rằng nếu trên sân khấu sau Tôi muốn cung cấp giao diện người dùng (thực hiện trong Qt) cho ứng dụng tôi đang làm việc trên tại momment, sử dụng parallel_for trong mã của tôi sẽ là một cản trở mà sẽ có nghĩa là hoặc là tôi sẽ thay thế parallel_for với một số (xách tay) thay thế khác hoặc tôi sẽ không thể làm giao diện người dùng trong Qt và cốt lõi trong VS

bạn có thể viết core- của bạn khuôn khổ trong việc sử dụng PPL/VC++ và o có GUI đối tác trong QT/trình biên dịch khác. Đối với điều này chỉ cần thực hiện một DLL mà sẽ sử dụng PPL, và ứng dụng GUI của bạn sẽ sử dụng DLL. Tôi tin rằng bạn hiểu những gì tôi có ý nghĩa ở đây. Điều này cũng làm giảm gánh nặng từ đầu của bạn về tính di động (trên Windows).

  1. Lựa chọn thay thế (di động) cho ppl là gì?

Nhiều, nhưng tôi thích sử dụng PPL trên Windows/VC++. Bạn có thể xem xét sử dụng TBB của Intel.OpenMP là phiền hà, và không đưa ra lợi thế so với TBB/ConcRT

5

Những người làm việc trên dự án Casablanca đã thực hiện một phiên bản di động của PPL, được gọi là PPLX. Nó được cấp phép theo giấy phép Apache 2.0.

Trước đây họ đã nói rằng họ đang làm việc chặt chẽ cùng với nhóm PPL để giữ cho cả hai phiên bản đồng bộ hóa tính năng và sửa lỗi khôn ngoan (xem bài đăng cuối cùng trong this thread).

+0

PPLX tập trung vào hỗ trợ cho các tác vụ. Nó không có hỗ trợ cho parallel_for hoặc bất cứ điều gì phù hợp bởi parallel_ * cho vấn đề đó. –