【问题标题】:Is MonetDB using SIMD instructionsMonetDB 是否使用 SIMD 指令
【发布时间】:2015-06-05 07:22:34
【问题描述】:

我想知道 MonetDB 是否使用 SIMD(单指令多数据),如果不是,我如何实现它以进行过滤或聚合。

【问题讨论】:

    标签: simd monetdb


    【解决方案1】:

    我不知道 MonetDB,但在大多数情况下它会 - 仅仅是因为现代编译器能够检测到可能被矢量化的特定结构。

    但是,您的问题非常针对 monetDB 社区。阅读 MonetDB 源代码(可在 monetDB 主页上在线获取),找出您要优化的内容所在的位置,并与维护该软件的人员交谈。

    不过,一般来说,从你相对幼稚的提问方式来看,我有点怀疑你是否能够为这样一个成熟的项目做出大量优化。

    【讨论】:

    • 谢谢,这意味着我需要针对特定​​的平台/处理器架构进行编译,对吧?
    【解决方案2】:

    拥有一些 SIMD 指令的实践经验,我可以告诉您:这比您想象的要难。聚合对于编译器进行自动矢量化是可行的,但我怀疑 GCC 是否会这样做(它需要为每个 SIMD 通道保留一个聚合并最终减少它)。我可以想象 ICC 会这样做。

    过滤非常困难(即使是手动过滤)。问题是应用谓词是不够的 - 你必须压缩结果(即,丢弃不合格的值)并且还没有 SIMD 指令来做到这一点(在 AVX-2 中)。有很多非常聪明的数据库人在考虑如何手动完成,即使用内在函数。不幸的是,生成的代码不会进入 MonetDB 代码库,因为它们会导致可移植性问题。

    更笼统地说:您能否简要解释一下您要解决的问题?这似乎有点像(定义模糊的)纯学术价值的课堂作业。

    【讨论】:

    • 感谢@Holger,我正在尝试改进价格搜索引擎,其中一部分目前是使用多个表和 TSQL 实现的,因此我在非规范化数据后尝试了柱状方法,它就像一个魅力。后来我开始阅读有关 AMD BOLT、OpenCL、CUDA 和 SIMD 的信息,并想知道像 MonetDB 这样的神奇东西是否使用(比如说)AMD BOLT……好吧,我无法想象! :) 正如 Marcus Müller 所说,我离改进 MonetDB 还很遥远,但我正在学习更多东西。你会推荐我什么来开始使用 SIMD?
    • 我认为主要问题是维护。 MonetDB 真的是由一群人(其中大部分是兼职)经营的。有了这样的团队,你能做的事情非常有限,但你仍然拥有一个相当稳定的系统。 - 然而,像 SIMD 这样的东西是为了从你的 CPU 中挤出最后一点性能。你确定你已经用尽了所有其他选项并且需要最后的 30%?
    • 是的,完全同意。对此付出如此多的努力是没有意义的,但是这个问题对我有更好的理解很有帮助。谢谢
    • 有多难?难道你不能只使用pmovmskb、查找表和pshufb 将所有“谓词真”通道打包在寄存器的低端,使用未对齐写入将其附加到输出缓冲区,然后使用pmovmskbpopcnt 获取计数以将输出指针递增.. 我确定我不只是发明了一些激进的东西,所以我错过了什么?
    • 问题是 SIMD 指令的成本更高:如果你把成本加起来,比如 Nehalem,对于这个解决方案(使用 agner.org/optimize/instruction_tables.pdf 作为参考),你最终会得到 7 个周期,包括对 4 个 64 位整数应用谓词。使用标量指令(CMP、MOV、ADD),您最终需要 4 个周期来完成相同的工作。更宽的 SIMD 或更小的值可能会改变平衡。 AVX-512 也有一个紧凑的指令,可以做同样的事情,但我不知道它的成本。
    猜你喜欢
    • 2017-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-22
    • 2013-04-30
    • 1970-01-01
    • 2017-08-19
    • 1970-01-01
    相关资源
    最近更新 更多