@@ -8529,28 +8529,30 @@ void ggml_svd_reduce_dims(
8529
8529
float * A0 = (float * ) malloc (n * m * sizeof (float ));
8530
8530
8531
8531
// average vector
8532
- float * M = (float * ) malloc (m * sizeof (float ));
8532
+ // float * M = (float *) malloc(m * sizeof(float));
8533
8533
8534
- {
8535
- for (int j = 0 ; j < m ; ++ j ) {
8536
- M [j ] = 0.0f ;
8537
- }
8538
- for (int i = 0 ; i < n ; ++ i ) {
8539
- for (int j = 0 ; j < m ; ++ j ) {
8540
- M [j ] += A [i * m + j ];
8541
- }
8542
- }
8543
- for (int j = 0 ; j < m ; ++ j ) {
8544
- M [j ] /= (float ) n ;
8545
- }
8546
- }
8534
+ // {
8535
+ // for (int j = 0; j < m; ++j) {
8536
+ // M[j] = 0.0f;
8537
+ // }
8538
+ // for (int i = 0; i < n; ++i) {
8539
+ // for (int j = 0; j < m; ++j) {
8540
+ // M[j] += A[i * m + j];
8541
+ // }
8542
+ // }
8543
+ // for (int j = 0; j < m; ++j) {
8544
+ // M[j] /= (float) n;
8545
+ // }
8546
+ // }
8547
8547
8548
- // subtract average vector
8549
- for (int i = 0 ; i < n ; ++ i ) {
8550
- for (int j = 0 ; j < m ; ++ j ) {
8551
- A [i * m + j ] -= M [j ];
8552
- }
8553
- }
8548
+ //// subtract average vector
8549
+ //for (int i = 0; i < n; ++i) {
8550
+ // for (int j = 0; j < m; ++j) {
8551
+ // A[i * m + j] -= M[j];
8552
+ // }
8553
+ //}
8554
+
8555
+ //free(M);
8554
8556
8555
8557
memcpy (A0 , A , n * m * sizeof (float ));
8556
8558
@@ -8616,11 +8618,11 @@ void ggml_svd_reduce_dims(
8616
8618
}
8617
8619
8618
8620
// print S
8619
- // printf("S:\n");
8620
- // for (int i = 0; i < n; ++i) {
8621
- // printf("- %d = %9.5f\n", i, S[i]);
8622
- // }
8623
- // printf("\n");
8621
+ printf ("S:\n" );
8622
+ for (int i = 0 ; i < n ; ++ i ) {
8623
+ printf ("- %d = %9.5f\n" , i , S [i ]);
8624
+ }
8625
+ printf ("\n" );
8624
8626
8625
8627
// print V
8626
8628
//printf("V:\n");
@@ -8652,16 +8654,16 @@ void ggml_svd_reduce_dims(
8652
8654
}
8653
8655
8654
8656
// normalize U
8655
- // for (int i = 0; i < n; ++i) {
8656
- // double sum = 0.0;
8657
- // for (int j = 0; j < m; ++j) {
8658
- // sum += U[i * m + j] * U[i * m + j];
8659
- // }
8660
- // sum = sqrt(sum);
8661
- // for (int j = 0; j < m; ++j) {
8662
- // U[i * m + j] /= sum*sqrt((double) m);
8663
- // }
8664
- // }
8657
+ for (int i = 0 ; i < n ; ++ i ) {
8658
+ double sum = 0.0 ;
8659
+ for (int j = 0 ; j < m ; ++ j ) {
8660
+ sum += U [i * m + j ] * U [i * m + j ];
8661
+ }
8662
+ sum = sqrt (sum );
8663
+ for (int j = 0 ; j < m ; ++ j ) {
8664
+ U [i * m + j ] /= sum * sqrt ((double ) m );
8665
+ }
8666
+ }
8665
8667
8666
8668
// print U
8667
8669
//printf("U:\n");
@@ -8674,12 +8676,11 @@ void ggml_svd_reduce_dims(
8674
8676
//}
8675
8677
//printf("\n");
8676
8678
8677
-
8678
- printf ("n = %d, m = %d, nd = %d\n" , n , m , nd );
8679
8679
// project A0 onto U
8680
8680
for (int i = 0 ; i < n ; ++ i ) {
8681
8681
for (int j = 0 ; j < nd ; ++ j ) {
8682
8682
A [i * nd + j ] = 0.0f ;
8683
+ //if (j == 0) continue;
8683
8684
for (int k = 0 ; k < m ; ++ k ) {
8684
8685
A [i * nd + j ] += A0 [i * m + k ] * U [j * m + k ];
8685
8686
}
0 commit comments