Реализация суммы (от i = 0 до k) X ^ i * Y в CUDA C - PullRequest
1 голос
/ 08 ноября 2010

Я ищу советы или исследовательские работы, которые помогут мне выполнить сумму (i = от 0 до k) X ^ i * Y или, более точно, Y + X ^ 1 * Y + ... + X ^ k * Y в CUDA C. Где X - матрица N-на-N, а Y - вектор N-на-1

Ответы [ 3 ]

1 голос
/ 08 ноября 2010

Помимо выделения Y из суммы, вы можете вычислить собственное пространство X и впоследствии очень эффективно вычислить каждое X^i (самая медленная часть вычисления вашего суммирования, несомненно, будет поднимать X до диапазонаполномочия, поэтому я буду атаковать это).

В частности, вычислить собственные значения X и сформировать диагональную матрицу из собственных значений, назовите это Q.Используя собственные значения, мы можем диагонализировать X и создать новую матрицу D, такую, что

(1)    D = Q^-1 X Q

Поскольку D является диагональю, мы можем очень эффективно вычислить его с любой степенью i.Применяя (1), мы определяем, что

(2)    D^i = (Q^-1 X Q)^i

и, кроме того, мы можем показать, что (2) эквивалентно

(3)    D^i = Q^-1 X^i Q

Наконец, мы можем найти любой произвольный X^i эффективноперестановка нашего уравнения и вычислений

(4)    X^i = Q D^i Q^-1

(я хотел проверить свою память здесь, поэтому я нашел ссылку на Википедию ).

1 голос
/ 08 ноября 2010

Вы должны проверить Тяга .

Вычеркните Y, затем просто выполните сканирование (используя умножение в качестве оператора) с последующим уменьшением (используя сложение в качестве оператора).

1 голос
/ 08 ноября 2010

Я знаю, что это не то, что вы ищете, но вы не можете вычленить Y и просто умножить его прямо на результат суммы (i = 0 до k) X ^ i?

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