Uploaded by Iskander Meirambekov

matrix rank kernel.cl

advertisement
__kernel void prepareRowReduction(__global float* matrix, const int n, const int lead) {
int row = get_global_id(0);
int col = get_global_id(1);
// Пропускаем строки выше ведущей строки и саму ведущую строку
if (row <= lead || col >= n) return;
float leadValue = matrix[lead * n + col]; // Значение в ведущей строке
float targetValue = matrix[row * n + col]; // Значение в текущей строке
// Проверка, чтобы избежать деления на ноль
if (leadValue == 0) return;
// Рассчитываем коэффициент для текущей строки
float factor = targetValue / leadValue;
// Обновляем строки, начиная с ведущего столбца
if (col == lead) {
// Обнуляем элемент в текущей строке под ведущим элементом
matrix[row * n + col] = 0;
} else {
// Применяем преобразование для элементов справа от ведущего
matrix[row * n + col] -= factor * leadValue;
}
}
Download