我正在考虑聘请某人在 Postgres 中实施 GPU 处理,以加快对位于 ramdisk 上的数据库的顺序扫描。您认为我可以使用这种方法获得多少收益?我可以购买任何类型的显卡。我知道这个问题真的很难,但我对 GPU 知之甚少,所以一个非常粗略的猜测会对我有很大帮助。
编辑:尽管我的兴趣专门针对 Postgres,但我可以用不同的方式问这个问题:“通过使用 GPU 对内存数据库进行顺序扫描,潜在的性能提升有多大”。如果答案是它有 10-50 倍性能的潜力,那么我可以开始更具体地研究这是否也可以在 Postgres 中实现。
你最好在黑客邮件列表上问这个问题,过去有一些关于这个主题的争论。PostgreSQL 开发人员可以告诉您更多有关它的信息。
http://archives.postgresql.org/pgsql-hackers/
要使用 GPU 为 PostgreSQL 获得良好的性能,您需要在 PostgreSQL 中进行某种形式的并行处理。这是 PostgreSQL 目前没有的东西(对于 CPU 和 GPU),但是 Greenplum 已经在他们的 CPU 的 PostgreSQL 产品中实现了这一点。并行处理在 ToDo 列表中,但目前似乎没有人在处理它。向 PostgreSQL 黑客询问当前状态。
我偶然发现了一些可能适用的 sqllite 研究。他们报告说某些应用程序的性能提高了 20-70 倍
不用说,您的里程可能会有所不同。
我认为顺序扫描不会有太大改善。顺序扫描主要是迭代表中的每条记录,并应用返回布尔值的评估函数。选择符合条件的记录进行进一步处理。函数的评估可能类似于 value>3.14 或 sin(value1) > sin(value2) 必须由 SQL 引擎编码为 Cuda/OpenCL 内核,然后在 GPU 中执行。如果您评估用户定义的函数,则必须将整个函数转换为内核。如果该函数访问其他一些数据结构,则不可能将其重写为内核。当然,所有这些转换都发生在幕后,“用户”只负责编写 SQL。更进一步,内存中的数据必须移动到GPU内存空间,作为一个线性内存结构,例如真实的(非 STLed)载体。扣除所有这些惩罚后,根据您的函数类型,您可能会受益于卓越的 GPU 速度。所以只有当你的函数很复杂,你有很多数据时,你才会受益,但该函数仍然可以转换为内核。您的 postgres 实例应该能够即时编写内核,然后调用编译器。
另一方面,如果你想用 GPU 解决特定问题,有人可以直接将其编码为 PostgreSQL 的客户端。