RenderScript on LLVM笔记
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笔记的更多相关文章
- LLVM 笔记(五)—— LLVM IR
ilocker:关注 Android 安全(新手) QQ: 2597294287 LLVM 的 IR (Intermediate Representation) 是其设计中的最重要的部分.优化器在进行 ...
- LLVM 笔记(四)—— three-phase 设计的收益
ilocker:关注 Android 安全(新手) QQ: 2597294287 采用 three-phase 的设计方式,便于编译器支持多种语言和多种目标平台. 如果在优化器阶段采用通用的 IR ( ...
- LLVM 笔记(二)—— PHI node
ilocker:关注 Android 安全(新手) QQ: 2597294287 什么是 PHI node? 所有 LLVM 指令都使用 SSA (Static Single Assignment,静 ...
- 【LLVM笔记】0x00 初识LLVM 链接类型
模块结构 LLVM程序是由若干的模块(Module)组成,每个模块中包含有一些函数.全局变量和符号表. 这些模块可能由LLVM的连接器组合在一起,组合的过程将会整合这些函数和全局变量的定义,整合他们的 ...
- LLVM 笔记(三)—— 了解传统编译器设计
ilocker:关注 Android 安全(新手) QQ: 2597294287 传统的静态编译器 (如大多数的 C 语言编译器) 通常将编译工作分为三个阶段,分别由三个组件来完成:前端.优化器和后端 ...
- LLVM 笔记(一)—— phi 指令
ilocker:关注 Android 安全(新手) QQ: 2597294287 语法: <result> = phi <ty> [ <val0>, <lab ...
- compiler 学习
一款强大的编译器LLVM:http://llvm.org/docs/GettingStarted.html#layout http://llvm.org/docs/LangRef.html http: ...
- Android高效计算——RenderScript(二)
3 RenderScript运行时层与反射层 3.1 RenderScript运行时层 RenderScript运行时层是指.rs代码运行时所在的层级.当对安卓项目进行编译的时候,.rs或者.rsh中 ...
- Android高效计算——RenderScript(一)
高效计算——RenderScript RenderScript是安卓平台上很受谷歌推荐的一个高效计算平台,它能够自动把计算任务分配到各个可用的计算核心上,包括CPU,GPU以及DSP等,提供十分高效的 ...
随机推荐
- 4----COM:a Generative Model for group recommendation(组推荐的一种生成模型)
1.摘要: 组推荐的一个挑战性问题:因为不同组的成员就有不同的偏好,如何平衡这些组员的偏好是一个难以解决的问题. 在本文中,作者提出了一个COM的概率模型来建立组活动生成过程. 直觉上: 一个组中的用 ...
- logging.config模块---使用配置文件管理logger
logging配置文件 一.使用到的模块: logging.config 官方文档: https://docs.python.org/3/library/logging.config.html 非官方 ...
- MySQL 高可用:mysql+mycat实现数据库分片(分库分表)
本文引用于http://blog.csdn.net/kk185800961/article/details/51147029 MySQL 高可用:mysql+mycat实现数据库分片(分库分表) 什么 ...
- React 中组件间通信的几种方式
在使用 React 的过程中,不可避免的需要组件间进行消息传递(通信),组件间通信大体有下面几种情况: 父组件向子组件通信 子组件向父组件通信 非嵌套组件间通信 跨级组件之间通信 1.父组件向子组件通 ...
- docker mysql镜像忽略表名大小写
原文:docker mysql镜像忽略表名大小写 1.安装mysql镜像 docker pull mysql/mysql-server 2.运行mysql docker run --net=host ...
- CSDN 轻松周赛赛题:能否被8整除
轻松周赛赛题:能否被8整除 题目详情 给定一个非负整数,问能否重排它的全部数字,使得重排后的数能被8整除. 输入格式: 多组数据,每组数据是一个非负整数.非负整数的位数不超过10000位. 输出格式 ...
- Ignatius and the Princess III(杭电1028)(母函数)
Ignatius and the Princess III Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...
- 每一个人都懂得敏捷开发 (软件project), 为何产品开发的效率与质量还是这么的烂?
敏捷开发(软件project)是 "设计" 出来的.不是 "学" 来的-- 很多人都一直在质疑敏捷开发能否提高效率与质量? 更有不少人以嘲讽.不屑的口吻看待软件 ...
- nyoj--1170--最大的数(数学技巧)
最大的数 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 小明和小红在打赌说自己数学学的好,于是小花就给他们出题了,考考他们谁NB,题目是这样的给你N个 ...
- 人生之清单(list of life)
人生要走走停停,想想记记,修修改改,再向前走.国家工程,公平正义,一腔热血,都很容易燃起来,热血起来. 1. 没得选,有得选,怎么办 没得选 原生家庭,自己怎么生,怎样的父母: 遇见谁,会有怎样的对白 ...