Я несколько дней искал надежную информацию о возможности ускорения запросов LINQ с помощью графического процессора.
Технологии, которые я до сих пор «исследовал»:
Короче говоря, возможно ли вообще выполнить фильтрацию объектов в памяти на 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, но вы поняли идею) и / или возврата фактических данных.
Просто резюмирую, что мне / нам нужно:
База данных, которая может сортировать данные в формате 200 столбцов и около 250 000 строк менее чем за 100 мс.
В настоящее время у меня есть решение с распараллеливанием 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 (не ноль), общий счет, Sum, Min, Max, Avg, Median. Итак, у нас есть 7 операций с этими отфильтрованными строками.
Таким образом, мы могли бы сказать, что это на самом деле в 7 раз быстрее , чем те базы данных, которые мы пробовали, поскольку мы НЕ выполняем какие-либо агрегации в этих случаях!
Итак, в заключение, почему базы данных так плохо фильтруют данные по сравнению с фильтрацией LINQ в памяти? Неужели Microsoft действительно проделала такую хорошую работу, что с ней невозможно конкурировать? :)
Это имеет смысл, хотя в-фильтрация памяти должна быть быстрее, но я не хочу ощущения , что она быстрее. Я хочу знать , что быстрее, и если это возможно, почему .