91 float *
const restrict
L,
size_t n)
97 if(
A[0] <= 0.0f)
return 0;
99 for(
size_t i = 0;
i <
n;
i++)
100 for(
size_t j = 0; j < (
i + 1); j++)
104 for(
size_t k = 0; k < j; k++)
105 sum +=
L[
i *
n + k] *
L[j *
n + k];
107 L[
i *
n + j] = (
i == j) ?
108 sqrtf(
A[
i *
n +
i] - sum) :
109 (
A[
i *
n + j] - sum) /
L[j *
n + j];
117 float *
const restrict
L,
size_t n)
122 if(
A[0] <= 0.0f)
return 0;
126 for(
size_t i = 0;
i <
n;
i++)
127 for(
size_t j = 0; j < (
i + 1); j++)
131 for(
size_t k = 0; k < j; k++)
132 sum +=
L[
i *
n + k] *
L[j *
n + k];
136 const float temp =
A[
i *
n +
i] - sum;
144 L[
i *
n + j] = sqrtf(
A[
i *
n +
i] - sum);
148 const float temp =
L[j *
n + j];
156 L[
i *
n + j] = (
A[
i *
n + j] - sum) / temp;
165 const float *
const restrict y,
float *
const restrict
b,
171 for(
size_t i = 0;
i <
n; ++
i)
174 for(
size_t j = 0; j <
i; ++j)
175 sum -=
L[
i *
n + j] *
b[j];
177 b[
i] = sum /
L[
i *
n +
i];
185 const float *
const restrict y,
float *
const restrict
b,
193 for(
size_t i = 0;
i <
n; ++
i)
196 for(
size_t j = 0; j <
i; ++j)
197 sum -=
L[
i *
n + j] *
b[j];
199 const float temp =
L[
i *
n +
i];
215 const float *
const restrict
b,
float *
const restrict
x,
221 for(
int i = (
n - 1);
i > -1 ; --
i)
224 for(
int j = (
n - 1); j >
i; --j)
225 sum -=
L[j *
n +
i] *
x[j];
227 x[
i] = sum /
L[
i *
n +
i];
235 const float *
const restrict
b,
float *
const restrict
x,
243 for(
int i = (
n - 1);
i > -1 ; --
i)
246 for(
int j = (
n - 1); j >
i; --j)
247 sum -=
L[j *
n +
i] *
x[j];
249 const float temp =
L[
i *
n +
i];
264 float *
const restrict y,
265 const size_t n,
const int checks)
289 dt_control_log(_(
"Choleski decomposition failed to allocate memory, check your RAM settings"));
290 fprintf(stdout,
"Choleski decomposition failed to allocate memory, check your RAM settings\n");
298 if(!valid) fprintf(stdout,
"Cholesky decomposition returned NaNs\n");
304 if(!valid) fprintf(stdout,
"Cholesky LU triangular descent returned NaNs\n");
310 if(!valid) fprintf(stdout,
"Cholesky LU triangular ascent returned NaNs\n");
326 float *
const restrict A_square,
327 const size_t m,
const size_t n)
332 for(
size_t i = 0;
i <
n; ++
i)
333 for(
size_t j = 0; j < (
i + 1); ++j)
336 for(
size_t k = 0; k <
m; ++k)
337 sum +=
A[k *
n +
i] *
A[k *
n + j];
339 A_square[
i *
n + j] = sum;
347 float *
const restrict y,
348 float *
const restrict y_square,
349 const size_t m,
const size_t n)
353 for(
size_t i = 0;
i <
n; ++
i)
356 for(
size_t k = 0; k <
m; ++k)
357 sum +=
A[k *
n +
i] * y[k];
367 float *
const restrict y,
368 const size_t m,
const size_t n,
const int checks)
378 fprintf(stdout,
"Pseudo solve: cannot cast %zu \303\227 %zu matrice\n",
m,
n);
385 if(!A_square || !y_square)
387 dt_control_log(_(
"Choleski decomposition failed to allocate memory, check your RAM settings"));
393 #pragma omp parallel sections
static void error(char *msg)
Definition ashift_lsd.c:202
#define m
Definition basecurve.c:277
static int transpose_dot_vector(float *const restrict A, float *const restrict y, float *const restrict y_square, const size_t m, const size_t n)
Definition choleski.h:346
static int transpose_dot_matrix(float *const restrict A, float *const restrict A_square, const size_t m, const size_t n)
Definition choleski.h:325
static int choleski_decompose_safe(const float *const restrict A, float *const restrict L, size_t n)
Definition choleski.h:116
static int solve_hermitian(const float *const restrict A, float *const restrict y, const size_t n, const int checks)
Definition choleski.h:263
static int pseudo_solve(float *const restrict A, float *const restrict y, const size_t m, const size_t n, const int checks)
Definition choleski.h:366
static int choleski_decompose_fast(const float *const restrict A, float *const restrict L, size_t n)
Definition choleski.h:90
static int triangular_ascent_safe(const float *const restrict L, const float *const restrict b, float *const restrict x, const size_t n)
Definition choleski.h:234
static int triangular_ascent_fast(const float *const restrict L, const float *const restrict b, float *const restrict x, const size_t n)
Definition choleski.h:214
static int triangular_descent_fast(const float *const restrict L, const float *const restrict y, float *const restrict b, const size_t n)
Definition choleski.h:164
static int triangular_descent_safe(const float *const restrict L, const float *const restrict y, float *const restrict b, const size_t n)
Definition choleski.h:184
#define A(y, x)
Definition colorspaces.c:186
const float i
Definition colorspaces_inline_conversions.h:669
const float L
Definition colorspaces_inline_conversions.h:724
const float b
Definition colorspaces_inline_conversions.h:1326
const float n
Definition colorspaces_inline_conversions.h:929
void dt_control_log(const char *msg,...)
Definition control.c:530
#define dt_free_align(ptr)
Definition darktable.h:405
static float * dt_alloc_align_float(size_t pixels)
Definition darktable.h:418
static __DT_CLONE_TARGETS__ void dt_simd_memcpy(const float *const __restrict__ in, float *const __restrict__ out, const size_t num_elem)
Definition imagebuf.h:68
static const float x
Definition iop_profile.h:239