Nu har jag kompilerat klart CLapack. Jag använde mig av standard Blas.
Jag fick fram en fil. Nu ska man bara komma på ett bra sätt och länka denna .a fil.
Ingen som vet?
Edit: Nu har jag fått det att fungera.
GNU Octave
Kod: Markera allt
>> B = rand(15,15)
B =
     0.84245     0.23405     0.69751     0.27905     0.18851     0.61018     0.62182     0.71839     0.79161     0.56156     0.83395    0.092388      0.8511     0.44826     0.82158
     0.84614     0.15947    0.096336     0.80793     0.35114     0.42583      0.2134     0.75324     0.31391     0.22892     0.94773     0.81204     0.62554     0.28367     0.26637
     0.26509     0.91429     0.14222     0.28321     0.11607     0.41188     0.10071     0.18224     0.75723     0.89125     0.62494     0.83016     0.46448     0.73119     0.10982
     0.45197     0.44562     0.27909     0.76019    0.014571     0.42705     0.70214     0.64936     0.98451     0.59632     0.07654     0.95633     0.18574     0.92716     0.65401
     0.48034     0.38327     0.32906     0.34794     0.68673     0.54113     0.34142     0.48561     0.37221     0.16097     0.15569     0.63287     0.17518    0.055447     0.44536
     0.54119     0.34478     0.53297      0.2796     0.95212      0.5353      0.8202     0.32707   0.0062771     0.64993    0.057361     0.59959     0.16867     0.67892     0.52882
    0.082573     0.96676    0.080315     0.48813     0.33496      0.4436     0.01436     0.89664     0.49167     0.37092     0.31586     0.54683     0.65159     0.38531     0.20697
     0.35775     0.42437     0.79392     0.49724     0.01319   0.0074932     0.66462      0.6506      0.9889     0.27213     0.99607     0.68418     0.70238     0.81493     0.46062
     0.22609     0.59924     0.74631     0.81566     0.92784     0.47376     0.83531     0.47031     0.97093     0.44778     0.42997     0.71882     0.36504     0.34216     0.95187
     0.87475     0.22003     0.71901     0.90968     0.27265     0.16106     0.21283     0.14918     0.16776     0.83038     0.43605     0.85075     0.54771     0.77479     0.24739
     0.21203     0.65616     0.63534     0.57569     0.22113     0.48063     0.24207     0.54873     0.25042     0.82671     0.88986     0.41674     0.95235     0.89875     0.15004
     0.86164     0.89058     0.66423     0.60958     0.47708     0.18674     0.66359     0.92383     0.48073     0.79466     0.64519     0.69876   0.0066587     0.55114     0.10979
     0.35586     0.94772     0.28888     0.63119     0.42774     0.82597     0.90274     0.40152     0.96414     0.84376    0.028355    0.040771     0.85359     0.92875     0.32352
     0.39274     0.27788     0.41549     0.90884    0.042767     0.64168    0.086933     0.47941     0.91491     0.26425     0.11667     0.49996     0.12644     0.87136     0.30768
     0.86527     0.92393     0.47957     0.32175     0.87965     0.13719      0.4014     0.25277     0.83936     0.73476     0.97174     0.65243     0.85813     0.62705   0.0013063
>> tic; [u,s,v] = svd(B); toc
Elapsed time is 0.000423908 seconds.
>> s
s =
Diagonal Matrix
      7.8389           0           0           0           0           0           0           0           0           0           0           0           0           0           0
           0      1.7935           0           0           0           0           0           0           0           0           0           0           0           0           0
           0           0      1.6371           0           0           0           0           0           0           0           0           0           0           0           0
           0           0           0      1.5177           0           0           0           0           0           0           0           0           0           0           0
           0           0           0           0      1.4298           0           0           0           0           0           0           0           0           0           0
           0           0           0           0           0      1.2674           0           0           0           0           0           0           0           0           0
           0           0           0           0           0           0         1.1           0           0           0           0           0           0           0           0
           0           0           0           0           0           0           0     0.90737           0           0           0           0           0           0           0
           0           0           0           0           0           0           0           0     0.84691           0           0           0           0           0           0
           0           0           0           0           0           0           0           0           0     0.67887           0           0           0           0           0
           0           0           0           0           0           0           0           0           0           0     0.56789           0           0           0           0
           0           0           0           0           0           0           0           0           0           0           0     0.46979           0           0           0
           0           0           0           0           0           0           0           0           0           0           0           0     0.39255           0           0
           0           0           0           0           0           0           0           0           0           0           0           0           0     0.19035           0
           0           0           0           0           0           0           0           0           0           0           0           0           0           0    0.043839
>>
Nu är det Clapack!
Kod: Markera allt
/*
 ============================================================================
 Name        : BlasTest.c
 Author      : 
 Version     :
 Copyright   : MIT
 Description : Hello World in C, Ansi-style
 ============================================================================
 */
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "blaswrap.h"
#include "f2c.h"
#include "clapack.h"
#define SIZE 15
void MAIN_(){}
void MAIN__(){}
void _MAIN_(){}
int main( )
{
	clock_t start, end;
		float cpu_time_used;
		start = clock();
     char JOBU;
     char JOBVT;
     int i;
     integer M = SIZE;
     integer N = SIZE;
     integer LDA = M;
     integer LDU = M;
     integer LDVT = N;
     integer LWORK;
     integer INFO;
     integer mn = min( M, N );
     integer MN = max( M, N );
     double a[SIZE*SIZE] = {
    		 0.84245,     0.23405   ,  0.69751 ,    0.27905   ,  0.18851  ,   0.61018    , 0.62182  ,   0.71839   ,  0.79161     ,0.56156   ,  0.83395   , 0.092388     , 0.8511    , 0.44826    , 0.82158,
    		     0.84614  ,   0.15947  ,  0.096336  ,   0.80793  ,   0.35114 ,    0.42583 ,     0.2134 ,    0.75324   ,  0.31391 ,    0.22892  ,   0.94773 ,    0.81204   ,  0.62554 ,    0.28367   ,  0.26637,
    		     0.26509  ,   0.91429  ,   0.14222  ,   0.28321   ,  0.11607 ,    0.41188 ,    0.10071 ,    0.18224   ,  0.75723 ,    0.89125  ,   0.62494 ,    0.83016   ,  0.46448  ,   0.73119  ,   0.10982,
    		     0.45197  ,   0.44562  ,   0.27909  ,   0.76019   , 0.014571 ,    0.42705 ,    0.70214 ,    0.64936   ,  0.98451 ,    0.59632  ,   0.07654 ,    0.95633   ,  0.18574   ,  0.92716  ,   0.65401,
    		     0.48034  ,   0.38327  ,   0.32906  ,   0.34794   ,  0.68673 ,    0.54113 ,    0.34142 ,    0.48561  ,   0.37221 ,    0.16097  ,   0.15569 ,    0.63287  ,   0.17518  ,  0.055447  ,   0.44536,
    		     0.54119  ,   0.34478   ,  0.53297  ,    0.2796   ,  0.95212 ,     0.5353 ,     0.8202 ,    0.32707  , 0.0062771 ,    0.64993  ,  0.057361 ,    0.59959  ,   0.16867  ,   0.67892  ,   0.52882,
    		    0.082573  ,   0.96676  ,  0.080315  ,   0.48813   ,  0.33496 ,     0.4436 ,    0.01436 ,    0.89664   ,  0.49167 ,    0.37092  ,   0.31586 ,    0.54683  ,   0.65159  ,   0.38531  ,   0.20697,
    		     0.35775  ,   0.42437  ,   0.79392  ,   0.49724    , 0.01319 ,  0.0074932 ,    0.66462 ,     0.6506   ,   0.9889 ,    0.27213  ,   0.99607 ,    0.68418  ,   0.70238  ,   0.81493  ,   0.46062,
    		     0.22609  ,   0.59924  ,   0.74631  ,   0.81566   ,  0.92784 ,    0.47376 ,    0.83531 ,    0.47031   ,  0.97093 ,    0.44778  ,   0.42997 ,    0.71882  ,   0.36504  ,   0.34216  ,   0.95187,
    		     0.87475  ,   0.22003  ,   0.71901  ,   0.90968   ,  0.27265 ,    0.16106 ,    0.21283 ,    0.14918   ,  0.16776 ,    0.83038  ,   0.43605 ,    0.85075  ,   0.54771  ,   0.77479  ,   0.24739,
    		     0.21203  ,   0.65616  ,   0.63534  ,   0.57569   ,  0.22113 ,    0.48063 ,    0.24207 ,    0.54873   ,  0.25042 ,    0.82671  ,   0.88986 ,    0.41674  ,   0.95235  ,   0.89875  ,   0.15004,
    		     0.86164  ,   0.89058  ,   0.66423  ,   0.60958   ,  0.47708 ,    0.18674 ,    0.66359 ,    0.92383  ,   0.48073 ,    0.79466  ,   0.64519 ,    0.69876  , 0.0066587  ,   0.55114  ,   0.10979,
    		     0.35586  ,   0.94772  ,   0.28888  ,   0.63119   ,  0.42774 ,    0.82597 ,    0.90274 ,    0.40152  ,   0.96414 ,    0.84376  ,  0.028355 ,   0.040771   ,  0.85359  ,   0.92875  ,   0.32352,
    		     0.39274  ,   0.27788  ,   0.41549  ,   0.90884  ,  0.042767 ,    0.64168 ,   0.086933 ,    0.47941  ,   0.91491 ,    0.26425  ,   0.11667 ,    0.49996   ,  0.12644  ,   0.87136  ,   0.30768,
    		     0.86527 ,    0.92393  ,   0.47957  ,   0.32175  ,   0.87965 ,    0.13719 ,     0.4014 ,    0.25277  ,   0.83936 ,    0.73476  ,   0.97174 ,    0.65243   ,  0.85813  ,   0.62705  , 0.0013063};
     double s[SIZE];
     double wk[201];
     double uu[SIZE*SIZE];
     double vt[SIZE*SIZE];
       JOBU = 'A';
       JOBVT = 'A';
    LWORK =  201;
    dgesvd_( &JOBU, &JOBVT, &M, &N, a, &LDA, s, uu,
          &LDU, vt, &LDVT, wk, &LWORK, &INFO);
    printf("\n INFO=%d", INFO );
    for ( i= 0; i< SIZE; i++ ) {
        printf("\n s[ %d ] = %f", i, s[ i ] );
    }
    end = clock();
    	cpu_time_used = ((float) (end - start)) / CLOCKS_PER_SEC;
    	printf("\nTotal speed  was %f,", cpu_time_used);
    return 0;
}
Ja! Helt nöjd, trots att GNU Octave var snabbare med 0.000009092 sekunder, men knappt märkbart. Nu mätte jag över hela C-koden till skillnad från GNU Octave där jag bara mätte över SVD-funktionen. Så vi kan säga att C vann slaget!
INFO=0
s[ 0 ] = 7.838945
s[ 1 ] = 1.793532
s[ 2 ] = 1.637058
s[ 3 ] = 1.517732
s[ 4 ] = 1.429764
s[ 5 ] = 1.267348
s[ 6 ] = 1.099945
s[ 7 ] = 0.907375
s[ 8 ] = 0.846915
s[ 9 ] = 0.678870
s[ 10 ] = 0.567895
s[ 11 ] = 0.469790
s[ 12 ] = 0.392545
s[ 13 ] = 0.190355
s[ 14 ] = 0.043838
Total speed was 0.000433,
Jag använder versionen av BLAS som är den "generella" versionen, dvs ej anpassad efter någon specifik CPU. Denna BLAS version finns inkluderad i Clapack.
Då har jag vissa steg att göra:
1. Lär mig biblioteket. Det verkar vara rätt röriga funktioner.
2. Få kompilatorn att tolka double som float
3. Skriv till STM32
				