Electronic Joint Business

Solution for E-Business

gpu

Linux 图形系统和 AMD R600 显卡编程(1) —— Linux环境下的图形系统简介

Linux/Unix 环境下最早的图形系统是 Xorg 图形系统,Xorg 图形系统通过扩展的方式以适应显卡和桌面图形发展的需要,然而随着软硬件的发展,特别是嵌入式系统的发展,Xorg 显得庞大而落后。开源社区开发开发了一些新的图形系统,比如 Wayland 图形系统。

由于图形系统、3D 图形本身的复杂性以及历史原因,Linux 图形系统相关的源码庞大而且复杂,而且缺少学习的资料(所有源代码分析或者驱动编程的书籍都很少介绍显卡驱动)。在后续一系列文章中,笔者将从对 AMD 硬件编程的角度出发对部分问题做一个简单的介绍,当然,这种介绍是很初级的,旨在希望能够对初学着有所帮助。

内核 DRM、Xorg 以及 Mesa 三部分加起来的代码和整个 Linux 内核的体量是差不多大的。而且现代的显卡上的 GPU 的复杂程度在一定程度上可以和 CPU 相聘美,从程序员的角度看,操作系统(CPU 的驱动)包含的许多功能在 GPU 驱动上都能够找到。比如说,GPU 有自己的指令系统,着色器程序(GLSL、HLSL、Cg 这类着色语言)需要编译成 GPU 的指令集,然后才能够在 GPU 上运行,符合着色语言规范的 3D 驱动都包含这样的一个编译器。3D 应用程序需要使用大量内存,GPU 在进行运算时需要访问这些内存,所以 GPU 访问内存时也使用一套和 CPU 页表一样的机制。另外,在中断系统上,GPU 和 CPU 也有相似之处。后面的一些内容将会陆续对这些问题做一个简单的介绍。

传统上 Linux 是一个宏内核,设备驱动大部分都是包含在内核里面的,内核代码最庞大的部分就是 drivers 目录,如果你从 kernel.org 上面下载一个内核源码,你会发现编译时间大部分都耗在编译设备驱动上。

对于微内核操作系统,设备驱动不是内核的部分。不过出于调试方便以及其他一些原因,Linux 操作系统上面的一些驱动是放在核外的。比如说打印机、扫描仪这类设备,当前的打印机扫描仪通常都是通过 USB 接口连接到计算机上的,对于这些设备的 Linux 驱动,除了 USB 核心部分在内核,这些打印机扫描仪本身的驱动都是在核外的。Linux 上面的打印机使用 CUPS 系统,CUPS 运行在核外,其驱动是按照 CUPS 的接口来开发的。Linux上面的扫描仪使用的则是运行在核外的 sane 系统,其驱动是以动态链接库的形式存在的。另外一类核外的驱动是图形系统的驱动,由于图形系统、显卡本身比较复杂,加上一些历史原因,图形系统的驱动在核内核外都有,且显卡驱动最主要的部分在核外。

>>> 阅读全文

 

, , , , , , , ,

GPUView 的使用

文章评价:
GPUView 是我(原文作者: Matt )和 Steve Pronovost 在微软实习期间开发的工具,该工具可以用来检查电脑上的图形应用程序、Windows 图形内核、 显卡驱动程序、 显卡和 CPU 内核间的交互。和一些标准分析工具 IceCap、Vtune 或图形 API 分析工具如 PIX 不同,该工具的视角别具一格,它密切关注 CPU 和 GPU 间的交互,从而判断应用程序的性能是受限于 CPU 、GPU 或者二者,进而了解需要对哪一部分进行调整才能提高资源利用率。

GPUView 可以帮助我们解决以下问题:1

  • 为什么会错过垂直同步刷新?
  • 在 GPU 渲染新的图形表面是否占住了 GPU 导致帧丢失?
  • 是应该优化 CPU 代码来改善性能,还是应该降低 GPU 负担?
  • 在显示帧之间 GPU 是否已经早早收到图形任务,还是 GPU 一直空闲在那里等待 CPU 代码?

在本文的第一部分我们会关注如何使用并了解 GPUView ,在文章的第二部分我们会看一些实际的例子,学习用 GPUView 来查看某些实际游戏的性能问题。

GPUView 是 Windows 7 SDK 的一部分。下载并安装好 SDK 之后,你可以到“ C:\\Program Files\\Microsoft SDKs\\Windows\\v7.0\\bin” 目录下执行 wpt_x64.msi 或者 wpt_x86.msi 来安装带有 GPUView 的 Windows Performance Toolkit。

要使用 GPUView,你需要用管理员权限打开命令行,然后运行 Log.cmd 来启动事件日志。再次运行 Log.cmd 就会停止日志记录。Log.cmd 会生成 Windows 的几个事件跟踪 (*.etl) 文件;这些不同事件流会被合并到单个文件中,即 Merged.etl,GPUView 会读取该文件。下面是一些示例事件:

>>> 阅读全文

 

, ,

用 WebGL 和 HTML5 创建三维分子查看器

简介
许多人对 OpenGL 相当熟悉,但是对使用 WebGL 就有一点陌生。然而,许多 OpenGL 的概念和格式都可以应用到 WebGL 上。本文打算在 WebGL 编程方面做出一些尝试,可以让你了解 WebGL 的一些难易程度。象我这种略知 OpenGL 而对 WebGL 完全没概念的新手,这个例子也只花了我不到 6 个小时。现在有许多用 Java applet 或 C++ 程序写好的查看器。本项目尝试用 Javascript 和 WebGL 来完成同样的工作。让人惊讶的是,这一点也不难。

背景
WebGL 是一种 3D 绘图标准,这种绘图技术标准允许把 JavaScript 和 OpenGL ES 2.0 结合在一起,通过增加 OpenGL ES 2.0 的一个 JavaScript 绑定,WebGL 可以为 HTML5 Canvas 提供硬件 3D 加速渲染,这样 Web 开发人员就可以借助系统显卡来在浏览器里更流畅地展示 3D 场景和模型了,还能创建复杂的导航和数据视觉化。显然,WebGL 技术标准免去了开发网页专用渲染插件的麻烦,可被用于创建具有复杂3D结构的网站页面,甚至可以用来设计 3D 网页游戏等等。

如何使用本文的代码

将本文的代码安装到 Web 服务器上,你可以选用本地服务器,也可以选择远程服务器。打开 index.html ,选择 Choose File 按钮,从本机选一个 PDB 文件,然后你就可以看到分子了。

这是一些快捷键:

>>> 阅读全文

 

, , , , , ,