我一直在阅读有关 Nvidia Cuda 的内容,并且在 SO 上看到了一些问题,人们已经回答了这些问题,其中包括“您的问题不适合在 GPU 上运行”的评论。
在我的办公室,我们有一个数据库,其中有大量记录供我们查询,这可能需要很长时间。我们已经实现了 SELECT DISTINCT 的 SQL 查询,或者它们对值应用大写函数。作为 Cuda 的介绍,我考虑编写一个程序,可以在 GPU 上获取所有字符串并将其大写。
我一直在读一本关于 Cuda 的书,其中作者谈到尝试让 GPU 核心尽可能多地执行,以隐藏通过 PCI 总线读取数据或将数据放入全局内存的延迟。由于内存大小非常小,而且我有数百万个不同的单词,自然会使总线饱和并使 GPU 核心挨饿。
这个问题是否会导致显卡(而不是 CPU)无法获得出色的性能提升?
谢谢
米杰
最佳答案
We've implemented SQL queries that SELECT DISTINCT or they apply an uppercase function against a value.
您是否考虑过在表中添加一列,其中包含预先计算的字符串的大写版本?
我倾向于认为,如果您的数据库完全位于 RAM 中并且查询仍然“永远”发生,那么您的数据库可能无法正确构建和索引。检查您的查询计划。
我认为,在正常情况下,如果您的选择被索引整齐地覆盖,您将无法使用 GPU 进行优化。但也许有些东西可以针对 GPU 进行优化,例如需要表扫描的查询,例如带有通配符的 LIKE 查询以及基于计算(值小于等)选择行的查询。当连接列有许多重复值时,甚至可能会进行诸如具有许多连接的查询之类的事情。
这种实现的关键是在 GPU 上保留数据库中某些数据的镜像,并使其与数据库保持同步。然后对该数据运行并行缩减等操作,以得出行 ID,然后用于针对常规数据库进行选择。
在采取这样的步骤之前,我会探索使用时空权衡的数据库查询优化的无数可能性。
关于cuda - Nvidia Cuda 程序 - 我的问题适合 Cuda 架构吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10107312/