我理解如何编写OpenGL / DirectX程序,我知道它背后的数学和概念性东西,但我很好奇GPU-CPU通信如何在低级别上运行。

假设我有一个用C语言编写的OpenGL程序,它显示一个三角形并将摄像机旋转45度。当我编译这个程序时,它会变成一系列ioctl调用,然后gpu驱动程序将相应的命令发送到gpu,其中旋转三角形并设置适当颜色的适当像素的所有逻辑都是有线的在?或者将程序编译成“gpu程序”,加载到gpu并计算旋转等?还是完全不同的东西?

许多人都有这样的疑问, 在查阅若干Stack Overflow技术文刊后做一些肤浅的总结吧:

首先这个问题几乎不可能回答,因为OpenGL本身只是一个前端API,只要实现符合规范并且结果符合这一点,它就可以按照您喜欢的方式完成。

问题可能是:OpenGL驱动程序如何在最低级别上运行。现在再次无法回答这个问题,因为驱动程序与某些硬件密切相关,而开发人员可能会根据这些硬件设计它。

所以问题应该是:“它在OpenGL和图形系统的幕后平均看起来如何?”。让我们从下往上看:

  1. 在最低级别有一些图形设备。现在这些是GPU,它们提供一组寄存器来控制它们的操作(这些寄存器完全取决于设备)具有一些用于着色器的程序存储器,用于输入数据的大容量存储器(顶点,纹理等)以及用于其余部分的I / O通道它接收/发送数据和命令流的系统。

  2. 图形驱动程序跟踪GPU状态以及使用GPU的所有资源应用程序。它还负责转换或任何其他处理应用程序发送的数据(将纹理转换为GPU支持的pixelformat,在GPU的机器代码中编译着色器)。此外,它还为应用程序提供了一些抽象的,依赖于驱

  3. 然后是依赖于驱动程序的OpenGL客户端库/驱动程序。在Windows上,这是由代理通过opengl32.dll加载的,在Unix系统上,它位于两个地方:

    • X11 GLX模块和驱动程序相关的GLX驱动程序
    • 和/usr/lib/libGL.so可能包含一些驱动程序相关的东西,用于直接渲染

    在MacOS X上,这恰好是“OpenGL框架”。

    正是这部分将OpenGL调用的方式转换为对(2)中描述的驱动程序部分中的驱动程序特定函数的调用。

  4. 最后是实际的OpenGL API库,Windows中的opengl32.dll,以及Unix /usr/lib/libGL.so; 这主要是将命令传递给OpenGL实现。

实际沟通的发生方式不能一概而论:

3 < - > 2之间的通信可以通过ioctl,读/写,或者通过将一些存储器映射到进程地址空间并配置MMU以在完成对该存储器的改变时触发一些驱动器代码。这在任何操作系统上都非常相似,因为你总是必须越过内核/用户区边界:最后你会经历一些系统调用。

系统和GPU之间的通信是通过外围总线及其定义的访问方法实现的,因此PCI,AGP,PCI-E等通过端口I / O,内存映射I / O,DMA,IRQ进行工作。

“gpu程序”发挥作用的唯一地方是你的代码是否显式创建了着色器。也就是说,如果您对OpenGL / D3D进行API调用,导致着色器的编译和链接。为此,您(在运行时,而不是C / C ++编译时)生成或加载以某种着色器语言表示着色器的字符串。然后,您通过着色器编译器推送它们,并返回该API中表示该着色器的对象。然后,将一个或多个着色器应用于特定的渲染命令。这些步骤中的每一步都明确地发生在C / C ++代码的指导下,如前所述,它在CPU上运行。

硬件加速原理分析探索相关推荐

  1. Android 系统(175)---Android硬件加速原理与实现简介

    Android硬件加速原理与实现简介 在手机客户端尤其是Android应用的开发过程中,我们经常会接触到"硬件加速"这个词.由于操作系统对底层软硬件封装非常完善,上层软件开发者往往 ...

  2. Android硬件加速原理与实现

    一 概述 在手机客户端尤其是 Android 应用开发过程中,我们经常会接触到"硬件加速"这个概念.由于操作系统对底层软硬件封装非常完善,上层软件开发者往往对硬件加速的底层原理了解 ...

  3. Android硬件加速原理与实现简介

    转载自:https://tech.meituan.com/hardware-accelerate.html 在手机客户端尤其是Android应用的开发过程中,我们经常会接触到"硬件加速&qu ...

  4. Android硬件加速原理与实现简介-美团技术团队 ​

    在手机客户端尤其是Android应用的开发过程中,我们经常会接触到"硬件加速"这个词.由于操作系统对底层软硬件封装非常完善,上层软件开发者往往对硬件加速的底层原理了解很少,也不清楚 ...

  5. 迅为iMX8M Mini开发板硬件接口原理分析

    iMX8M Mini开发板参数: CPU:NXP i.MX8M Mini 主频:1.8GHz 架构:四核Cortex-A53,单核Cortex-M4 PMIC:PCA9450A电源管理 PCA9450 ...

  6. MEC硬件加速技术分析

    [摘  要]为了解决边缘机房的供电.散热以及承重能力有限,无法为MEC提供足够的计算资源的问题,分析了MEC在第三方应用,OVS和虚拟化用户面的性能瓶颈,提供硬件加速的方法.研究表明,通过上述方法,可 ...

  7. fpga的硬件加速原理

    what:fpga可做什么加速 why:为什么fpga可以做加速,有什么优势 how:怎样做加速 一.fpga可做什么加速 图像.信号.深度学习等 二.为什么fpga可以做加速,有什么优势 fpga有 ...

  8. Android 屏幕绘制机制及硬件加速

    文章目录 前言 硬件加速 CPU / GPU结构对比 OpenGL Android 的图形组件 画笔 画纸 画板 合成及显示 CPU / GPU 绘制过程 软件绘制 硬件加速 视图构建 额外点 硬件加 ...

  9. ffmpeg使用硬件加速hwaccel、cuvid、h264_cuvid、h264_nvenc

    文章目录 ffmpeg支持硬件加速的原理 所用环境说明 ffmpeg使用硬件加速 安装nvidia驱动 安装cuda 加入header 安装pkgconfig 开始配置 在ffmpeg中看如何使用硬件 ...

  10. CSS动画开启硬件加速

    (一)前言 在需要高频交互的css动画时候,我们就需要考虑使用CSS3 硬件加速. 首先,CSS3 硬件加速又叫做 GPU 加速,是利用 GPU 进行渲染, 减少 CPU 操作的一种优化方案.由于 G ...

最新文章

  1. 用网抑云的方式打开程序员的生活......
  2. 【Android游戏开发之一】设置全屏以及绘画简单的图形
  3. linux 日志乱码_这些 Linux 技巧大大提高你的工作效率
  4. Python数据结构与算法(1.1)——数据结构与算法导论
  5. postgresql 分割_三分钟解析postgresql提权
  6. 语音识别代码_Povey正式出任小米语音首席科学家,小米移动端框架MACE全面支持Kaldi...
  7. 【ACL2019】看 NLP 未来发展趋势
  8. 金陵科技学院c语言实验报告册,C语言实验报告册a
  9. uva1589 Xiangqi
  10. 微信公众号系列之创建新浪云平台应用
  11. 讯时网关部分话机无法注册问题
  12. 使用命令行浏览器在 Linux 终端上网浏览
  13. SpringBoot部署子工程java -jar启动时报错:xxxxxxx.jar中没有主清单属性
  14. 分享一个外国免费在线领各类软件激活码的网站
  15. androidx和android的区别,Android X 详解
  16. 氨酰胺酶(glutaminase, GLS) 活性测定试剂盒说明书
  17. 概率——2016青岛icpc区域赛 C - Pocky HDU - 5984 公式推导
  18. 学习日记20160915
  19. 生物信息学 linux版本,学生物的为啥要学点生物信息学!
  20. 上海初中计算机课程大纲,《上海市普通中小学校教育装备配备指南(试行稿)》解读...

热门文章

  1. html页面中的快捷键设置
  2. unity3d 角色 武器 动画 和 blender 工作流
  3. 西湖论剑——指鹿为马
  4. 2019年春季学期《C语言程序设计II》助教注意事项
  5. 我的世界服务器查延迟指令,服务器新手服主必看指令
  6. Windows Vista 和 Windows Server 2008 在内存管理方面的功能增强(翻译)
  7. 对udp组播流(MPTS)进行简单的收录
  8. 基于python的智能家居系统_基于MicroPython的智能家居实验平台设计
  9. 计算机应用与管理四季,[计算机软件及应用]四季PPT.ppt
  10. 日照-公积金贷款逾期预测-比赛总结