Android 为何引入 Render Script:

3D 可移植  ( 直接用 opengl 也能够移植呀?)

性能

易用性 ( 让 opengl 难入门的人,用 Render Script ?)

Render Script 使用类似 C99 语法  + 一些扩展

眼下使用 Render Script的  APP ( BOOKS, YouTube 等)

Render Script 包括的构件

llvm-rs-cc: 

1) 把 RS 编译为  bitcode

2) 同一时候生成 调用 RS的 Java Layer  层代码

========= 背景知识 =========

对于一个 helloworld 程序

#include <stdio.h>

int main() {
printf("hello world\n");
return 0;
}

能够用 Clang 直接编译。并执行

% clang hello.c -o hello

也能够生成  bitcode

% clang -O3 -emit-llvm hello.c -c -o hello.bc

而后用 lli 来解析执行

% lli hello.bc

能够用bitcode反编译为 llvm 的中间汇编代码

% llvm-dis < hello.bc | less

能够把 bitcode 用 llc 编译为 native的汇编

% llc hello.bc -o hello.s

再用 gcc 编译为 可运行文件

% gcc hello.s -o hello.native 

==================

这里针对的是 C语言。而 RS 是一种类C语言。它通过改写 Clang扩展其语法

libbcc

libcc  llvm-rs-cc 的生成的所有代码都再次使用 JIT生成 machine code (CPU/GPU/DSP)

RS编译得到的 bc 通过 libcc 生成 machine code

而调用 RC 的 Java代码也通过 Dalvik的 JIT生成 Native code

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3Bhbjc2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

libRS ( runtime support)

1) 在 Dalvik Layer  管理  Script

2)  增加支持库 math funcs

总结:

Render Script 提供了一种 3D语言,而且编译平台无关中间代码,节约了APP Launch的时间

Render Script 有学习的代价,但学会应该比用 opengl简单

Render Script 可能还不够成熟

单就GPU, 直接使用 opengl ( 包含 Shader Language) 应该还是足够快的

Opengl 比較复杂,最好使用已经包装 opengl的引擎

參考:

http://llvm.org/docs/GettingStarted.html

https://events.linuxfoundation.org/slides/2011/lfcs/lfcs2011_llvm_liao.pdf

http://llvm.org/docs/BitCodeFormat.html

RenderScript on LLVM笔记的更多相关文章

  1. LLVM 笔记(五)—— LLVM IR

    ilocker:关注 Android 安全(新手) QQ: 2597294287 LLVM 的 IR (Intermediate Representation) 是其设计中的最重要的部分.优化器在进行 ...

  2. LLVM 笔记(四)—— three-phase 设计的收益

    ilocker:关注 Android 安全(新手) QQ: 2597294287 采用 three-phase 的设计方式,便于编译器支持多种语言和多种目标平台. 如果在优化器阶段采用通用的 IR ( ...

  3. LLVM 笔记(二)—— PHI node

    ilocker:关注 Android 安全(新手) QQ: 2597294287 什么是 PHI node? 所有 LLVM 指令都使用 SSA (Static Single Assignment,静 ...

  4. 【LLVM笔记】0x00 初识LLVM 链接类型

    模块结构 LLVM程序是由若干的模块(Module)组成,每个模块中包含有一些函数.全局变量和符号表. 这些模块可能由LLVM的连接器组合在一起,组合的过程将会整合这些函数和全局变量的定义,整合他们的 ...

  5. LLVM 笔记(三)—— 了解传统编译器设计

    ilocker:关注 Android 安全(新手) QQ: 2597294287 传统的静态编译器 (如大多数的 C 语言编译器) 通常将编译工作分为三个阶段,分别由三个组件来完成:前端.优化器和后端 ...

  6. LLVM 笔记(一)—— phi 指令

    ilocker:关注 Android 安全(新手) QQ: 2597294287 语法: <result> = phi <ty> [ <val0>, <lab ...

  7. compiler 学习

    一款强大的编译器LLVM:http://llvm.org/docs/GettingStarted.html#layout http://llvm.org/docs/LangRef.html http: ...

  8. Android高效计算——RenderScript(二)

    3 RenderScript运行时层与反射层 3.1 RenderScript运行时层 RenderScript运行时层是指.rs代码运行时所在的层级.当对安卓项目进行编译的时候,.rs或者.rsh中 ...

  9. Android高效计算——RenderScript(一)

    高效计算——RenderScript RenderScript是安卓平台上很受谷歌推荐的一个高效计算平台,它能够自动把计算任务分配到各个可用的计算核心上,包括CPU,GPU以及DSP等,提供十分高效的 ...

随机推荐

  1. web移动端-弹性盒模型

    (父元素加) : /*新版弹性盒模型*/ /* display: flex; */ /*设置主轴方向为水平方向*/ /* flex-direction: row; */ /*设置主轴方向为垂直方向*/ ...

  2. Linux进程管理之状态(二)

    二.进程的生命周期 进程是一个动态的实体,所以他是有生命的.从创建到消亡,是一个进程的整个生命周期.在这个周期中,进程可能会经历各种不同的状态.一般来说,所有进程都要经历以下的3个状态: 就绪态.指进 ...

  3. MySQL数据类型及后面小括号的意义

    1,数值类型 1.1数值类型的种类 标准 SQL 中的数值类型,包括严格数值类型(INTEGER.SMALLINT.DECIMAL.NUMERIC),以及近似数值数据类型(FLOAT.REAL.DOU ...

  4. maven跳过单元测试-maven.test.skip和skipTests的区别以及部分常用命令

    -DskipTests,不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下. -Dmaven.test.skip=true,不执行测试用例,也不编译测试 ...

  5. 封装一个ViewPager真正的实现图片无限循环滚动带导航点

    效果图: 大家在写项目的过程中常常会碰到须要实现Viewpager里面载入几张图片来循环自己主动轮播的效果,假设不封装一下的话代码分散在activity里面会显得非常乱.并且也不利于我们下次复用,所以 ...

  6. 用LogParser分析Windows日志

    用LogParser分析Windows日志 实战案例分享 假设你已具有上面的基础知识,那么以下为你准备了更加深入的应用操作视频(从安装到使用的全程记录): http://www.tudou.com/p ...

  7. Java中泛型的各种使用

    Java中的泛型的使用: 1.普通的泛型使用 在使用类的时候后面的<>中的类型就是我们确定的类型. public class MyClass1<T> {//此处定义的泛型是T ...

  8. hdoj--2516--取石子游戏(博弈)

    取石子游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  9. [JZOJ3385] [NOIP2013模拟] 黑魔法师之门 解题报告(并查集)

    Description 经过了16个工作日的紧张忙碌,未来的人类终于收集到了足够的能源.然而在与Violet星球的战争中,由于Z副官的愚蠢,地球的领袖applepi被邪恶的黑魔法师Vani囚禁在了Vi ...

  10. The while statement

    Computers are often used to automate repetitive tasks. Repeating identical or similar tasks without ...