Я несколько дней искал надежную информацию о возможности ускорения запросов LINQ с помощью графического процессора.
Технологии, которые я "исследовал" до сих пор:
- Microsoft Accelerator
- Cudafy
- Брахма
Короче говоря, возможно ли вообще выполнять фильтрацию объектов в памяти GPU?
Допустим, у нас есть список некоторых объектов, и мы хотим отфильтровать что-то вроде:
var result = myList.Where(x => x.SomeProperty == SomeValue);
Есть какие-нибудь указатели на это?
Заранее спасибо!
UPDATE
Я попытаюсь быть более точным в отношении того, чего я пытаюсь достичь:)
Цель состоит в том, чтобы использовать любую технологию, которая способна фильтровать список объектов (от ~ 50 000 до ~ 2 000 000) абсолютно быстрым способом.
Операции, которые я выполняю с данными, когда фильтрация выполнена (сумма, мин, макс и т. Д.) Выполняются с использованием встроенных LINQ-методов и уже достаточно быстры для нашего приложения, так что это не проблема.
Узким местом является "просто" фильтрация данных.
UPDATE
Просто хотел добавить, что я протестировал около 15 баз данных, включая MySQL (проверка возможного кластерного подхода / решение memcached), H2, HSQLDB, VelocityDB (в настоящее время ведутся дальнейшие исследования), SQLite, MongoDB и т. Д., И NONE достаточно хорош, когда он приходит к скорости фильтрации данных (конечно, решения NO-sql не предлагают это как SQL, но вы поняли идею) и / или возврат фактических данных.
Просто подведем итог, что мне / нам нужно:
База данных, которая может сортировать данные в формате 200 столбцов и около 250 000 строк менее чем за 100 мс.
В настоящее время у меня есть решение с параллельным LINQ, которое способно (на определенной машине) тратить только nano -секунд на каждую строку при фильтрации AND на обработку результата!
Итак, нам нужна суб- 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 (не ноль), Total Count, Sum, Min, Max, Avg, Median. Итак, у нас есть 7 операций над этими отфильтрованными строками.
Таким образом, мы можем сказать, что на самом деле * в 1079 * 7 раз быстрее , чем в тех базах данных, которые мы пробовали, поскольку мы НЕ делаем агрегацию в таких случаях!
Итак, в заключение, почему базы данных так плохо фильтруют данные по сравнению с фильтрацией в памяти LINQ? Действительно ли Microsoft проделала такую хорошую работу, что с ней невозможно конкурировать? :)
Хотя имеет смысл, что фильтрация в памяти должна быть быстрее, но я не хочу ощущать , что она быстрее. Я хочу, чтобы знал , что быстрее, и если это возможно , почему .