Matrix Multiplication with 2 threads

Dependencies:   mbed-rtos mbed

Committer:
agme
Date:
Fri Aug 08 00:56:15 2014 +0000
Revision:
0:27261dbc7ba7
Initial Commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
agme 0:27261dbc7ba7 1 #include "mbed.h"
agme 0:27261dbc7ba7 2 #include "rtos.h"
agme 0:27261dbc7ba7 3
agme 0:27261dbc7ba7 4
agme 0:27261dbc7ba7 5 double *A,*B,*C;
agme 0:27261dbc7ba7 6 int i,j,k,N;
agme 0:27261dbc7ba7 7 Serial pc(USBTX, USBRX); // tx, rx
agme 0:27261dbc7ba7 8
agme 0:27261dbc7ba7 9 void process1_thread(void const *args)
agme 0:27261dbc7ba7 10 {
agme 0:27261dbc7ba7 11 for(i=0; i<N/2; i++) {
agme 0:27261dbc7ba7 12 for(j=0; j<N; j++) {
agme 0:27261dbc7ba7 13 C[i*N+j]=0;
agme 0:27261dbc7ba7 14 for(k=0; k<N; k++) {
agme 0:27261dbc7ba7 15 C[i*N+j]= C[i*N+j] + A[i*N+k]*B[k+j*N];
agme 0:27261dbc7ba7 16 }
agme 0:27261dbc7ba7 17 }
agme 0:27261dbc7ba7 18 }
agme 0:27261dbc7ba7 19 }
agme 0:27261dbc7ba7 20
agme 0:27261dbc7ba7 21 void process2_thread(void const *args)
agme 0:27261dbc7ba7 22 {
agme 0:27261dbc7ba7 23 for(i=N/2; i<N; i++) {
agme 0:27261dbc7ba7 24 for(j=0; j<N; j++) {
agme 0:27261dbc7ba7 25 C[i*N+j]=0;
agme 0:27261dbc7ba7 26 for(k=0; k<N; k++) {
agme 0:27261dbc7ba7 27 C[i*N+j]= C[i*N+j] + A[i*N+k]*B[k+j*N];
agme 0:27261dbc7ba7 28 }
agme 0:27261dbc7ba7 29 }
agme 0:27261dbc7ba7 30 }
agme 0:27261dbc7ba7 31 }
agme 0:27261dbc7ba7 32
agme 0:27261dbc7ba7 33
agme 0:27261dbc7ba7 34 int main()
agme 0:27261dbc7ba7 35 {
agme 0:27261dbc7ba7 36
agme 0:27261dbc7ba7 37 N=10;
agme 0:27261dbc7ba7 38 //Inicialize matrix
agme 0:27261dbc7ba7 39 for(i=0; i<N; i++) {
agme 0:27261dbc7ba7 40 for(j=0; j<N; j++) {
agme 0:27261dbc7ba7 41 A[i*N+j]=1;
agme 0:27261dbc7ba7 42 B[i+j*N]=1;
agme 0:27261dbc7ba7 43 }
agme 0:27261dbc7ba7 44 }
agme 0:27261dbc7ba7 45
agme 0:27261dbc7ba7 46 Thread thread1(process1_thread);
agme 0:27261dbc7ba7 47 Thread thread2(process2_thread);
agme 0:27261dbc7ba7 48
agme 0:27261dbc7ba7 49 //Print Results
agme 0:27261dbc7ba7 50 for (i=0;i<N;i++){
agme 0:27261dbc7ba7 51 for(j=0;j<N;j++){
agme 0:27261dbc7ba7 52 pc.printf("%d ",C[i*N+j]);
agme 0:27261dbc7ba7 53 }
agme 0:27261dbc7ba7 54 pc.printf("\n");
agme 0:27261dbc7ba7 55 }
agme 0:27261dbc7ba7 56 }