2012-01-25 27 views
24

Đối với độc lập plattform (máy tính để bàn, điện toán đám mây, di động, ...) sẽ rất tuyệt vời khi sử dụng OpenCL để phát triển GPGPU khi tốc độ không thành vấn đề. Tôi biết Google đẩy RenderScript như là một thay thế, nhưng nó dường như chỉ có sẵn cho Android và dường như không bao giờ được bao gồm trong iOS.Làm cách nào để sử dụng OpenCL trên Android?

Vì vậy, tôi tìm kiếm giải pháp để thực thi mã OpenCL trong Ứng dụng Android.

+0

Tôi tự hỏi nếu bản cập nhật có thể theo thứ tự ở đây, sau khi đọc câu chuyện này về sự thích ứng của Intel đối với AMP của Microsoft vào OpenCL & llvm/Clang: http://www.phoronix.com/scan.php?page=news_item&px = MTIyOTk kết hợp với sự bao gồm cũng rất gần đây của llvm/Clang trong chuỗi công cụ NDK của Android: http://clang-developers.42468.n3.nabble.com/Clang-now-included-in-Android-NDK-r8c-td4028206 .html Chỉ xem xét điều này ngay bây giờ và chưa thử nó, tôi sẽ thử nghiệm và cung cấp tin tức về kết quả của tôi trong một bài đăng trong tương lai. – Jackalope

Trả lời

12

Các thiết bị Android duy nhất mà tôi biết hỗ trợ OpenCL là những thiết bị dựa trên họ chip Mali T600 (bài viết here). Họ có OpenCL SDK. Rõ ràng nó là OpenCL 1.1 hồ sơ đầy đủ là tốt.

Nexus 10 là thiết bị sử dụng chip như vậy. Các Samsung Exynos 5 dual SoC sử dụng một Mali T604, vì vậy bất cứ điều gì bằng cách sử dụng này được cho là có thể được sử dụng với Mali T600 OpenCL SDK (havne't đã cố gắng bất kỳ điều này bản thân mình).

Tác giả của blog OpenCL đang cố gắng have a go with this, vì vậy có thể đáng giá sau loạt bài viết của anh ấy. Tuy nhiên, hỗ trợ OpenCL trên Android là thương hiệu mới (tính đến ngày 16/2/2013), vì vậy, trong khi thử nghiệm, nó có thể đáng để thận trọng cho đến khi có nhiều hỗ trợ hơn (người cho biết sự hỗ trợ tích cực của OpenCL như thế nào?). 1.1 là)

+2

Adreno 320 trở lên có OpenCL, ví dụ: Nexus 4 hỗ trợ nó –

+2

Không thiết bị nào của Google kể từ khi tôi tin rằng 4,3 sẽ hiển thị thiết bị đó. – chrisvarnz

+0

Đúng nếu tôi sai, nhưng AFAIK, hoàn toàn không thể sử dụng OpenCL trên các phiên bản Android gần đây và nó sẽ không thay đổi. Google đang đẩy Rendescript trên Android cho loại nhiệm vụ này. – Teovald

4

Bạn nên sử dụng RenderScript Tính thay vì: http://developer.android.com/guide/topics/renderscript/compute.html

Sử dụng OpenCL không phải là rất an toàn vì các thư viện (hoặc khả năng) có thể không có sẵn trên thiết bị mục tiêu. Thành thật mà nói, tôi thậm chí không biết nếu bất kỳ thiết bị Android ra có thực sự hỗ trợ nó. RenderScript sẽ quay trở lại tính toán CPU nếu GPU trên thiết bị không có khả năng thực hiện bất kỳ chương trình nào bạn muốn chạy.

Tuy nhiên, nếu bạn vẫn muốn sử dụng OpenCL, heres một cái gì đó có thể giúp bạn http://www.pgroup.com/lit/articles/insider/v4n2a3.htm

Bạn có thể muốn/cần SDK điện thoại cụ thể (như nVidia Tegra SDK) để có quyền kiểm soát thích hợp.

+3

Điều này không trả lời được câu hỏi. Nếu câu hỏi là làm thế nào để truy cập GPU ... –

+2

@TimChild Câu hỏi là làm thế nào để sử dụng OpenCL cho GPGPU, mà tôi đã trả lời. – silverclaw

+5

Bạn đã không - bạn nói không sử dụng nó khi OP rõ ràng đề cập đến sự thiếu quan tâm của mình trong RenderScript. Tôi tin rằng câu trả lời của @prunge là chính xác hơn. Ngoài ra, PGCL là một sản phẩm thương mại. – Ani

2

Tất cả Qualcomm Adreno 300 serial hỗ trợ OpenCL 1.1 nhúng profile. Để sử dụng OpenCL, bạn cần phát triển mã NDK dưới dạng OpenCL không được hỗ trợ bởi google ở ​​lớp Java. Nó là khá straighforward để viết mã OpenCL nếu bạn biết làm thế nào để phát triển mã NDK. Bạn cần có sẵn libOpenCL.so, có thể tìm nạp từ thiết bị có khả năng OpenCL, chẳng hạn như các thiết bị HTC, Moto X và Samsung Note/Galaxy sử dụng Snapdragon.

5

Kiểm tra bản demo Android OpenCL tại thế giới nhà phát triển Sony, hoàn thành dự án với nguồn, nơi lọc song phương một hình ảnh được thực hiện trong OpenCL và so sánh với triển khai C luồng đơn lẻ. Một số thông tin về loại hỗ trợ nào được mong đợi trong các thiết bị Sony, vv cũng có thể được tìm thấy trong bài viết.

Điều:

Boost the performance of your Android app with OpenCL

Nguồn cho bài viết:

Source to OpenCl Android project

Disclaimer: Tôi là một nhà tư vấn tại Sony Mobile

+0

OpenCL là không có sẵn trên tất cả các thiết bị Android và các nhà phát triển gây hiểu lầm tin rằng đó là một API hợp lý để họ sử dụng để phát triển/phân phối là sai. Vui lòng liên hệ với tôi nếu bạn cần làm rõ thêm. –

+1

Tôi chưa bao giờ nói ngược lại (nó có sẵn trên tất cả các thiết bị) ngược lại nó được nêu rõ trong bài viết (trong trường hợp đó) thiết bị Sony hỗ trợ nó, một số câu trả lời khác ở đây cung cấp thông tin chi tiết về sự hỗ trợ nào trên các thiết bị khác . – Magnus

8

Mặc dù thời gian đã trôi qua kể từ câu hỏi ban đầu đã được hỏi, tôi nghĩ rằng đây vẫn là một câu hỏi cho rất nhiều nhà phát triển.

Có hai khía cạnh trong câu trả lời. Đầu tiên, không may là Google không hỗ trợ OpenCL chính thức.

Thứ hai, may thay, nhiều nhà cung cấp chip cung cấp thư viện của họ để hỗ trợ OpenCL. Hiện tại, hầu hết các điện thoại thông minh hàng đầu và trung cấp (với GPU Qualcomm Adreno, GPU ARM Mali hoặc GPU PowerVR tưởng tượng) đều bao gồm các thư viện OpenCL.

Để sử dụng OpenCL trên Android, có một số bước sau:

  1. kiểm tra nếu có OpenCL thư viện trên thiết bị. Điều này có thể được thực hiện bằng cách sử dụng OpenCL-Z Android. Đây là một công cụ tuyệt vời để kiểm tra tính khả dụng của OpenCL trên thiết bị Android và nó cũng cung cấp các chỉ số hiệu suất tính toán thô, có thể rất hữu ích.

Các thư viện OpenCL cho các nhà cung cấp chip lớn có thể được tìm thấy trong các thiết bị: Sau đây là vị trí của thư viện OpenCL:

Qualcomm Adreno:

/system/vendor/lib/libOpenCL.so 
or /system/lib/libOpenCL.so (older devices) 

ARM Mali:

/system/vendor/lib/egl/libGLES_mali.so 
or /system/lib/egl/libGLES_mali.so 

PowerVR:

/system/vendor/lib/libPVROCL.so 
  1. Viết chương trình OpenCL bạn sử dụng C hoặc C++

  2. Tạo dự án NDK để biên dịch C/C++, và thử nghiệm chúng trên các thiết bị như thực thi.

  3. Tạo giao diện JNI cho các chức năng chương trình NDK của bạn.

  4. Tạo dự án Android, sử dụng các hàm JNI trong mã JAVA để gọi các hàm gốc có liên quan đến OpenCL.

Hướng dẫn sony là nguồn tốt để tham khảo. Các kỹ thuật được trình bày trong hướng dẫn đó có thể được áp dụng cho bất kỳ GPU Qualcomm Adreno nào. Với sự sửa đổi rất nhỏ, mã và các tệp makefiles cũng có thể chạy trên các thiết bị có khả năng OpenCL khác (như Mali và PowerVR).

Hy vọng điều này sẽ hữu ích.

+0

Chỉ cần một lưu ý để nói cảm ơn cho các tài liệu tham khảo OpenCL-Z ... có rất ít thông tin tốt về OpenGLES-OpenCL interop ra khỏi đó! Tôi đánh giá cao nó! –

+0

hmm, tôi nghĩ lý do là vì rất ít người đã từng sử dụng các tính năng inter-cl interop. đặc biệt là chúng tôi có GL shader shader trong OpenGL gần đây hơn, cơ hội chúng ta sẽ thấy gl-cl interop trong một ứng dụng sẽ còn ít hơn. –

+0

BTW, nếu tôi nhớ chính xác, trong chip Samsung Exynos cũ hơn, GPU Mali (T-628) hỗ trợ OpenCL 1.1, tuy nhiên, một số API tương tác GL-CL thậm chí không được triển khai! Tôi biết rằng kể từ khi tôi có một số mã có sử dụng interop GL-CL đệm, mã bị rơi khi thực hiện các API. Sau đó, tôi đã kiểm tra libGLES_mali.so và phát hiện ra các API đó thậm chí không được triển khai. –

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