__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; } }