2017-10-26 13 views
0

Android에서 V8 지원 라이브러리와 기본 RenderScript 런타임으로 작업하는 동안 Java 수준의 동일한 RenderScript 코드가 다른 결과를 생성 할 수 있다는 사실을 발견했습니다.RenderScript와 V8의 차이점 지원 라이브러리

예를 들어 일부 내장 함수가 다르기 때문에 결과 이미지에 약간의 차이가있을 수 있습니다.

지원 라이브러리 버전이 원래 버전보다 "비동기"로 나타났습니다. 네이티브 버전은 "forEach()"메소드를 처리하는 데 약간의 시간이 걸리는 반면 지원 라이브러리는 "forEach()"호출 후에 거의 즉시 반환되고 "copyTo"또는 "finish()"가 호출 될 때 모든 작업을 수행합니다.

"Allocation.createFromBitmap()"이 호출되었을 때 지원 라이브러리는 비트 맵 메모리를 사용하고 VM 외부에 여분의 공간을 할당하지 않으며 기본 버전은 항상 더 많은 공간을 할당합니다. 나는이 결론으로 ​​Qualcom's Trepn profiler을 사용했다.

차이점은 문서화되어 있습니까?

답변

1

RenderScript 지원 라이브러리는 기본적으로 CPU 경로의 기본 RenderScript와 같습니다. 몇 가지 차이가 ​​있지만이

있습니다 지원 lib에 존재하지 않는 개인 안드로이드 API를 (비 NDK의 API)에 따라

  1. 특정 기능.
  2. 커널 (.rs) 파일은 지원 라이브러리 용으로 미리 컴파일되지만 네이티브 RenderScript는 장치에서 JIT 컴파일을 수행합니다.
  3. 장치의 Android 버전이 "renderscriptTargetApi"및 "targetSdkVersion"보다 높은 경우 지원 lib는 기본 RenderScript 경로에서 실행할 수도 있습니다.

메모리 사용량 및 기타 동작의 차이점은 장치의 GPU 드라이버에서 가져올 수 있습니다. GPU는 지정된 스트라이드/정렬을 사용하여 GPU 메모리에 비트 맵을 복사해야 할 수 있습니다.

+0

3 번째 진술을 조금 더 잘 설명 할 수 있습니까? 기기의 Android 버전이 'renderscriptTargetApi'와 같은 경우 어떻게해야합니까? 정확하게 이해하면 높은 "targetSdkVersion"은 네이티브 RenderScript 경로 대신 라이브러리를 사용하는 상대적으로 새로운 장치를 생성합니다. – Petrakeas

+0

정확합니다. RenderScript에는 Allocation, Intrinsics 등과 같은 프레임 워크 API와 런타임 API (https://developer.android.com/guide/topics/renderscript/reference/overview.html)가 있습니다. 일반적으로 renderscriptTargetApi는 필요한 모든 RenderScript 런타임 API를 제공하는 최소 API입니다. targetSdkVersion은 앱이 타겟팅하는 Android 프레임 워크 API입니다. 지원 lib는 런타임 파트와 프레임 워크 파트 모두가 기본 경로에서 실행될 수 있는지 확인해야합니다. –

+0

지원 라이브러리는 GPU 경로를 사용할 수 있습니까? – Petrakeas