Danh sách, mảng hoặc seq nào hiệu quả hơn để xử lý song song và có thể dễ dàng thực hiện các hoạt động song song như parmap
, parfilter
, v.v ...?Bộ sưu tập dữ liệu song song trong F #
CHỈNH SỬA: Cảm ơn bạn đã đề xuất. Array.Parallel
trông giống như một lựa chọn tốt. Ngoài ra kiểm tra ra PSeq.fs
và tôi đã có một câu hỏi về cách làm việc pmap
dưới đây.
let pmap f xs =
seq { for x in xs -> async { return f xs } }
|> Async.Parallel
|> Async.RunSynchronously
Chủ đề mới có được sinh ra cho mỗi phần tử trong chuỗi không? Nếu vậy, có cách nào để phá vỡ các seq thành các khối và tạo ra một nhiệm vụ mới cho mỗi đoạn để có được đánh giá song song?
Tôi cũng muốn xem liệu có bất kỳ triển khai pmap
tương tự nào cho danh sách hay không. Tôi thấy Tomas có triển khai ParallelList
trong bài đăng trên blog của mình here. Nhưng tôi không chắc liệu chuyển đổi một danh sách thành mảng để thực hiện đánh giá song song không phải chịu quá nhiều chi phí và nếu nó có thể tránh được?
EDIT: Cảm ơn tất cả các yếu tố đầu vào của bạn. Tomas trả lời câu hỏi ban đầu của tôi.
Trả lời câu hỏi của riêng tôi trong chỉnh sửa đầu tiên:
tôi đã cố gắng phá vỡ một danh sách lớn thành những phần sau đó áp dụng async cho mỗi sublist.
let pmapchunk f xs =
let chunks = chunk chunksize xs
seq { for chunk in chunks -> async { return (Seq.map f) chunk } }
|> Async.Parallel
|> Async.RunSynchronously
|> Seq.concat
Kết quả: map
: 15s, pmap
: 7s, pmapchunk
: 10s.
Nó phụ thuộc nhưng bạn gần như chắc chắn muốn 'Array.Parallel' và không phải là 'async'. –