10 февраля 2011 в 22:05

Введение в Renderscript перевод

Renderscript — это важная особенность Honeycomb, которая не обсуждалась ранее. Всего будет две статьи, эта — простой обзор Renderscript, следующая же будет содержать больше технических подробностей и простой пример.

Renderscript — это новый API, направленный на высокую производительность при 3D рендеринге и сложных вычислительных операциях. Renderscript будет интересен разработчикам, пытающимся максимизировать производительность их приложений и чувствующим себя комфортно при работе на низком уровне. Для разработчиков доступны три инструмента: простой API для 3D рендеринга, поддерживающего аппаратное ускорение, API для моделирования сложных вычислений (похожий на CUDA), и язык стандарта близкого к C99.

Renderscript уже использовался ранее для создания новых, более красивых визуально, приложений Books и YouTube. Также, он уже использовался для написания живых обоев, поставляемых с Honeycomb.

Улучшение производительности достигается путем выполнения нативного кода на устройстве. Однако, в отличии от NDK, это решение кроссплатформенно. Язык разработки для Renderscript — это C99 с некоторыми расширениями, во время процесса разработки, он компилируется в аппаратно-независимом промежуточном формате и размещается в пакете приложения. Когда приложение запускается, то скрипт компилируется в машинный код и оптимизируется. Это позволяет избежать проблем, связанных с необходимостью выбирать какую-то определенную машинную архитектуру.

Renderscript не предназначен для замены существующего высокоуровневого API, его следует использовать в тех случаях, когда текущая необходимость в производительности не обеспечивается с помощью API.

Может показаться интересным, что ранее ничего не говорилось о том, где выполняется код — на GPU или CPU. Причина в том, что это определяется на устройстве во время выполнения. Когда есть соответствующая аппаратная поддержка, то простые скрипты могут выполняться на GPU в качестве небольшой вычислительной нагрузки. Более сложные скрипты запускаются на CPU (или на нескольких CPU). Роль CPU в данном случае также заключается в том, чтобы обеспечить резерв, если нет дополнительной аппаратной поддержки в виде подходящих GPU. На самом деле, всё это должно быть незаметно для разработчика. Вообще, в дальнейшем простые скрипты смогут запускаться во многих местах, но пока всё что нужно на практике — распределить нагрузку между несколькими CPU, поддерживаемыми на устройстве.



Это видео получено перехватом изображения с HDMI выхода планшета на Honeycomb. Оно показывает Renderscript в работе. Здесь мы представляем «брутфорсную» реализацию физики для 900 частиц. Вычислительный скрипт запускает каждый кадр картинки и автоматически использует преимущество двух ядер. Как только симуляция физики завершается, второй графический скрипт рендерит изображение. В видео мы толкаем одну из больших частиц, для того чтобы показать их взаимодействие. После этого, наклоняем планшет, чтобы часть работы за нас сделала гравитация. Весь этот процесс демонстрирует неплохую вычислительную мощь нового процессора A9.

На Honeycomb мы перешли с GL ES 1.1 на 2.0 в качестве рендера для Renderscript. С версией 2.0 мы смогли добавить программную поддержку шейдеров, загрузку 3D моделей, и более эффективное управление памятью. Однако, самое важное изменение — это то, что Renderscript и сопутствующие инструменты теперь общедоступны.

image


Скриншот демонстрирует одно из наших тестовых приложений. Приложение реализует трехмерную сцену, которая демонстрирует рекурсивный вызов скриптов. Андроиды, изображенные на скриншоте, загружаются из A3D файла, созданного в Maya и транслированного из файла Collada. A3D — это формат для хранения объектов Renderscript на устройстве.

Позднее, будет представлена статья с информацией более технического характера и примером кода.
Перевод: R. Jason Sams
Тимур Ибремпашаев @Tibr
карма
89,7
рейтинг 0,0
Программист
Самое читаемое Разработка

Комментарии (3)

  • +3
    Вообще-то там язык не C99, а C-like всего лишь, с кучей ограничений (что естественно для предназначенного выполнятся на GPU). www.inter-fuser.com/2009/11/android-renderscript-more-info-and.html — тут более подробно.

    Странно, почему Google не захотела OpenCL.
    • 0
      Вы уверены, что за год там ничего не изменилось?
      • 0
        Уверен, что скорее всего, не изменилось в этом отношении. Потому что в SoC'ах GPU делит с процессором память, и если дать пользователю фигачить шейдеры на C99, то это серьёзная угроза безопасности в системе (свободный доступ к памяти, всё такое). Вполне может быть так, что в некоторых Andro-фонах, MMU нет даже у процессора, поэтому… C99 не годится.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.