我已经搜索了几天,想找到有关使用GPU加速LINQ查询的可靠信息。
到目前为止,我已经“调查”过以下技术:
- Microsoft Accelerator
- Cudafy
- Brahma
简单来说,是否有可能在GPU上进行内存中的对象过滤呢?
假设我们有一个对象列表,我们想要筛选出一些东西:
var result = myList.Where(x => x.SomeProperty == SomeValue);
有关这个问题,您有什么指点吗?
先感谢您!
更新
我会尽量更具体地说明我的目标 :)
目标是使用任何技术,在绝对最快的方式下筛选一个对象列表(范围从约50,000到约2,000,000)。
当筛选完成后,我对数据执行的操作(求和、最小值、最大值等)使用内置LINQ方法来完成,已经足够快,所以这不是问题。
瓶颈“只是”数据筛选。
更新
只想补充一下,我已经测试了大约15个数据库,包括MySQL(检查可能的集群方法/ memcached解决方案)、H2、HSQLDB、VelocityDB(目前正在进一步调查)、SQLite、MongoDB等,但没有一个在过滤数据的速度(当然,No-SQL解决方案不像SQL解决方案那样提供此功能,但您明白我的意思)和/或实际数据的返回方面足够好。
为了概括一下我们需要的:
一个能够在不到100毫秒的时间内对格式为200列、大约250,000行的数据进行排序的数据库。
我目前有一个并行化的LINQ解决方案(在特定机器上),可以仅花费纳秒时间来筛选和处理结果!
因此,我们需要每行子纳秒级别的筛选。
- 为什么似乎只有内存中的LINQ能够提供这个功能?
- 这为什么是不可能的?
日志文件中的一些数字:
Total tid för 1164 frågor: 2579
这是瑞典语,翻译为:
Total time for 1164 queries: 2579
在这种情况下,查询是指如下的查询:
WHERE SomeProperty = SomeValue
同时这些查询在 225639 行数据上并行执行。
所以,大约需要 2.5 秒就可以在内存中筛选出 225639 行数据 1164 次。
这意味着每行数据的用时为 9,5185952917007032597107300413827e-9 秒,但是这个时间也包括了数字的实际处理!我们对筛选出的行进行 Count (非空),总计数,Sum,Min,Max,Avg,Median 等 7 项操作。
因此,我们可以说它比我们尝试过的数据库快 7 倍,因为在那些情况下我们不会进行任何聚合操作!
总之,为什么与内存中的 LINQ 筛选相比,数据库在数据筛选方面表现如此差?微软是否真的做得那么好,无法与其竞争? :)
不过,在内存中进行筛选应该更快,但我不只是想要一种感觉它更快。我想要知道什么更快,如果可能的话,为什么更快。