优缺点:
优点: A 可移植性,设计运行于多种不同的处理器CPU,GPU,DSP等。 B 高性能的计算操作API. C 易用,简化了操作。
缺点:A 复杂度高,新的API。B 调试困难,因为多处理器支持。
系统结构:RS运行于底层并与VM通信。App同样运行于VM中,VM保留所有对RS内存的控制,VM分配的内存通过绑定让RS层可以访问,对于RS的调用都是异步的。
A Renderscript runtime API。
a 内存分配请求
b 大量的重载了多个版本的关于矢量和标量类型数学函数,一些可用操作诸如加、乘、点乘和叉乘,以及原子算术和比较函数等等
b 原始数据与向量的转换,矩阵转换,数据与时间转换的方法。
c Renderscript支持的数据类型和结构,例如定义二维,三维或四维向量的Vector类型
d 日志函数
B Reflected layer(反射层)API
反射的东西:
a 每个.rs生成一个类,里面包括这些: 非静态方法:不能有返回值,异步执行,想要返回值请用rsSendToClient() 非静态全局变量:get 与 set方法,如果是const就只有set方法。 全局指针: bind 与get
b 每个struct结构体生成一个类.可以在java分配内存矢量化。生成这些: 1 重载构造函数,可以指定实例个数与特定的内存空间。
2 静态内部内item.
3 get and set field
4 createElement
5 resize
6 copyAll
C Android framework API
内存处理
非静态全局变量:在rs编译时分配内存,vm可以读写,如果在rs层被初始化,会传播到VM。
A 分配和绑定动态内存到RS
B 读写内存
a 读写全局变量:在rs层做的修改不会传播到framework layer,反之却不同。
b 读写全局指针:双向自动传播
知识点:
A RS会测量设备的处理器数量,调用rsForEach函数就自动的在设备的多个处理器中划分工作。
B 用__attribute__((kernel))自定义root函数。
C 关于浮点精度的三个级别:#pragma rs_fp_full(IEEE 754-2008标准),#pragma rs_fp_relaxed,#pragma rs_fp_imprecise
D 内嵌了一下实现:融合,模糊,颜 {MOD}矩阵,3x3卷积,5x5卷积,每个通道查找表,android YUV转rgb。
E 在一个脚本里面通过调用rsForEach函数调用另个一个脚本,这时,UserData_t参数比较有用。
F 用ScriptGroup.Builder创建Script Groups。
G rs代码首先被llvm编译成字节码,然后在运行的时候,被另一个llvm编译成机器码
H 关于包含指针的结构体。