Giả sử một máy đơn có 8 lõi. Trong Haskell, bạn có thể biên dịch bằng cách sử dụng tùy chọn threaded
, sau đó trong khi sử dụng thời gian chạy +RTS -Nx
để chỉ định số lượng lõi được sử dụng. ví dụ.Cách thực hiện các phép đo F # để tăng tốc độ
$ myprg args // sequential run
$ myprg args +RTS -N1 // parallel run on 1..8 cores
$ myprg args +RTS -N2
$ myprg args +RTS -N4
$ myprg args +RTS -N8
Từ đó, bạn có thể sử dụng số lượng lõi ngày càng tăng, sau đó bạn có thể sử dụng để tăng tốc và vẽ biểu đồ.
Bạn sẽ làm điều này như thế nào trong F #, giả sử tôi có một chương trình song song, ví dụ: sử dụng một bản đồ song song trong mã?
EDIT: tôi thấy có ParallelOptions ví dụ MaxDegreeOfParallelism
có thể là những gì tôi cần nhưng không chắc chắn về hành vi chính xác của nó và tôi sẽ phải sử dụng nó theo cách lập trình. 'hoặc chủ đề.
CHỈNH SỬA: ProcessorAffinity
thực sự giới hạn số lượng lõi để sử dụng nhưng có vẻ như nó không được triển khai đúng cách trong Mono. Tôi đã kiểm tra trên Windows và có vẻ như nó hoạt động. Mặc dù nó không thực sự là một ý tưởng tốt để sử dụng. Hệ thống thời gian chạy sẽ có thể quyết định tốt hơn cách quản lý và lên lịch các tác vụ. Ngoài ra, MaxDegreeOfParallelism
là về "mức độ song song" về cơ bản đặt số lượng tác vụ được tạo, do đó có thể được sử dụng để thay đổi mức độ chi tiết.
Nếu bạn đang sử dụng Windows, bạn chỉ có thể đặt số lượng CPU trong trình quản lý tác vụ: http://www.addictivetips.com/windows-tips/how-to-set-processor-affinity-to-an -ứng dụng-trong-windows/ –
Tôi đang sử dụng Linux/mono. Có cách nào để làm điều tương tự trong Linux? – vis
F # xây dựng một phiên bản .NET gốc. Một hội đồng theo các quy tắc quy định cho thời gian chạy (CLR) mà theo mặc định có ái lực trên tất cả các lõi CPU. Bạn có thể giới hạn CLR cho một số _fewer_ lõi bằng cách đặt 'System.Diagnostics.Process.GetCurrentProcess(). ProcessorAffinity'. – bytebuster