Оптимизация вычислений для средневзвешенного геометрического большого набора данных с использованием графического процессора

Мне нужна помощь с оптимизацией и проблемой производительности, связанной с вычислением средневзвешенного геометрического значения некоторых данных.

Я представляю проблему с небольшим образцом. Я написал код для расчета 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%.

Итак, рассмотрим пример реальных данных:

  1. У меня статическая матрица А 32х30.
  2. Весовые значения, которые идут от 0 до 99.
  3. Мне нужен способ создать матрицу W размером 32x100^32 и оптимизировать ее.
  4. Вычислить первоначально оптимизированную матрицу WGM 100^32x30, где каждая строка является результатом вычисления из матрицы A и соответствующего столбца W.

Итак, проблемы, которые нужно решить:

  • Создание оптимизированной матрицы весов как по размеру, так и по производительности.
  • Расчет WGM Matrix.
  • Способ выделить и разбить эти матрицы, чтобы избежать проблем с памятью.
  • Преобразование кода Matlab в код GPU для вычислений на устройстве Cuda (1080 GTX с 8 ГБ видеопамяти).
  • Хранение финальных матриц эффективным способом.

Добавлена ​​информация:

Матричные данные Weighted Geometric Means будут проверяться с помощью набора более строгих правил, и поэтому несоответствующие строки будут отбрасываться, то же самое для окончательной W-матрицы, где исключение будет происходить для соответствующих столбцов.

Это можно было оценить ранее при создании двух матриц, чтобы найти решение, которое оптимизирует потребление памяти, но при этом может быть менее эффективным с точки зрения производительности.

0 ответов

Другие вопросы по тегам