常见的编程任务如何很好地转换为GPU?
我最近开始着手一个项目,以确定如何最好地利用现代图形卡中的处理能力进行常规编程。看起来,通用GPU编程(GPGPU)偏向于具有大量数学运算的科学应用程序,因为这很适合GPU计算模型。这一切都很好,但是大多数人并没有花所有的时间来运行仿真软件之类的东西,因此我们认为有可能为轻松构建面向大众的支持GPU的软件创建通用的基础。
这就引出了我想提出的问题;程序执行的最常见的工作类型是什么?由于我们愿意接受适度的性能改进(最好不胜负,对吧?),这并不是要求作品能够很好地转换为GPU编程。
我们已经想到了两个主题:
- 数据管理-处理来自数据库等的大量数据。
- 电子表格类型程序(与上述内容有些相关)。
- GUI编程(尽管可能无法访问相关代码)。
- 常见的算法,例如排序和搜索。
- 通用集合(并将它们与数据处理算法集成)
其他哪些编码任务很常见?我怀疑编写的许多代码属于库存管理类别,否则会跟踪实际的"对象"。
由于我没有行业经验,因此我认为可能存在许多基本类型的代码,它们的执行频率比我想象的要多,但是这些代码不会作为外部产品实现。
高级编程任务以及特定的低级操作都将受到赞赏。
解决方案
回答
我做了很多简化配置的工作。也就是说,我将配置值的生成/管理包装在UI中。我的主要好处是我可以控制工作流程和演示,从而使非技术人员可以更轻松地配置应用程序/站点/服务。
回答
通用编程将可怕地转换为GPU。 GPU致力于以大规模的速率和大规模的并行性在数据流上执行相当简单的任务。它们不能很好地处理常规编程的丰富数据和控制结构,因此毫无用处。
回答
General programming translates terribly to GPUs. GPUs are dedicated to performing fairly simple tasks on streams of data at a massive rate, with massive parallelism. They do not deal well with the rich data and control structures of general programming, and there's no point trying to shoehorn that into them.
这与我对情况的印象并不太遥远,但是在这一点上,我们对此并没有太在意。我们首先从广泛了解我们必须关注的选项开始。完成之后,我们将对它们进行更深入的分析,并找出哪些是可行的选择。如果我们最终确定不可能在野外做任何事,而我们只是增加每个人的电费,那也是一个有效的结果。
回答
我们可能想看一下ACM的Queue杂志的3月/ 4月号,其中有几篇关于GPU的文章以及如何最好地使用它们(当然,除了图形处理之外)。
回答
现代计算机可以做的很多事情,可以从中获得一点好处呢?让我们来看看...
- 数据管理:关系数据库管理可以受益于更快的关系联接(尤其是涉及大量关系的联接)。涉及大量同类数据集。
- 标记化,词法化,解析文本。
- 编译,代码生成。
- 优化(查询,图形等)。
- 加密,解密,密钥生成。
- 页面布局,排版。
- 全文索引。
- 垃圾收集。
回答
使用GPU时要考虑的另一件事是总线速度,大多数图形卡被设计为在将数据从CPU传输到GPU时具有更高的带宽,这是它们大部分时间所做的。从GPU备份到CPU的带宽(返回结果等所需的带宽)不是那么快。因此,它们在流水线模式下效果最佳。