2011-01-23 5 views
56

Tôi đã nhận thấy rằng R chỉ sử dụng một lõi trong khi thực hiện một trong các chương trình của tôi đòi hỏi nhiều tính toán. Tôi muốn tận dụng bộ xử lý đa lõi của mình để làm cho chương trình của tôi chạy nhanh hơn. Thực ra tôi chưa nghiên cứu sâu về câu hỏi nhưng tôi đánh giá cao vì bạn không có kiến ​​thức tốt về khoa học máy tính và điều này rất khó để tôi có được thông tin dễ hiểu về chủ đề đó.Gói R tự động sử dụng nhiều lõi?

Có gói nào cho phép R tự động sử dụng nhiều lõi khi cần không?

Tôi đoán nó không phải là đơn giản.

+2

Revolutions (http://www.revolutionanalytics.com/) cung cấp một phiên bản đa luồng của R. Tất nhiên, thương mại của họ trạng thái dường như có một hiệu ứng phân cực trong cộng đồng R. –

+7

Tôi cũng sẽ thêm rằng nhiều công dụng điển hình của R sẽ không thể tuân theo sự song song tự động. Nếu bạn đã cho chúng tôi biết những gì bạn làm chương trình thì bạn có thể nhận được câu trả lời tốt hơn. –

+0

có thể trùng lặp của [Sử dụng Multicore trong R cho máy pentium 4 HT] (http://stackoverflow.com/questions/3545559/using-multicore-in-r-for-a-pentium-4-ht-machine) –

Trả lời

45

R chỉ có thể sử dụng nhiều lõi với sự trợ giúp của các gói bổ trợ và chỉ cho một số loại hoạt động. Các tùy chọn được thảo luận chi tiết về High Performance Computing Task View trên cran

Cập nhật: Từ R Version 2.14.0 add-on gói không nhất thiết phải yêu cầu do sự bao gồm của song song gói như là một gói khuyến cáo vận chuyển với R song song bao gồm chức năng từ các gói đa lõituyết, hầu như không thay đổi.

+3

Xem thêm: giấy so sánh các phương pháp tính toán song song khác nhau trong R từ 2009 http://www.jstatsoft.org/v31/i01/ –

30

Cách dễ nhất để tận dụng bộ đa xử lý là gói multicore bao gồm chức năng mclapply(). mclapply() là một phiên bản đa lõi của lapply(). Vì vậy, bất kỳ quá trình có thể sử dụng lapply() có thể dễ dàng chuyển đổi thành một quá trình mclapply(). Tuy nhiên, đa lõi không hoạt động trên Windows. Tôi đã viết một bài đăng blog về điều này last year mà có thể hữu ích. Gói phân tích cuộc cách mạng được tạo, doSMP, KHÔNG phải là phiên bản đa luồng R. Đó là phiên bản đa lõi của Windows.

Nếu công việc của bạn là embarrassingly parallel, bạn nên làm quen với kiểu cấu trúc lapply(). Điều đó sẽ cho phép bạn dễ dàng phân biệt vào mclapply() và thậm chí phân phối điện toán bằng cách sử dụng cùng một trừu tượng.

Mọi thứ trở nên khó khăn hơn nhiều cho các hoạt động không phải là "lúng túng song song".

[EDIT]

Là một mặt lưu ý, Rstudio đang ngày càng trở nên phổ biến như một kết thúc trước cho R. Tôi yêu Rstudio và sử dụng nó hàng ngày. Tuy nhiên cần lưu ý rằng Rstudio không chơi tốt với Multicore (ít nhất là vào tháng 10 năm 2011 ... Tôi hiểu rằng nhóm RStudio sẽ sửa lỗi này). Điều này là bởi vì Rstudio làm một số forking đằng sau hậu trường và các dĩa xung đột với nỗ lực của Multicore để ngã ba. Vì vậy, nếu bạn cần Multicore, bạn có thể viết mã của bạn trong Rstuido, nhưng chạy nó trong một phiên bản R-plain.

+0

Còn Mac OS X thì sao? Tôi biết nó không phải Linux, nhưng ít nhất là một chút gần gũi. Chỉ cần tò mò những gì trạng thái là có ... –

+4

@ ran2, các gói đa lõi hoạt động tuyệt vời trên Mac. –

+0

Tôi đã chọn hiển thị vì tôi có thể sử dụng nó trên tất cả các máy chạy Windows trong Ubuntu mà không gặp rắc rối. –

2

Như David Heffernan đã nói, hãy xem Blog của Analytics cách mạng. Nhưng bạn nên biết rằng hầu hết các gói đều dành cho Linux. Vì vậy, nếu bạn sử dụng cửa sổ nó sẽ khó khăn hơn nhiều. Dù sao, hãy xem các trang web sau:

Revolution. Ở đây bạn sẽ tìm thấy một bài giảng về parallerization trong R. Bài giảng thực sự là rất tốt, nhưng, như tôi đã nói, hầu hết các lời khuyên cho Linux.

Và chuỗi này ở đây tại Stackoverflow sẽ loại bỏ một số triển khai trong Windows.

+0

Tôi nghĩ rằng các sản phẩm Revolutions đã bị thiên vị đối với Windows. –

+0

@David - Họ cũng cung cấp phiên bản Red Hat Enterprise Linux. Sinh viên/nhà giáo dục có thể nhận được giấy phép người dùng đơn miễn phí. –

+0

@richardh Quan điểm của tôi là nội dung của họ không dành riêng cho Linux vì Manoel dường như ngụ ý –

14

Về câu hỏi này, bạn luôn nhận được câu trả lời rất ngắn.Giải pháp đơn giản nhất theo tôi là gói snowfall, dựa trên tuyết. Đó là, trên một máy tính Windows đơn với nhiều lõi. Xem thêm ở đây article of Knaus et al cho một ví dụ đơn giản. Snowfall là một wrapper xung quanh gói tuyết, và cho phép bạn thiết lập một multicore với một vài lệnh. Nó chắc chắn ít rắc rối hơn so với hầu hết các gói khác (tôi đã không thử tất cả chúng).

Trên một sidenote, thực sự chỉ có vài nhiệm vụ có thể được song song, vì lý do rất đơn giản mà bạn phải có khả năng phân chia các nhiệm vụ trước khi tính toán đa lõi có ý nghĩa. các gia đình apply rõ ràng là một sự lựa chọn hợp lý cho điều này: nhiều và độc lập tính toán, đó là rất quan trọng cho việc sử dụng đa lõi. Bất cứ điều gì khác không phải lúc nào cũng dễ dàng ghép nối.

Đọc thêm cuộc thảo luận này trên sfApply and custom functions.

7

Microsoft R Open bao gồm các thư viện toán học đa luồng để cải thiện hiệu suất của R.It hoạt động trong Windows/Unix/Mac tất cả các loại hệ điều hành. Đó là mã nguồn mở và có thể được cài đặt trong một thư mục riêng biệt nếu bạn có bất kỳ cài đặt R (từ CRAN) hiện có nào. Bạn có thể sử dụng phổ biến IDE Rstudio cũng với điều này. Từ khi thành lập, R được thiết kế để chỉ sử dụng một sợi đơn (bộ xử lý) tại một thời điểm. Ngay cả ngày hôm nay, R hoạt động theo cách đó trừ khi được liên kết với các thư viện BLAS/LAPACK đa luồng.

Máy đa lõi hiện nay cung cấp công suất xử lý song song. Để tận dụng điều này, Microsoft R Open bao gồm các thư viện toán học đa luồng. Các thư viện này có thể thực hiện được nhiều thao tác R phổ biến như ma trận nhân/nghịch đảo, phân tích ma trận và một số phép toán ma trận cấp cao hơn để tính toán song song và sử dụng tất cả công suất xử lý có sẵn để giảm thời gian tính toán.

Vui lòng kiểm tra liên kết dưới đây:

https://mran.revolutionanalytics.com/rro/#about-rro

http://www.r-bloggers.com/using-microsoft-r-open-with-rstudio/