2010-08-27 9 views
5

Câu hỏi đặt ra là như thế nào?

Tôi có cần phải xuống cấp hạt nhân để thực hiện việc này hay không, có cách nào đơn giản hơn không? Để cụ thể hơn, phải làm gì để thực hiện một loại lõi kép hợp nhất?

+0

LOL, tôi đọc đó là tê liệt :-( – SQLMenace

+2

Tôi nghĩ đây là một câu hỏi rất thực tế với một số câu trả lời xuất sắc! – Lazer

Trả lời

3

Đánh giá bởi các câu hỏi trong quá khứ của bạn, tôi muốn nói rằng bạn đang tìm cách triển khai trong C/C++, nhưng tôi tin rằng câu trả lời là gần giống nhau bất kể ngôn ngữ.

Nếu bạn muốn song song bất kỳ thao tác nào, hãy làm cho nó đa luồng. Bạn có thể có nhiều luồng song song, song song khi bạn có lõi.

Dưới đây là một câu hỏi liên quan: How to implement divide and conquer algorithms in C# using multithreading?

Theo tôi được biết, ràng buộc một chủ đề cụ thể để một lõi hoặc bộ vi xử lý được gọi là processor affinity. Nó thường không phải là một ý tưởng tốt, bởi vì mục đích của hệ điều hành là để sắp xếp các chủ đề giữa các bộ vi xử lý. Nó không chắc rằng bạn sẽ làm một công việc tốt hơn này hơn là hệ điều hành có thể.

+0

Đối với tính song song hạt mịn, bạn muốn sử dụng một số loại hồ bơi chủ đề và không phải trả chi phí khởi động –

+0

Tôi đã làm khá nhiều công việc với mối quan hệ của bộ vi xử lý và tin tôi, bạn chắc chắn có thể làm tốt hơn hệ điều hành, miễn là bạn phân tích đúng vấn đề của mình, nhưng điều này cũng đúng cho việc phân luồng. – NomadAlien

1

Tôi hy vọng bạn đang tìm cách chỉ định luồng cho mỗi lõi .. Đây là mô tả chi tiết về những gì có thể được thực hiện và cách thực hiện.

Processor affinity

Hy vọng điều này sẽ hữu ích.

3

Để triển khai thuật toán tận dụng nhiều lõi, hãy xem xét OpenMP.

Tất nhiên, các thuật toán có phụ thuộc dữ liệu mạnh có thể không song song tốt.

+0

Tôi muốn xem xét pthreads và fork() đầu tiên ... – polemon

+0

@polemon: Có bất kỳ eason nào cho việc xem xét OpenMP này thường đơn giản hơn không (ít nhất là cho các vấn đề dễ hiểu, nhưng vì chủ đề này dường như hướng đến người mới bắt đầu, thats (hy vọng) những gì chúng tôi đang nói về) – Grizzly

+0

OpenMP là phù hợp hơn f hoặc song song hạt mịn, pthreads cho song song ít tiền phạt, ngã ba cho song song phần nào hạt thô, và hệ thống phân phối (cụm) cho song song cực kỳ thô. Câu hỏi này khá chi tiết và tôi nghĩ bạn sẽ điên khi dùng nĩa để giải quyết nó. –

0

Tùy thuộc vào ngôn ngữ lập trình bạn muốn đạt được điều này. Ví dụ:

Chỉ cần chọn ngôn ngữ và tìm kiếm khả năng xử lý song song trong ngôn ngữ đó.

Chúc may mắn!

0

Trong khi chủ đề POSIX (pthreads) có thể là một ý tưởng hay để bắt đầu, thì đây không phải là độc quyền.

Đa luồng trong C không thực sự tầm thường, do đó, tôi muốn tư vấn fork().

bắt đầu một ngã ba công nhân cho mỗi CPU với một phần của thuật toán mergrort your và sau đó ghép lại chúng trong thanh quản lý.

Khi làm việc hướng tới một giải pháp song song, tôi xem xét các nhánh trước các luồng, vì chúng dễ triển khai hơn và bạn sẽ nhận được kết quả sơ bộ nhanh chóng. Một khi công trình đó, bạn có thể muốn dành thời gian và làm việc với pthreads.