Android上的CPU和GPU是共享内存,为什么有的手机从GPU读取数据还是很慢?
Refrence
- https://www.zhihu.com/question/398806158
- https://docs.aws.amazon.com/zh_cn/lumberyard/latest/userguide/ios-android-performance-guidelines.html
Q:
读取方式:双pbo读取 openGLES3
读取格式:1920*1080的RGBA数据
测试结果(每帧拷贝平均耗时):
魅蓝note3(Helio P10):140ms
华为mate30(麒麟990):13ms
三星s10+(骁龙855):2ms
A:
目前移动GPU架构通常也有GMEM(GPU 内存),虽然很小,只有1M,而且通常是复杂的场景中才会调用,简单场景下是不走GMEM的,即大部分场景下是共享RAM。
CPU与GPU共用RAM,但不总是共用Buffer。如果调用Map函数,此时才会GPU与CPU共用Buffer,map函数是很快的,远小于1ms。
尽管共用RAM,但仍然存在2次传输。也会受限于CPU频率与AXI总线带宽。
- CPU->GPU: GPU通过AXI bus读取textures(比如这个1080P的buffer),shaders等;
- GPU->CPU: GPU渲染后直接写回DDR,这个buffer称为FrameBuffer;
glTexImage2D上传纹理和CPU频率关系较大。我在865平台验证glTexImage2D时,频率调高与正常模式下差距非常大,720P的时间分别为3ms与40ms。
glTexImage2D ( GL_TEXTURE_2D, 0, GL_R8, width, height, 0, GL_RED, GL_UNSIGNED_BYTE, buf_y );
可以将CPU频率调高验证一下,但题主使用了PBO,可能一定程度上减小了CPU频率的影响。
拓展:
GPU 内存 (GMEM)
GPU 内存 (GMEM) 是一种优化,它在 GPU 上使用本地内存来减少 CPU 和 GPU 之间大型纹理的传输。GMEM 可以在以下模式下运行(具体取决于移动设备支持的模式):
- 256 位模式 — 引擎可以将 3 个 GBuffer 渲染目标和深度或模具存储在本地 GPU 像素内存中,同时执行初步 Z 通道、生成 GBuffer、延迟贴花以及延迟雨和雪通道。此模式还在渲染器的延迟着色通道期间将漫反射和高光累积纹理存储在本地 GPU 像素内存中。
- 128 位模式 — 此模式在渲染器的延迟着色通道期间将漫反射和高光累积纹理存储在本地 GPU 像素内存中。与 256 位模式相比,128 位模式提供的性能提升更少。但是,利用 128 位模式,您可以启用在使用 256 位模式时不可用的特定渲染功能。
- 禁用 — 此模式表示 GMEM 不受支持或已在配置文件中禁用。
渲染器使用以下两个 OpenGL 扩展来确定 Android 设备支持哪个 GMEM 模式:
- Framebuffer fetch(256 位模式)
- Pixel Local Storage(128 位模式)
Android上的CPU和GPU是共享内存,为什么有的手机从GPU读取数据还是很慢?相关推荐
- 【转】android如何查看cpu的占用率和内存泄漏
原文网址:http://www.cnblogs.com/yejiurui/p/3472765.html 在分析内存优化的过程中,其中一个最重要的是我们如何查看cpu的占用率和内存的占用率呢,这在一定程 ...
- android如何查看cpu的占用率和内存泄漏
在分析内存优化的过程中,其中一个最重要的是我们如何查看cpu的占用率和内存的占用率呢,这在一定程度上很重要,经过查询资料,研究了一下,暂时了解到大概有以下几种方式,如果哪位高手有更好的办法,或者文中描 ...
- 将读写锁放到共享内存中,实现进程之间对数据的读写访问控制
代码 #include <unistd.h> #include <sys/types.h> #include <sys/ipc.h> #include <sy ...
- python共享内存和分布式实现异步加载数据
训练程序 import numpy as np from multiprocessing import shared_memory import multiprocessing.managers fr ...
- GPU 共享内存bank冲突(shared memory bank conflicts)
GPU 共享内存bank冲突(shared memory bank conflicts) 时间 2016-11-05 21:47:58 FindSpace 原文 http://www.findspac ...
- Android系统匿名共享内存(Anonymous Shared Memory)C++调用接口分析
出自:http://blog.csdn.net/luoshengyang/article/details/6939890 在Android系统中,针对移动设备内存空间有限的特点,提供了一种在进程间共享 ...
- 好文转载 Linux环境进程间通信(五): 共享内存(上)
http://www.ibm.com/developerworks/cn/linux/l-ipc/part5/index1.html 采用共享内存通信的一个显而易见的好处是效率高,因为进程可以直接读写 ...
- 一次共享内存引起的线上事故分析
一.前言 ipquery是一个用于根据ip查询对应信息(地址.天气等)的php模块,基于共享内存实现,为了做到更新数据时不重启php,我们引入了数据动态加载概念.如下图1设计: (图1) 在调用查询接 ...
- Linux环境进程间通信(五): 共享内存(上)
Linux环境进程间通信(五): 共享内存(上) 共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式.两个不同进程A.B共享内存的意思是,同一块物理内存被映射到进程A.B各自的进程地址空间. ...
- [forwarding]Android上dip、dp、px、sp等单位说明
dip device independent pixels(设备独立像素). 不同设备不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA.HVGA和QVGA 推荐使用这个,不依赖像素. 在 ...
最新文章
- 设置linux查看历史命令显示两个小时内,linux系统中history历史命令显示执行日期和时间...
- Make GNN Great Again:图神经网络上的预训练和自监督学习
- 干货丨2017年AI与深度学习要点大全
- Spring中的@ Component,@ Repository和@Service批注有什么区别?
- html footer 布局,详解CSS经典布局之Sticky footer布局
- Windows下安装spark+Hadoop
- POJ3185(简单BFS,主要做测试使用)
- [css] css中的url()要不要加引号?说说你的理解
- rsync 自动创建目录的坑点
- thread/threading——Python多线程入门笔记
- VS2010 旗舰版和专业版 下载
- Word打开目录导航、多页视图显示文章的方法
- 银耳椰椰——Alpha冲刺Day04
- Windows系统跨硬盘合并分区
- 未来10年 人工智能将如何影响淘宝发展?
- 做一个共享浏览器,把seesion克隆到异地实出1号多开(情报通、微信、生意参谋、火币网、腾讯邮箱亲测有效)不是大牌浏览器不敢用!
- c语言魔王语言上机报告,魔王语言报告(带有完整程序).doc
- BAV99与TVS在静电应用的比较
- linux环境编程unp,ubuntu14.04编译unp源码
- 【学习笔记57】轮播图代码的实现