gpu内核代码分析

gpu内核代码分析

ID:31726388

大小:254.05 KB

页数:31页

时间:2019-01-17

gpu内核代码分析_第1页
gpu内核代码分析_第2页
gpu内核代码分析_第3页
gpu内核代码分析_第4页
gpu内核代码分析_第5页
资源描述:

《gpu内核代码分析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、基于片上系统的radeonrs780显卡驱动设1平台相关信息22RS780图形加速相关技术32.1显存空间分配和管理32.1.1显存空间分配示例32.1.2显存空间分配管理机制52.2微码加载92.3命令处理器和缓冲区92.3.1命令处理器92.3.2环形缓冲区112.3.3间接缓冲区123pm4包154CPU与GPU的fence同步225模式设置和测试246GPU驱动代码分析256.1PCI空间资源访问256.2GPU初始化和启动流程分析266.3GPU实现代码详细分析276.3.1显存空间初始化276.3.2显存控制器和输出模式286.3.3命令控制器设置29平台相关

2、信息在实现中我们需要注意的是龙芯页面大小是16K,GPU页表项大小为8B,每个GART页表项对应一个物理页。另外,系统可以将128MVRAM空间和IO空间全部映射给CPU,因此对CPU而言,可以实现对显存的的管理和操作。GPU详细信息请参考ATI的《R6xx_R7xx_3D.pdf》等文档。1RS780图形加速相关技术rs780显卡驱动的设计(参考DRM/radeon)中,主要涉及到显存空间分配和管理、微码加载、CP&ringbuffer>pm4包、CPU与GPUfence同步和模式设置及测试等相关技术。1.1显存空间分配和管理2.1.1显存空间分配示例经过对系统信息的获

3、取和分析,我们得知GPU的VRAM地址空间范围:从0X40000000到0X48000000;同时,还可以使用GART机制将系统内存空间映射为GPU显存,在我们的设计中仅仅使用了128M,作为测试验证使用(而radeon显卡一般需要分配不少于512M)o并通过PCIBAR0和BAR2寄存器,将PCI设备(此系统上GPU为PCI设备)memory和IO空间映射出来,以供CPU访问。显存分配结构图-2.1.1c^■w-naoonowMrrrrrri^GTT(128)—10400()-^ib<256K)—wb(16K)Uihlc(256K)Lmp(6Nf)—取斗800400()

4、-^—4800000(M—rK47F0000Ch->—Ox47ECOOOO->-CK47EBF90()>VRAM(128)Fb(8M)图-2.1.1显存分配结构现对图-2.1.1做详细分析,rs780radeon显卡是32位GPU,可以访存空间是4Go硬件设计上,VRAM大小是128M,地址范围:0X40000000〜0X47FFFFFF;从0X48000000之上,是我们映射的128M系统主存空间,称为GTT主存空间。这样以来,我们就可以根据使用需求来对显存做具体划分,比如,我们在GTT主存上为ringbuffer分配空间,地址范围:0X48004000〜0X48103

5、FFF。VRAM的分配较为简单(在此没对显存做管理,仅是最简单的使用方式),直接指定地址就可以,比如,rdev.zone[FB_ZONE].size=ALIGN(8«20UL,PAGE_SIZE);rdev.zone[FB_ZONE].gpu=rdev.zone[VRAM_ZONE].gpu;rdev.zone[FB_ZONE].cpu=rdev.zone[VRAM_ZONE].cpu;这样,只要我们自己做合理的划分使用,就可以保证访问显存的合理合法性。另一方而,在显存的使用中比较麻烦的是GTT主存部分。这里要将系统主存映射为显存空间,然后才能使用。这其中涉及到分页机制的

6、使用,而且在我们的系统上,CPU和GPU页大小并不一致,CPU页为16K,GPU页为4K(第一节中有介绍),具体关系见图・2.2.2。图-2.1.2系统内存和显存映射关系在这样的一个过程,首先要分配连续的系统主存页,然后使用页表机制,将分配的空间映射到GTT主存空间。其中一个主要的函数是staticinlinevoidsetgpupage(uint64tdmaaddr,uint32tindex),用于实现填写页表项的过程。staticinlinevoidset_gpu_page(uint64_tdma_addr,uint32_tindex){void—iomem*ptr=

7、(void*)rdev.zone[GTT_TABLE_ZONE].cpu;dma_addr&二OxfffffffffffffOOOULL;dma_addr

8、=R600_PTE_VALID

9、R600_PTE_SYSTEM

10、R600_PTE_SNOOPED;dma_addr

11、=R600_PTE_READABLE

12、R600_PTE_WRITEABLE;writeq(dma_addr,((void―iomem*)ptx)+(index*8));将dma_addr地址写到以pti•为基址,每次向index索引(偏移)位置写8B(页表项大

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。