Задать вопрос

Как оптимизировать код на JS для ускорения работы?

Доброго дня.

Стоит задача рассчитать значения матрицы 52000 на 52000 на JS.
Значение в каждой ячейке является результатом вычисления Косинусовой близости векторов размерностью 300.

Для ускорения вычислений использую GPUJS:

gpu.addFunction(function mF(a, b) {
            return a * b;
        });
const f3 = gpu.createKernel(function(inp) {

            var a = 0
            var b = 0
            var c = 0
            for (var i = 0; i < 300; i++) {
                a += mF(inp[this.thread.y][i], inp[this.thread.x][i])
                b += mF(inp[this.thread.y][i], inp[this.thread.y][i])
                c += mF(inp[this.thread.x][i], inp[this.thread.x][i])
            }

            return a / (Math.pow(b, 0.5) * Math.pow(c, 0.5));

        }).setOutput([52000, 52000])


Можно ли это оптимизировать?

В среднем на расчет всех косинусовых значений от одного вектора ко всем остальным уходит 7мс (без GPU 36 мс), что составляет почти 6 минут для расчета всей матрицы. Я в JS профан и, скорее всего, не вижу очевидных способов оптимизации кода для ускорения его работы.
Так же скрипт благополучно умирает при расчете всей огромной матрицы, приходится считать кусочками по 1000 векторов.

Спасибо
  • Вопрос задан
  • 1589 просмотров
Подписаться 6 Средний 7 комментариев
Ответ пользователя string15 К ответам на вопрос (4)
string15
@string15
Учусь верстать руками
Можно попробовать WebAssembly
Ответ написан
Комментировать