Нам нужно вычислить ковариационные матрицы с размерами от до . У нас есть доступ к графическим процессорам и кластерам, мы задаемся вопросом, каков наилучший параллельный подход для ускорения этих вычислений.
matrix
parallel-computing
gpu
Открой путь
источник
источник
Ответы:
Прежде всего, нужно признать, что вы можете сделать это с помощью BLAS. Если ваша матрица данных имеет вид (каждый - это вектор-столбец, соответствующий одному измерению; строки - это испытания), тогда вы можете написать ковариация как: Мы можем записать это как: где - вектор строки со всеми элементами 1, поэтому - вектор строки сумм столбцов . Это можно записать полностью как BLAS, гдеX=[x1x2x3...]∈Rm×n x
Ваши матрицы данных и результатов могут составлять около 64 ГБ, поэтому вы не собираетесь помещать их на один узел или на графические процессоры. Для кластера без графического процессора вы можете посмотреть на PBLAS , который выглядит как скальпак. Для графических процессоров многоузловые библиотеки еще не совсем там. Magma имеет своего рода параллельную реализацию BLAS, но она не может быть удобной для пользователя. Я не думаю, что CULA еще работает с несколькими узлами, но это то, за чем нужно следить. CUBLAS является одноузловым .
Я бы также посоветовал вам настоятельно рассмотреть возможность реализации параллелизма самостоятельно, особенно если вы знакомы с MPI и должны подключить это к существующей кодовой базе. Таким образом, вы можете легко переключаться между процессором и GPU BLAS и начинать и заканчивать данными именно там, где вам нужно. Вам не нужно больше, чем несколько вызовов MPI_ALLREDUCE .
источник
Я реализовал формулу, заданную @Max Hutchinson с CUBlas и Cuda Thrust, и сравнил ее с онлайн-инструментами вычисления дисперсии. Кажется, у меня хорошие результаты. Код ниже планируется QDA Байеса. Таким образом, данная матрица может содержать более одного класса. Таким образом, вычисляется несколько матриц. Надеюсь это кому-нибудь пригодится.
источник