常见的编程任务如何转换成GPU?

jquia 发布于 2018-04-26 cuda 最后更新 2018-04-26 14:54 115 浏览

我最近开始研究一个项目,以确定如何最佳地利用现代显卡中的处理能力进行一般编程。看起来,现场通用GPU编程(GPGPU)对科学应用有很大的偏见,并且有很多繁重的数学,因为这与GPU计算模型非常吻合。这一切都很好,但大多数人并没有花时间运行仿真软件等,所以我们认为有可能为大众轻松构建支持GPU的软件创建一个通用基础。 这导致我想提出的问题;什么是程序执行的最常见的工作类型?由于我们愿意接受适度的性能改进(比没有更好,对吧?),这并不是要求GPU的编程工作非常好。 我们已经想到了一些主题:

  • 数据管理 - 操纵数据库中的大量数据 否则。
  • 电子表格类型的程序(与上述有些相关)。
  • GUI编程(尽管可能无法访问 相关代码)。
  • 排序和搜索等常用算法。
  • 常用集合(并将它们与数据操作集成 算法) 哪些其他编码任务很常见?我怀疑很多正在编写的代码属于库存管理类别,并且对真实的“对象”进行跟踪。 由于我没有行业经验,因此我认为可能存在许多基本类型的代码,这些代码比我意识到的要多得多,但这些代码并没有成为外部产品。 高级编程任务以及特定的低级操作都将受到赞赏。
已邀请:

qodio

赞同来自:

我做了很多简化配置。这就是我在UI中包装配置值的生成/管理。主要好处是我可以控制工作流程和演示文稿,以便非技术用户更简单地配置应用程序/站点/服务。

siusto

赞同来自:

通用编程非常适合GPU。 GPU致力于以巨大的速度在数据流上执行相当简单的任务,并且具有大规模并行性。它们不能很好地处理一般编程的丰富数据和控制结构,并且试图将它们放入其中是没有意义的。

jquia

赞同来自:

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.
这离我对这种情况的印象并不太远,但在这一点上,我们并没有太在意自己。我们首先了解我们必须关注哪些选项。在完成之后,我们会对它们进行更深入的分析,找出哪些是可行的选择。如果我们最终确定在该领域内不可能做任何事情,并且我们只是增加每个人的电费,那么这也是一个有效的结果。

hhic

赞同来自:

您可能需要查看ACM的Queue杂志的March/April issue,其中有几篇关于GPU的文章以及如何最好地使用它们(当然除了做图形)。

fharum

赞同来自:

现代计算机做了很多事情,哪里有一点好处可以走很长的路?让我们来看看...

  • 数据管理:关系数据库管理可以从更快的关系连接(特别是涉及大量关系的连接)中受益。涉及大量的同类数据集。
  • Tokenising,lexing,解析文本。
  • 汇编,代码生成
  • 优化(查询,图表等)。
  • 加密,解密,密钥生成。
  • 页面布局,排版。
  • 全文索引。
  • 垃圾回收。

funde

赞同来自:

使用GPU时要考虑的另一件事是总线速度,大多数图形卡被设计为在将数据从CPU传输到GPU时具有更高的带宽,这是他们大多数时间所做的。从GPU返回到CPU的带宽(这是返回结果所需的带宽)并不快。所以他们在流水线模式下工作得最好。