带你读《2022技术人的百宝黑皮书》——内存优化: 纹理压缩技术(1)

简介: 带你读《2022技术人的百宝黑皮书》——内存优化: 纹理压缩技术(1)

终端技术篇

推荐语:今年淘宝在终端技术上做了三个很重要的探索:一、前端和移动端在技术上开始融合,例如技术架   构、工具体系的设计上都进行了贯通设计。二、基于Web的研发模式+增强的跨平台容器/引擎+原子化能力的Native原生架构,使前端和移动端在业务迭代上具备同等交付能力,提升效率。三、前端技术深入到业务领域,打破过去局限于技术本身(多样性和深入度)的探索上,使技术能够真正给业务带来价值。期待   这些尝试能够为终端领域带来新的变化。

—— 阿里巴巴资深技术专家 舒文


推荐语:过去的一年里,淘宝用户时长及浏览深度增长对性能体验的诉求愈发强烈,业务加速创新对交付效   率的要求提升,对既有有研发模式的挑战更大,都推动了淘宝终端技术体系不断演进。本篇重点分享在用户体验改善、研发效能破障、架构体系演进等方面的背后思考与创新实践,希望为大家带来一定启发与帮助。

—— 阿里巴巴资深技术专家 弘禹



内存优化: 纹理压缩技术

image.png作者:楚奕

image.png出品:大淘宝技术

 

 

相比普通格式图片,纹理压缩可以节省大量显存和 CPU 解码时间,且对 GPU 友好。

 

背景

 

游戏开发中纹理是内存占用大户,移动设备因为内存有限,问题更加明显。据统计,淘宝互动小程序性能卡口 70% 以上都是因为内存超标,而内存超标的主要原因则是图片素材过多、过大等。

 

我们知道传统的图片文件格式有 PNGJPEG 等,这种类型的图片格式无法直接被 GPU 读取,需要先经过 CPU 解码后再上传到 GPU 使用,解码后的数据以 RGB(A) 形式存储,无压缩。


而纹理压缩顾名思义是一种压缩的纹理格式,它通常会将纹理划分为固定大小的块(block)或者瓦片(til

e),每个块单独进行压缩,整体显存占用更低,并且能直接被 GPU 读取和渲染(无需 CPU 解码),举例来说,一张1024x1024的、JPEG 图片,使用RGBA格式,显存占用在 4M~5.3M 左右,而如果采用 AST_4x4 纹理压缩格式后,理论内存占用约在1.3M左右,相比普通纹理,可以减少70%+内存,具体数据见本文第三部分。

除此之外纹理压缩支持随机访问,随机访问是很重要的特性,因为纹理访问的模式高度随机,只有在渲染时被用到的部分才需要访问到,且无法提前预知其顺序。而且在场景中相邻的像素在纹卫中不一定是相邻的

性能高度依赖于纹理访问的效率。综上,相比普通格式图片,纹理压缩可以节省大量显存和 CPU 解码时间,且对GPU 友好。

在WebGL上,我们可以通过相关 Extension 使用纹理压缩。纹理压缩的格式有很多种(详见下文),并且不同的厂商和机型支持的格式也不完全一致,因此使用压缩纹理前,需要判断设备是否支持。实际开发早,一般不会直接使用WebGL API加载压缩纹理,而是使用游戏引擎,目前主流的游戏引擎如 pixi.js 等均支持纹理压缩,开发者可以不用关心其中细节,只需要跟普通图片一样传入素材地址,剩下的都交给引擎来做。

纹理压缩不是银弹,虽然优势很多,但是其自身也有一些使用限制,主要有:

有损压缩。所有的压缩纹理均为有损压缩,因此需要开发者 or 设计师验证压缩效果是否符合预期:

尺寸要求。部分压缩纹理要求宽高相等(PVRTC),或者宽高必须是2的幂次方,使用有些不便:

体积。压缩纹理虽然显存占用小,但是文件体积通常会比JPEG 更大(看具体压缩格式),IO时问会更长;格式&兼容性问题。压缩纹理格式多样,需要针对不同平台选用不同格式,意味着同一份素材可能需要存储多份格式:

因此,是否需要使用压缩纹理需要开发者进行权衡,比如,游戏首侦资源我们通常希望越快约好,这时可以使用普通纹理,而对于非首顿资源或者出现内存瓶颈时则可以考虑使用纹理压缩。


带你读《2022技术人的百宝黑皮书》——内存优化: 纹理压缩技术(2)https://developer.aliyun.com/article/1340979?groupCode=taobaotech

相关实践学习
在云上部署ChatGLM2-6B大模型(GPU版)
ChatGLM2-6B是由智谱AI及清华KEG实验室于2023年6月发布的中英双语对话开源大模型。通过本实验,可以学习如何配置AIGC开发环境,如何部署ChatGLM2-6B大模型。
相关文章
|
9月前
|
存储 机器学习/深度学习 PyTorch
119_LLM训练的高效内存管理与优化技术:从ZeRO到Flash Attention
大型语言模型(LLM)的训练面临着前所未有的计算和内存挑战。随着模型规模达到数百亿甚至数千亿参数,高效的内存管理成为训练成功的关键因素之一。2025年,LLM训练的内存优化技术已经取得了显著进展,从ZeRO优化器到Flash Attention等创新技术,为训练超大规模模型提供了可能。
894 159
|
KVM 虚拟化
KVM的热添加技术之内存
文章介绍了KVM虚拟化技术中如何通过命令行调整虚拟机内存配置,包括调小和调大内存的步骤,以及一些相关的注意事项。
486 4
KVM的热添加技术之内存
|
11月前
|
机器学习/深度学习 监控 安全
解密虚拟化弹性内存:五大核心技术与实施策略
本文深入解析虚拟化环境中实现内存弹性管理的五大核心技术与实施策略。内容涵盖内存架构演进、关键技术原理、性能优化方法及典型问题解决方案,助力提升虚拟机密度与资源利用率。
449 0
|
人工智能 物联网 C语言
SVDQuant:MIT 推出的扩散模型后训练的量化技术,能够将模型的权重和激活值量化至4位,减少内存占用并加速推理过程
SVDQuant是由MIT研究团队推出的扩散模型后训练量化技术,通过将模型的权重和激活值量化至4位,显著减少了内存占用并加速了推理过程。该技术引入了高精度的低秩分支来吸收量化过程中的异常值,支持多种架构,并能无缝集成低秩适配器(LoRAs),为资源受限设备上的大型扩散模型部署提供了有效的解决方案。
1144 5
SVDQuant:MIT 推出的扩散模型后训练的量化技术,能够将模型的权重和激活值量化至4位,减少内存占用并加速推理过程
ARM64技术 —— MMU处于关闭状态时,内存访问是怎样的?
ARM64技术 —— MMU处于关闭状态时,内存访问是怎样的?
|
12月前
|
存储
阿里云轻量应用服务器收费标准价格表:200Mbps带宽、CPU内存及存储配置详解
阿里云香港轻量应用服务器,200Mbps带宽,免备案,支持多IP及国际线路,月租25元起,年付享8.5折优惠,适用于网站、应用等多种场景。
3353 0
|
12月前
|
存储 缓存 NoSQL
内存管理基础:数据结构的存储方式
数据结构在内存中的存储方式主要包括连续存储、链式存储、索引存储和散列存储。连续存储如数组,数据元素按顺序连续存放,访问速度快但扩展性差;链式存储如链表,通过指针连接分散的节点,便于插入删除但访问效率低;索引存储通过索引表提高查找效率,常用于数据库系统;散列存储如哈希表,通过哈希函数实现快速存取,但需处理冲突。不同场景下应根据访问模式、数据规模和操作频率选择合适的存储结构,甚至结合多种方式以达到最优性能。掌握这些存储机制是构建高效程序和理解高级数据结构的基础。
1101 1
|
12月前
|
存储 弹性计算 固态存储
阿里云服务器配置费用整理,支持一万人CPU内存、公网带宽和存储IO性能全解析
要支撑1万人在线流量,需选择阿里云企业级ECS服务器,如通用型g系列、高主频型hf系列或通用算力型u1实例,配置如16核64G及以上,搭配高带宽与SSD/ESSD云盘,费用约数千元每月。
1523 0
|
存储 编译器 C语言
【C语言篇】数据在内存中的存储(超详细)
浮点数就采⽤下⾯的规则表⽰,即指数E的真实值加上127(或1023),再将有效数字M去掉整数部分的1。
1129 0