Можно ли ускорить (динамические) запросы LINQ с помощью графического процессора?

Я несколько дней искал надежную информацию о возможности ускорения запросов 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, но вы поняли идею) и / или возврата фактических данных.

Просто резюмирую, что мне / нам нужно:

База данных, которая может сортировать данные в формате 200 столбцов и около 250 000 строк менее чем за 100 мс.

В настоящее время у меня есть решение с распараллеливанием LINQ, которое может (на конкретной машине) тратить только нано -секунд на каждую строку при фильтрации И обработки результата!

Итак, нам нужна суб нано -секундная фильтрация для каждой строки.

  1. Почему кажется, что только LINQ в памяти может обеспечить это?
  2. Почему это невозможно?

Некоторые цифры из файла журнала:

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 действительно проделала такую ​​хорошую работу, что с ней невозможно конкурировать? :)

Это имеет смысл, хотя в-фильтрация памяти должна быть быстрее, но я не хочу ощущения , что она быстрее. Я хочу знать , что быстрее, и если это возможно, почему .

14
задан Johan 17 February 2012 в 11:00
поделиться