我想知道MonetDB是否使用SIMD(单指令多数据),如果不是,我如何实现它以进行过滤或聚合。
答案 0 :(得分:1)
我不了解MonetDB,但在大多数情况下它会 - 只是因为现代编译器能够检测到可能被矢量化的特定构造。
但是,您的问题非常针对monetDB社区。阅读MonetDB源代码(它可以在monetDB主页上在线获取),找出您想要优化的内容,并与维护该软件的人员交谈。
一般来说,从你相对天真的询问方式来看,我对你能够为这样一个成熟的项目做出很多优化有点怀疑。
答案 1 :(得分:0)
有SIMD指令的实践经验,我可以告诉你:它比你想象的更难。聚合对于编译器自动向量化是可行的,但我怀疑GCC是否这样做(它需要为每个SIMD通道保留一个聚合并最终减少它)。我可以想象ICC会做到这一点。
过滤非常困难(即使是手工)。问题是应用谓词是不够的 - 你必须压缩结果(即抛出不符合条件的值),并且还没有SIMD指令(AVX-2)。有很多非常聪明的数据库人在考虑如何手工完成,即使用内在函数。不幸的是,生成的代码不会进入MonetDB代码库,因为它们会导致可移植性问题。
更一般地说:你能简单解释一下你要解决的问题吗?这似乎有点像(模糊定义的)纯粹学术价值的课堂作业。