常见的编程任务转换为 GPU 的效果如何?
我最近开始开展一个项目,旨在确定如何最好地利用现代显卡的处理能力进行通用编程。 领域通用 GPU 编程 (GPGPU) 似乎非常偏向于包含大量数学运算的科学应用,因为这非常适合 GPU 计算模型。 这一切都很好,但大多数人不会把所有时间都花在运行模拟软件等上,因此我们认为有可能创建一个通用基础,以便为大众轻松构建支持 GPU 的软件。
这就引出了我想提出的问题; 程序执行的最常见的工作类型是什么? 并不要求工作能够很好地转化为 GPU 编程,因为我们愿意接受适度的性能改进(有一点总比没有好,对吧?)。
我们已经想到了几个主题:
- 数据管理 - 操作数据库中的大量数据 以及其他方面。
- 电子表格类型的程序(与上面有些相关)。
- GUI编程(尽管可能无法访问 相关代码)。
- 常见的算法如排序和搜索。
- 通用集合(并将它们与数据操作集成 算法)
还有哪些其他编码任务非常常见? 我怀疑正在编写的许多代码都属于库存管理类别以及跟踪真实“对象”的类别。
由于我没有行业经验,我认为可能有许多基本类型的代码,这些代码的执行频率比我意识到的要多,但它们并没有具体化为外部产品。
高级编程任务以及特定的低级操作都将受到赞赏。
I have recently begun working on a project to establish how best to leverage the processing power available in modern graphics cards for general programming. It seems that the field general purpose GPU programming (GPGPU) has a large bias towards scientific applications with a lot of heavy math as this fits well with the GPU computational model. This is all good and well, but most people don't spend all their time running simulation software and the like so we figured it might be possible to create a common foundation for easily building GPU-enabled software for the masses.
This leads to the question I would like to pose; What are the most common types of work performed by programs? It is not a requirement that the work translates extremely well to GPU programming as we are willing to accept modest performance improvements (Better little than nothing, right?).
There are a couple of subjects we have in mind already:
- Data management - Manipulation of large amounts of data from databases
and otherwise. - Spreadsheet type programs (Is somewhat related to the above).
- GUI programming (Though it might be impossible to get access to the
relevant code). - Common algorithms like sorting and searching.
- Common collections (And integrating them with data manipulation
algorithms)
Which other coding tasks are very common? I suspect a lot of the code being written is of the category of inventory management and otherwise tracking of real 'objects'.
As I have no industry experience I figured there might be a number of basic types of code which is done more often than I realize but which just doesn't materialize as external products.
Both high level programming tasks as well as specific low level operations will be appreciated.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
我做了很多配置的简化。 也就是说,我将配置值的生成/管理包装在 UI 中。 主要好处是我可以控制工作流程和演示,使非技术用户更容易配置应用程序/站点/服务。
I do a lot of simplifying of configuration. That is I wrap the generation/management of configuration values inside a UI. The primary benefit is I can control work flow and presentation to make it simpler for non-techie users to configure apps/sites/services.
使用 GPU 时要考虑的另一件事是总线速度,大多数显卡设计为在将数据从 CPU 传输到 GPU 时具有更高的带宽,因为这是它们大多数时间所做的事情。 返回结果等所需的从 GPU 备份到 CPU 的带宽并不那么快。 因此它们在管道模式下工作得最好。
The other thing to consider when using a GPU is the bus speed, Most Graphics cards are designed to have a higher bandwidth when transferring data from the CPU out to the GPU as that's what they do most of the time. The bandwidth from the GPU back up to the CPU, which is needed to return results etc, isn't as fast. So they work best in a pipelined mode.
您可能想查看 ACM 的 三月/四月问题 < href="http://www.acmqueue.org" rel="nofollow noreferrer">Queue 杂志,其中有几篇关于 GPU 以及如何最好地使用它们的文章(除了当然是图形)。
You might want to take a look at the March/April issue of ACM's Queue magazine, which has several articles on GPUs and how best to use them (besides doing graphics, of course).
现代计算机可以做很多事情,但一点点好处就能发挥很大作用吗? 让我们看看...
Things that modern computers do a lot of, where a little benefit could go a long way? Let's see...
一般编程在 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.
这与我对情况的印象并不太远,但目前我们对此并没有太担心。 我们首先全面了解我们必须关注哪些选项。 完成之后,我们将对它们进行更深入的分析,并找出哪些(如果有的话)是合理的选择。 如果我们最终确定在该领域内不可能做任何事情,而我们只是增加了每个人的电费,那么这也是一个有效的结果。
This isn't too far away from my impression of the situation but at this point we are not concerning ourselves too much with that. We are starting out by getting a broad picture of which options we have to focus on. After that is done we will analyse them a bit deeper and find out which, if any, are plausible options. If we end up determining that it is impossible to do anything within the field, and we are only increasing everybody's electricity bill then that is a valid result as well.