Nano Hash - криптовалюты, майнинг, программирование

Более эффективный способ вычисления XSX^T и XSy

Мне нужно вычислить следующие матрицы: M = XSX^T и V = XSy

то, что я хотел бы знать, - это более эффективная реализация с использованием blas, зная, что S - симметричная и определенная положительная матрица размерности n, X имеет m строк и n столбцов, а y - вектор длины n.

Моя реализация такова: я вычисляю A = XS, используя dsymm, а затем с помощью dgemm получаю M=AX^T, а dgemv использую для получения V=Ay.

Я думаю, что по крайней мере M можно вычислить более эффективным способом, поскольку я знаю, что M симметрично и определенно положительно.

01.07.2018

Ответы:


1

Ваш код — лучшее, что BLAS может сделать для вас. Не существует операции BLAS, которая могла бы использовать тот факт, что M является симметричным.

Вы правы, хотя технически вам нужно вычислить только верхнюю диагональную часть произведения gemm, а затем скопировать строго верхнюю диагональную часть в нижнюю диагональную часть. Но для этого нет рутины.

Можно поинтересоваться размерами? И могу ли я также вдохновить некоторые другие источники для повышения производительности: собственная сборка вашей реализации BLAS, сравнение с MKL, ACML, OpenBLAS, ATLAS. Очевидно, вы могли бы написать свою собственную версию, которая использовала бы встроенные функции AVX, FMA. Вы должны быть в состоянии сделать лучше, чем какая-то обобщенная библиотека. Также какова точность вашей переменной с плавающей запятой?

Я серьезно сомневаюсь, что вы можете получить слишком много, кодируя это самостоятельно. Но я бы определенно предложил преобразовать все в числа с плавающей запятой и проверить, не дает ли точность с плавающей точкой тот же результат со значительным ускорением времени вычислений. Очень редко я видел такие случаи, которые были больше в области решения ОДУ и числовой интеграции неприятных функций.

Но вы не ответили на мой вопрос о реализации BLAS и типе машины.

Опять же, оптимизация после этой точки невозможна без дополнительных навыков :(. А если серьезно, не беспокойтесь об этом. Есть причина, по которой BLAS не выполняет оптимизацию, о которой вы просите. Возможно, это не стоит хлопот. , Используйте свое решение.

И не забудьте исследовать использование поплавков, а не двойных. На R конвертируйте все в плавающее. Для команд Lapack используйте только sgemX

01.07.2018
  • Я добавил ответ к другому ответу 02.07.2018
  • Извиняюсь. Как я уже сказал, я не очень квалифицирован, и я не уверен, что ответить. Более того, я не думаю, что это полезная информация, потому что я пишу статистическую модель, которая является частью библиотеки R. Тогда будут разные пользователи, возможно, с разными машинами и реализацией BLAS. 02.07.2018
  • Спасибо за ответ)! 02.07.2018

  • 2

    Не зная деталей вашей проблемы, может быть полезно распознать нули в матрицах. Разбиение матриц для достижения этой цели может дать значительные преимущества. Является ли M суммой многих подматриц XSX?

    Для V = XSy, где y — вектор, а X и S — матрицы, вычисление S.y должно быть лучше, чем X.(Sy), если только X.S не является необходимым вычислением для M.

    02.07.2018
  • и m, и n около 100, что, насколько я знаю, немного, но S и M нужно вычислять сотни тысяч раз. X,S и y содержат двойные числа. Элементы в целом не имеют особой структуры, но иногда X имеет вид x_1 0 0 0 x_2 0 0 0 x_3, где x_i имеет размерность (1,m_i). P.S. Я не настолько опытен, чтобы написать свою собственную реализацию, которая лучше, чем BLAS. 02.07.2018
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..