2015-03-31 67 views

回答

0

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

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

在一个更一般的说明:你能简要解释你想解决什么问题吗?这看起来有点像纯粹的学术价值的(模糊定义的)班级任务。

+0

感谢@Holger,我试图改进价格搜索引擎,其中一部分目前是使用多个表和TSQL实现的,所以我在非规范化数据之后尝试使用柱状方法,并且它像魅力一样工作。后来我开始阅读AMD BOLT,OpenCL,CUDA和SIMD,并想知道像MonetDB这样的惊人之作(比方说)AMD BOLT ......好吧,我不能想象! :)正如MarcusMüller所说,我对改进MonetDB很不满意,但是我正在继续学习更多。你会推荐我开始玩SIMD吗? – GBrian 2015-04-01 06:38:22

+0

我认为主要的问题是维护。 MonetDB确实是由一群人组成的(其中大部分是兼职)。有了这样的团队,你可以做的事情非常有限,而且仍然具有相当稳定的系统。 - 然而,像SIMD这样的东西是为了将性能的最后一点挤出CPU。你确定你已经用尽了所有其他选项,你需要最后的30%? – Holger 2015-04-01 14:32:03

+0

是的,完全同意。在这方面做出这么多努力没有意义,但这个问题对我有很大的帮助,可以更好地理解。谢谢 – GBrian 2015-04-02 08:42:33

1

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

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

一般来说,从你相对天真的提问方式来看,我会怀疑你能够为这样一个成熟的项目做出很多优化。

+0

谢谢,这意味着我需要为特定的平台/处理器架构进行编译,对吧? – GBrian 2015-03-31 20:52:55