Хранить матрицы и выполнять расчеты - PullRequest
0 голосов
/ 05 марта 2012

При каждом запросе веб-страницы мне нужно умножить матрицу на вектор.Матрица является симметричной и (вероятно) разреженной, с размерами приблизительно 500x500.Вектор представляет собой столбец, извлеченный из другой матрицы с размерами приблизительно 500x100000.Теперь мой вопрос заключается в том, как я храню матрицы и эффективно выполняю вычисления.Я хотел бы выполнить вычисления с помощью php и сохранить матрицы с помощью mysql или на жестком диске, но я предполагаю, что есть более эффективные инструменты для такого рода задач.

Если вам нужно что-то узнать дальше, не стесняйтесьспросить!

1 Ответ

0 голосов
/ 05 марта 2012

ОК, мы получили настоящий угловой пример:

  • 500x100 000 = 50 000 000 элементов.В зависимости от типа данных это приводит к ок.50M-400M представления в памяти, если мы игнорируем разреженность и адрес по индексу.Симметричная матрица уменьшает это до 25-200M
  • Ненулевая плотность в 11% означает, что накладные расходы в 9 элементов для разреженной адресации являются безубыточностью - не очень убедительно для небольших типов данных, но могутбыть опцией для 64-битных типов данных.

Работа с этим дает сильный аргумент двухуровневому решению:

  • A (общий) "сервер хранилища данных" (MySQLэто единственный вариант, который вы упомянули)
  • и внешний интерфейс (возможно, PHP).

Использование PHP для умножения матриц 500x500 не кажется очень эффективным способом:Затраты на цикл в PHP довольно высоки, поэтому, поскольку в цикле так мало сделано, вы можете потерять немного производительности.

Я рекомендую перейти к немного другому решению: написать свой собственный бэкэнд (возможно, на Cили C #), что

  • При запуске считывает матрицу в память
  • Прослушивает (локальный) сокет для команд, например, «multiply»
  • Выполняет эти командына матрицу и гиven data и возвращает результат

и передает его через PHP.Таким образом вы получаете скорость обработки скомпилированного языка для основной функции, при этом имея простоту и веб-ориентированность PHP для внешнего интерфейса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...