Nvidia Cuda Program - 是我适合 Cuda 架构的问题



我一直在阅读有关 Nvidia Cuda 的文章,我看到一些关于 SO 的问题,人们已经回答了他们包含"您的问题不适合在 GPU 上运行"的评论。

在我的办公室,我们有一个数据库,里面有大量的记录可供我们查询,而且可能需要很长时间。我们已经实现了 SELECT DISTINCT 的 SQL 查询,或者它们对值应用大写函数。作为对 Cuda 的介绍,我想过编写一个程序,该程序可以在 GPU 上获取所有字符串并将它们大写。

我一直在读一本关于 Cuda 的书,作者谈到试图让 GPU 内核尽可能多地执行,以隐藏通过 PCI 总线读取数据的延迟或将内容放入全局内存。由于内存大小非常小,并且由于我有数百万个不同的单词,因此我自然会使总线饱和并耗尽GPU内核。

这是一个不会从显卡而不是 CPU 获得出色性能提升的问题吗?

谢谢

美杰

我们已经实现了 SELECT DISTINCT 的 SQL 查询,或者它们对值应用大写函数。

您是否考虑过在表中添加一列,其中包含预先计算的大写字符串版本?

我倾向于认为,如果您的数据库完全在 RAM 中并且查询仍然需要"永远",那么您的数据库可能没有正确的结构和索引。检查查询计划。

我认为,在正常情况下,您的选择被索引整齐地覆盖,您将无法使用 GPU 进行优化。但也许有些东西可以针对 GPU 进行优化,例如需要表扫描的查询,例如带有通配符的 LIKE 查询和根据计算(小于值等)选择行的查询。当联接列具有许多重复值时,甚至可能具有许多联接的查询之类的东西。

这种实现的关键是在 GPU 上保留数据库中某些数据的镜像,并将其与数据库保持同步。然后对该数据运行并行约简等操作,以提供行 ID,然后用于对常规数据库进行选择。

不过,在采取这一步骤之前,我将探索使用时空权衡的日期库查询优化的无数可能性。

全局内存访问中,您将遇到相当大的瓶颈,因为您的操作/传输比率为 O(1)。

可能更值得在GPU上进行比较,因为它的操作/传输比率要大得多。

当您将字符串加载到共享内存中以执行此操作时,您还可以将其大写,有效地包括您之前想要执行的操作,以及更多。

我不禁觉得基于 CPU 的实现可能会给你带来更好的性能。至少,它会让你少一些头痛......

最新更新