Я искал несколько дней для получения достоверной информации о возможности ускорения запросов LINQ с использованием графического процессора.
Технологии, которые я исследовал до сих пор:
- Microsoft Accelerator
- Cudafy
- Брахма
Короче говоря, возможно ли вообще вообще сделать фильтрацию объектов на GPU в памяти?
Предположим, у нас есть список некоторых объектов, и мы хотим отфильтровать что-то вроде:
var result = myList.Where(x => x.SomeProperty == SomeValue);
Любые указатели на этом?
Спасибо заранее!
UPDATE
Я постараюсь более конкретно узнать, чего я пытаюсь достичь:)
Цель состоит в том, чтобы использовать любую технологию, которая может фильтровать список объектов (от ~ 50 000 до ~ 2 000 000) самым быстрым способом.
Операции, которые я выполняю на данных при завершении фильтрации (sum, min, max и т.д.), выполняются с использованием встроенных методов LINQ и уже достаточно быстро для нашего приложения, так что это не проблема.
Узким местом является "просто" фильтрация данных.
UPDATE
Просто захотелось добавить, что я тестировал около 15 баз данных, включая MySQL (проверка возможного подхода к кластеру/решение memcached), H2, HSQLDB, VelocityDB (в настоящее время исследует далее), SQLite, MongoDB и т.д., и NONE достаточно хорош, когда приходит к скорости фильтрации данных (конечно, NO-sql-решения не предлагают такого, как sql-те, но вы получаете идею) и/или возврат фактических данных.
Просто подытожим то, что мне нужно:
База данных, способная сортировать данные в формате 200 столбцов и около 250 000 строк менее чем за 100 мс.
В настоящее время у меня есть решение с параллелизированным LINQ, которое может (на определенной машине) тратить только nano -секунды на каждую строку при фильтрации И обработки результата!
Итак, нам нужна суб- nano -секундная фильтрация для каждой строки.
- Почему кажется, что только в памяти LINQ может это предоставить?
- Почему это невозможно?
Некоторые цифры из файла журнала:
Total tid för 1164 frågor: 2579
Это шведский и переводит:
Total time for 1164 queries: 2579
Если запросы в этом случае являются запросами типа:
WHERE SomeProperty = SomeValue
И эти запросы выполняются в параллельном порядке по 225639 строкам.
Итак, 225639 строк фильтруются в памяти 1164 раза за 2,5 секунды.
Это 9,5185952917007032597107300413827e-9 секунд/строка, НО, что также включает фактическую обработку чисел! Мы делаем Count (не null), общее количество, Sum, Min, Max, Avg, Median. Итак, у нас есть 7 операций над этими отфильтрованными строками.
Итак, мы могли бы сказать, что это на самом деле в 7 раз быстрее, чем в базах данных, которые мы пробовали, поскольку мы делаем НЕ любые агрегирующие материалы в этих случаях
Итак, в заключение, почему базы данных настолько плохи при фильтрации данных по сравнению с фильтрацией LINQ в памяти? Действительно ли Microsoft сделала такую хорошую работу, что с ней невозможно конкурировать?:)
Это имеет смысл, хотя фильтрация в памяти должна быть быстрее, но мне не нужен смысл, что он быстрее. Я хочу знать, что быстрее, и если возможно , почему.