2013-06-11 29 views
5

I biết rằng thiết kế của Renderscript là che khuất thực tế về bộ xử lý tôi đang chạy, nhưng có cách viết mã như vậy trên các thiết bị có tính năng GPU hay không , Nexus 10), nó sẽ chạy trên GPU? Có cách nào để nói rằng chức năng của tập lệnh đang chạy trên GPU không?Renderscript và GPU

www.leapconf.com/downloads/LihuaZhang-MulticoreWare.pdf gợi ý rằng nếu tôi không sử dụng hình cầu, tôi không sử dụng đệ quy và không gọi rsDebug ở bất kỳ đâu trong hạt nhân, nó sẽ được chạy trên GPU; đúng không?

Tôi muốn xem một tập lệnh ngắn mà mọi người đã xác minh bằng cách nào đó sẽ chạy trên gpu dưới dạng tác vụ thuần túy tính toán (ví dụ: không có đồ họa).

+0

Câu hỏi này thực sự xứng đáng nhận được nhiều ưu điểm hơn, vì tôi nghĩ rằng Android đang để lại quá nhiều thứ trong bóng tối ở đây. – rsp1984

Trả lời

2

Nói chung, những khiếu nại đó về hành vi của Nexus 10 là chính xác. Có một số thứ khác về việc gọi một số hàm thời gian chạy RS (ví dụ, không gọi hàm rsGetAllocation) có thể làm cho CPU chạy một hàm. Tuy nhiên, tôi nghĩ rằng globals không phân bổ hoặc con trỏ bị ràng buộc được chấp nhận trong 4.2.

Về sau, rất nhiều hạn chế đó sẽ được giải phóng (hình cầu là hình ảnh lớn).

Về mặt xem hạt nhân chạy ở đâu: bạn không thể làm gì với 4,2 để tìm ra điều đó. Chúng tôi chưa thấy lý do thuyết phục để làm như vậy, nhưng nếu điều này thực sự quan trọng thì đó là điều chúng tôi có thể thêm mà không gặp quá nhiều khó khăn qua một thứ như systrace. Hãy phàn nàn với chúng tôi nếu bạn có thể chứng minh lý do tại sao điều đó làm bạn đau khổ hơn "Tôi cho rằng mã sẽ chạy nhanh hơn trên GPU."

Tôi khá chắc chắn rằng việc triển khai Mandelbrot trong ImageProcessing (fw/base/tests/RenderScriptTests/ImageProcessing /) chạy trên GPU trong phiên bản 4.2.

+0

Tim, bạn có thể cập nhật trạng thái trong Android 4.3 wrt câu hỏi ban đầu không? – rsp1984

+1

Truy cập phân bổ toàn cầu và sử dụng GetElementAt và SetElementAt sẽ không khiến hạt nhân chạy trên CPU trong phần lớn các tình huống trên Nexus 10 chạy 4.3. Có một số hạn chế với USAGE_SHARED, nhưng đó là nhiều chi phí sao chép tiềm năng hơn là giảm trở lại CPU. –

+0

Điều gì sẽ xảy ra nếu một phần tử (hoặc chuỗi?) Truy cập dữ liệu phần tử lân cận? Nó sẽ chạy trên gpu? –