Нашел решение, объединив возможности библиотеки и совет @Taraflex
Код выглядит так:
var kernelMatrixSize = 4096
const gpu = new GPU({
mode: 'gpu'
});
const f3 = gpu.createKernel(function(inp1, inp2) {
var a = 0
var b = 0
var c = 0
for (var i = 0; i < 300; i++) {
a += inp1[this.thread.y][i] * inp2[this.thread.x][i]
b += Math.pow(inp1[this.thread.y][i], 2)
c += Math.pow(inp2[this.thread.x][i], 2)
}
return Math.floor(a / (Math.sqrt(b * c)) * 1000000) / 1000000;
}).setOutput([kernelMatrixSize, kernelMatrixSize])
.setOutputToTexture(true);
x = getAllDistanceBetween(vectorsData)
y = x[0].toArray(gpu)
Если стоит метка setOutputToTexture, то вычисление матрицы 4096х4096 длится 224 мс, преобразование текстуры в массив занимает примерно 3 секунды. Высчитываем только половину матрицы, так как расстояние от 0 вектора до 1 = расстоянию от 1 к 0. Итого вычисление всех необходимых ячеек займет чуть меньше 60 секунд, вместо 6 минут ранее.
Всем спасибо за помощь.