2011-12-03 43 views
12

Tôi muốn tăng tốc độ vẽ đồ thị và tôi hài lòng với (và có nhiều mã yêu cầu) đồ họa R và gói ggplot - vì vậy tôi chỉ quan tâm đến việc biết cách cấu hình hệ thống của mình để tăng tốc âm mưu.Phần cứng nào giới hạn tốc độ vẽ trong R?

Cụ thể:

  1. là tốc độ của âm mưu trong R giới hạn bởi các thẻ xử lý, bộ nhớ, đồ họa?
  2. Các thành phần hoặc cấu hình phần cứng cụ thể có làm tăng tốc độ vẽ đồ thị không?

Cập nhật: Câu trả lời cho câu hỏi trong ý kiến:

số kỹ thuật: Ubuntu 11.04, intel Core Duo, 8GB ram, nhưng tôi nói chung quan tâm đến thời tiết các tính toán đồ họa hoặc vẽ đồ họa được giới hạn và nếu có, làm cách nào tôi có thể sử dụng thông tin này.

Ô của tôi có nhiều đối tượng, nhưng tôi không biết chi phí tính toán của âm mưu là gì. Tôi không thực hiện bất kỳ phân tích cụ thể nào trong khi vẽ (tôi đang vẽ sau khi hoàn thành bất kỳ phân tích bắt buộc nào), mặc dù tôi hiểu rằng một số được thực hiện 'khi đang bay', như khi vẽ một đường trơn hoặc thậm chí dịch dữ liệu vào vị trí.

+0

bạn đã xem xét xử lý song song chưa? Hay bạn chủ yếu quan tâm đến các ô đơn lẻ chuyên sâu về máy tính? –

+0

@Xu không, tôi đã không nghĩ về điều đó cho âm mưu, và tôi thường quan tâm đến nhiều lô. –

+0

bạn có nhiều bộ xử lý? Bạn đang sử dụng hệ điều hành nào? Cũng lưu ý rằng nếu bạn thực sự muốn có nhiều CPU hoặc RAM hơn, hãy xem xét sử dụng dịch vụ đám mây, như dịch vụ của Amazon. Tôi không biết gì về điều này. –

Trả lời

9

Trừ khi bạn có các ô đơn lẻ chuyên sâu về máy tính, một cách tuyệt vời để tăng tốc nhiều âm mưu là xử lý song song. Ví dụ, giả sử bạn có một khung dữ liệu và bạn muốn chia nhỏ nó theo một biến nhất định (hoặc các biến) và làm các ô cho mỗi phân vùng.

Có nhiều cách để đăng ký một chương trình phụ trợ song song vì vậy tôi sẽ không tham gia vào đó. Xem ví dụ: họa tiết này: http://cran.r-project.org/web/packages/doSMP/vignettes/gettingstartedSMP.pdf

Sau đó, hãy xem hàm ddply trong gói plyr của Hadley và sử dụng tùy chọn .parallel = TRUE. Đó là về cơ bản nó. Sau đó, chỉ cần vẽ âm mưu bình thường.

Dưới đây là một khép kín dụ:

#this is the particular library I chose to register a parallel backend. There are others. See the new "Parallel R" book for details. 
library(doMC) 
registerDoMC() 
getDoParWorkers() #This lists how many workers you have (hopefully more than 1!) 

library(ggplot2) 
ddply(
     mtcars, .variables = "vs", .fun = function(x) { 
     #do your plotting now 
     example_plot <- ggplot(x, aes(y = mpg, x = wt)) + geom_point() + geom_smooth(se = FALSE) 
     #save your plot 
     ggsave(paste(x$vs[1],".pdf",sep = ""), example_plot) 
     }, 
     .parallel = TRUE 
) 

này sẽ tiết kiệm được hai tập tin, 0.pdf và 1.pdf, đó là những mức (tức là giá trị duy nhất) của vs biến của mtcars dataframe . Nếu bạn đã phá vỡ nó bằng một biến country name thì các tệp được lưu sẽ là tên của các quốc gia. 0.pdf và 1.pdf như dưới đây:

enter image description here

enter image description here

+2

Ví dụ hay, nhưng công bằng đôi khi nó giúp sử dụng mạng thay vì ggplot (2). Nó có thể nhanh hơn nhiều. –

4

Như @Xu Wang chỉ ra, bạn có thể sử dụng song song để vẽ một vài lô cùng một lúc.

Vì vậy, phần cứng khôn ngoan, một máy đa lõi nhanh mạnh mẽ với nhiều RAM sẽ giúp một chút.

Nếu bạn muốn vẽ một ô với một triệu ô trong ô x-y (âm mưu phân tán), thì tăng tốc phần cứng đồ họa sẽ rất có lợi.

Nhưng một card đồ họa nhanh chỉ giúp nếu các thiết bị đồ họa trong R hỗ trợ tăng tốc phần cứng. Hiện tại họ không - và như @hadley chỉ ra, ggplot sử dụng các thiết bị đồ họa tiêu chuẩn.

Gói rgl dường như sử dụng OpenGL để làm đồ họa 3D. Đã không thử nó mặc dù. Bạn có thể sử dụng nó để vẽ một số lô hiệu quả hơn ...

Tôi có một số kinh nghiệm tạo các ô tăng tốc phần cứng tương tác nhanh (2d và 3d) và có thể phóng to nhanh hơn. Các ô 2d thực sự khó tăng tốc hơn so với các ô 3D ... Có lẽ không phải là một điều dễ dàng để đưa vào khái niệm thiết bị đồ họa hiện tại của R.

CẬP NHẬT Tôi vừa thử rglplot3d với 1 triệu điểm. Nó hoàn toàn tương tác (các phần nhỏ của một giây để cập nhật) trên máy tính xách tay (khá mạnh) của tôi.

library(rgl) 
x <- sort(rnorm(1e6)) 
y <- rnorm(1e6) 
z <- rnorm(1e6) + atan2(x,y) 
plot3d(x, y, z, col=rainbow(1000)) 
+2

Ggplot2 sẽ hỗ trợ tăng tốc phần cứng nếu các thiết bị đồ họa R đã làm – hadley

+0

@ hadley - Điểm tốt! Đã cập nhật câu trả lời. – Tommy

+0

Câu trả lời hay. Ngoài ra còn có một ví dụ điển hình tuyệt vời ở đây http://stackoverflow.com/a/6814180/636656 –

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