FRDM-K64F Code Share
/
MatrixMultiplicationThreads
Matrix Multiplication with 2 threads
main.cpp@0:27261dbc7ba7, 2014-08-08 (annotated)
- Committer:
- agme
- Date:
- Fri Aug 08 00:56:15 2014 +0000
- Revision:
- 0:27261dbc7ba7
Initial Commit
Who changed what in which revision?
User | Revision | Line number | New 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 | } |