2013-08-27 37 views
5

Tôi đang cố xử lý một loạt tệp csv và trả lại khung dữ liệu trong R, song song bằng cách sử dụng mclapply(). Tôi có một máy 64 lõi, và tôi dường như không thể nhận được thêm rằng 1 lõi được sử dụng tại thời điểm này bằng cách sử dụng mclapply(). Thực tế, nhanh hơn một chút để chạy lapply() thay vì mclapply() vào lúc này. Dưới đây là ví dụ cho thấy rằng mclapply() không sử dụng nhiều lõi hơn có sẵn:mclapply không sử dụng nhiều lõi

library(parallel) 

test <- lapply(1:100,function(x) rnorm(10000)) 
system.time(x <- lapply(test,function(x) loess.smooth(x,x))) 
system.time(x <- mclapply(test,function(x) loess.smooth(x,x), mc.cores=32)) 

user system elapsed 
    0.000 0.000 7.234 
user system elapsed 
    0.000 0.000 8.612 

Có một số mẹo để làm việc này không? Tôi đã phải biên dịch R từ nguồn trên máy tính này (v3.0.1), có một số cờ biên dịch mà tôi bỏ lỡ để cho phép forking? detectCores() nói với tôi rằng tôi thực sự có 64 lõi để chơi với ... Bất kỳ mẹo nào được đánh giá cao!

+2

Bạn đang sử dụng hệ điều hành nào? Nó không có vẻ liên quan đến trường hợp của bạn, nhưng đáng chú ý là 'mclapply' trên Windows chỉ là một trình bao bọc cho' lapply'. – Frank

+0

Linux. Redhat để được chính xác. – reptilicus

+1

Nếu bất kỳ ai cũng có thể xác minh rằng ví dụ trên thực sự tăng tốc với mclapply() cũng sẽ hữu ích. – reptilicus

Trả lời

6

Tôi nhận được kết quả tương tự cho bạn, nhưng nếu tôi thay đổi rnorm(10000) thành rnorm(100000), tôi sẽ tăng tốc đáng kể. Tôi đoán rằng chi phí bổ sung là hủy bỏ bất kỳ lợi ích hiệu suất cho một vấn đề quy mô nhỏ như vậy.

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