下载此文档

GPU内核代码分析.doc


文档分类:IT计算机 | 页数:约32页 举报非法文档有奖
1/32
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/32 下载此文档
文档列表 文档介绍
GPU内核代码分析,深入理解linux内核,为什么黑客都用linux,分析linux内核代码,linux内核参数优化,linux 目前内核版本,深入linux内核架构,linux内核版本历史,linux内核开发工程师,linux内核源码剖析pdf基于片上系统的radeon rs780显卡驱动设计
1 平台相关信息 4
2 RS780图形加速相关技术 5
显存空间分配和管理 5
显存空间分配示例 5
显存空间分配管理机制 7
微码加载 11
命令处理器和缓冲区 11
命令处理器 11
环形缓冲区 13
间接缓冲区 14
3 pm4包 17
4 CPU与GPU 的fence同步 24
5 模式设置和测试 26
6 GPU驱动代码分析 27
PCI空间资源访问 27
GPU初始化和启动流程分析 28
GPU实现代码详细分析 29
显存空间初始化 29
显存控制器和输出模式 30
命令控制器设置 31
平台相关信息
在实现中我们需要注意的是龙芯页面大小是16K,GPU页表项大小为8B,每个GART页表项对应一个物理页。另外,系统可以将128M VRAM空间和IO空间全部映射给CPU,因此对CPU而言,可以实现对显存的的管理和操作。GPU详细信息请参考ATI的《》等文档。
RS780图形加速相关技术
rs780显卡驱动的设计(参考DRM/radeon)中,主要涉及到显存空间分配和管理、微码加载、CP&ring buffer、pm4包、CPU与GPU fence同步和模式设置及测试等相关技术。
显存空间分配和管理
显存空间分配示例
经过对系统信息的获取和分析,我们得知GPU的VRAM地址空间范围:从0X40000000到0X48000000;同时,还可以使用GART机制将系统内存空间映射为GPU显存,在我们的设计中仅仅使用了128M,作为测试验证使用(而radeon显卡一般需要分配不少于512M)。并通过PCI BAR0和BAR2寄存器,将PCI设备(此系统上GPU为PCI设备) memory和IO空间映射出来,以供CPU访问。显存分配结构图-。
图- 显存分配结构
现对图-,rs780 radeon 显卡是32位GPU,可以访存空间是4G。硬件设计上,VRAM大小是128M,地址范围:0X40000000~0X47FFFFFF;从0X48000000之上,是我们映射的128M系统主存空间,称为GTT主存空间。这样以来,我们就可以根据使用需求来对显存做具体划分,比如,我们在GTT主存上为ring buffer分配空间,地址范围:0X48004000~0X48103FFF。VRAM的分配较为简单(在此没对显存做管理,仅是最简单的使用方式),直接指定地址就可以,比如,
[FB_ZONE].size = ALIGN( 8 << 20UL, PAGE_SIZE);
[FB_ZONE].gpu = [VRAM_ZONE].gpu;
[FB_ZONE].cpu = [VRAM_ZONE].cpu;
这样,只要我们自己做合理的划分使用,就可以保证访问显存的合理合法性。另一方面,在显存的使用中比较麻烦的是GTT主存部分。这里要将系统主存映射为显存空间,然后才能使用。这其中涉及到分页机制的使用,而且在我们的系统上,CPU和GPU页大小并不一致,CPU页为16K,GPU页为4K(第一节中有介绍),具体关系见图-。
图- 系统内存和显存映射关系
在这样的一个过程,首先要分配连续的系统主存页,然后使用页表机制,将分配的空间映射到GTT主存空间。其中一个主要的函数是static inline void set_gpu_page(uint64_t dma_addr, uint32_t index),用于实现填写页表项的过程。
static inline void set_gpu_page(uint64_t dma_addr, uint32_t index)
{
void __iomem *ptr = (void *)[GTT_TABLE_ZONE].cpu;
dma_addr &= 0xfffffffffffff000ULL;
dma_addr |= R600_PTE_VALID | R600_PTE_SYSTEM | R600_PTE_SNOOPED;
dma_addr |=R600_PTE_READABLE |R600_PTE_WRITEABLE;
writeq(dma_addr, ((void __iomem *)ptr) + (index * 8));
}

GPU内核代码分析 来自淘豆网m.daumloan.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数32
  • 收藏数0 收藏
  • 顶次数0
  • 上传人wzt520728
  • 文件大小517 KB
  • 时间2018-11-27
最近更新