Оптимизация вычислений для средневзвешенного геометрического большого набора данных с использованием графического процессора
Мне нужна помощь с оптимизацией и проблемой производительности, связанной с вычислением средневзвешенного геометрического значения некоторых данных.
Я представляю проблему с небольшим образцом. Я написал код для расчета WGM для простого примера ниже.
% A matrix Example 3x3 matrix
% w column vector 3x1
% wgm row vector 1x3
A = rand(3);
w = [1,2,6]';
wgm = (prod(A.^w)).^(1/sum(w));
Теперь для общей проблемы:
Предположим, у меня есть новая матрица размером nxm и матрица W, составленная из весовых столбцов, где значения весов могут быть от 0 до k, и мне нужны все перестановки столбцов.
То есть W-матрица имеет размер nxk ^ n, так как от природы весов и взвешенных геометрических вычислений эту окончательную матрицу следует уменьшить, исключая столбцы, которые представляют умножение на скалярное значение, идущее от 0 до k перестановки.
Поэтому, если у меня уже есть столбец типа [1, 1, 0], который должен исключить все t*[1,1,0] с t, идущим от 0 до k. Другой пример: [1 2 3] должен исключать [2 4 6] или [3 6 9] и так далее.
Основная идея: каждый сгенерированный столбец для матрицы W можно нормализовать, разделив каждый вес на k, поэтому, если новый нормализованный столбец является избыточным, его не следует добавлять, а затем преобразовать обратно в столбец uint8, чтобы уменьшить потребление памяти до 12,5%.
Итак, рассмотрим пример реальных данных:
- У меня статическая матрица А 32х30.
- Весовые значения, которые идут от 0 до 99.
- Мне нужен способ создать матрицу W размером 32x100^32 и оптимизировать ее.
- Вычислить первоначально оптимизированную матрицу WGM 100^32x30, где каждая строка является результатом вычисления из матрицы A и соответствующего столбца W.
Итак, проблемы, которые нужно решить:
- Создание оптимизированной матрицы весов как по размеру, так и по производительности.
- Расчет WGM Matrix.
- Способ выделить и разбить эти матрицы, чтобы избежать проблем с памятью.
- Преобразование кода Matlab в код GPU для вычислений на устройстве Cuda (1080 GTX с 8 ГБ видеопамяти).
- Хранение финальных матриц эффективным способом.
Добавлена информация:
Матричные данные Weighted Geometric Means будут проверяться с помощью набора более строгих правил, и поэтому несоответствующие строки будут отбрасываться, то же самое для окончательной W-матрицы, где исключение будет происходить для соответствующих столбцов.
Это можно было оценить ранее при создании двух матриц, чтобы найти решение, которое оптимизирует потребление памяти, но при этом может быть менее эффективным с точки зрения производительности.