From 904e96b70374e48b519d24c77c43ef40b4d37b2f Mon Sep 17 00:00:00 2001 From: Trevor Barnes Date: Tue, 21 Feb 2023 18:22:20 -0600 Subject: [PATCH] lab 3 working --- .vscode/c_cpp_properties.json | 18 +++ .vscode/tasks.json | 29 +++++ 03-MatrixAddition (fork)/mat | 0 03-MatrixAddition (fork)/matAddFork | Bin 0 -> 21848 bytes 03-MatrixAddition (fork)/matAddFork.c | 156 +++++++++++++++--------- 03-MatrixAddition (fork)/matAddSingle | Bin 0 -> 20888 bytes 03-MatrixAddition (fork)/matAddSingle.c | 73 +++++++++++ CS3841.code-workspace | 6 +- 8 files changed, 223 insertions(+), 59 deletions(-) create mode 100644 .vscode/c_cpp_properties.json create mode 100644 .vscode/tasks.json delete mode 100644 03-MatrixAddition (fork)/mat create mode 100644 03-MatrixAddition (fork)/matAddFork create mode 100644 03-MatrixAddition (fork)/matAddSingle create mode 100644 03-MatrixAddition (fork)/matAddSingle.c diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json new file mode 100644 index 0000000..732e57b --- /dev/null +++ b/.vscode/c_cpp_properties.json @@ -0,0 +1,18 @@ +{ + "configurations": [ + { + "name": "Linux", + "includePath": [ + "${workspaceFolder}/**" + ], + "defines": [ + "CLOCK_REALTIME" + ], + "compilerPath": "/usr/bin/gcc", + "cStandard": "c17", + "cppStandard": "c++98", + "intelliSenseMode": "linux-gcc-x64" + } + ], + "version": 4 +} \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..ca4bbd1 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,29 @@ +{ + "tasks": [ + { + "type": "cppbuild", + "label": "C/C++: gcc-9 build active file", + "command": "/usr/bin/gcc-9", + "args": [ + "-fdiagnostics-color=always", + "-g", + "${file}", + "-o", + "${fileDirname}/${fileBasenameNoExtension}", + "-lrt" + ], + "options": { + "cwd": "${fileDirname}" + }, + "problemMatcher": [ + "$gcc" + ], + "group": { + "kind": "build", + "isDefault": true + }, + "detail": "Task generated by Debugger." + } + ], + "version": "2.0.0" +} \ No newline at end of file diff --git a/03-MatrixAddition (fork)/mat b/03-MatrixAddition (fork)/mat deleted file mode 100644 index e69de29..0000000 diff --git a/03-MatrixAddition (fork)/matAddFork b/03-MatrixAddition (fork)/matAddFork new file mode 100644 index 0000000000000000000000000000000000000000..dc780ad12d5c4bab1b610370e23190ff8e1daf9c GIT binary patch literal 21848 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 #include -#include +#include +#include +#include +#include #include +#include #include +#include #include -int main() { - int A[MAX][MAX], B[MAX][MAX], C[MAX][MAX]; - int i, j, k, sum = 0; - int shmid; - int *shm; +#define NS_PER_SEC 1000000000 +#define MAX 10 - // Allocate shared memory - shmid = shmget(IPC_PRIVATE, MAX * MAX * sizeof(int), 0666 | IPC_CREAT); - if (shmid < 0) { - perror("shmget"); +static inline uint64_t gettime_ns() { + struct timespec ts; + clock_gettime(CLOCK_REALTIME, &ts); + return ts.tv_sec * NS_PER_SEC + ts.tv_nsec; +} + +int main(int argc, char* argv[]) { + + // Debug args + //argv[1] = "matrices/matC"; + //argv[2] = "matrices/matD"; + + uint64_t start, end; + int rows, cols; + + // Matrix 1 + FILE* input1 = fopen(argv[1], "r"); + fscanf(input1, "%d", &rows); + fscanf(input1, "%d", &cols); + int * matrix1 = (int *)malloc(rows*cols*sizeof(int)); + for(int i = 0; i < rows*cols; i++) { + int value; + fscanf(input1, "%d", &value); + matrix1[i] = value; + } + fclose(input1); + + // Matrix 2 + FILE* input2 = fopen(argv[2], "r"); + fscanf(input2, "%d", &rows); + fscanf(input2, "%d", &cols); + + int * matrix2 = (int *)malloc(rows*cols*sizeof(int)); + for(int i = 0; i < rows*cols; i++) { + int value; + fscanf(input2, "%d", &value); + matrix2[i] = value; + } + fclose(input2); + + // Create shared memory object for result + int shm_fd = shm_open("MATRIX", O_CREAT | O_RDWR, 0666); + if (shm_fd == -1) { + perror("Error creating shared memory object"); exit(1); } - // Attach shared memory - shm = shmat(shmid, NULL, 0); - if (shm == (int *)-1) { - perror("shmat"); + // Resize shared memory object to fit result + if (ftruncate(shm_fd, rows*cols*sizeof(int))) { + perror("Error resizing shared memory object"); exit(1); } - // Initialize matrices A and B - for (i = 0; i < MAX; i++) { - for (j = 0; j < MAX; j++) { - A[i][j] = i + j; - B[i][j] = i - j; - } - } - - // Fork a child process - pid_t pid = fork(); - - if (pid == -1) { - perror("fork"); + // Map shared memory object to C + int *result = mmap(NULL, rows*cols*sizeof(int), PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0); + if (result == MAP_FAILED) { + perror("Error mapping shared memory object to C"); exit(1); } - else if (pid == 0) { // Child process - for (i = 0; i < MAX; i++) { - for (j = 0; j < MAX; j++) { - sum = 0; - for (k = 0; k < MAX; k++) { - sum += A[i][k] * B[k][j]; - } - *(shm + i * MAX + j) = sum; - } + + // Allocate Memory for pids + int* pids = (int*)malloc(rows*sizeof(pid_t)); + + + // Perform Forked Process Matrix Addition + start = gettime_ns(); + for (int i = 0; i < rows; i++) { + pids[i] = fork(); + if(pids[i] == -1) { + // Fork error + perror("Error with creating process\n"); + return 1; + } + if(pids[i] == 0) { + // Child process + for(int j = 0; j < cols; j++) { + result[i*cols+j] = matrix1[i*cols+j] + matrix2[i*cols+j]; + } + //printf("%d",pids[i]); + return 1; } - exit(0); } - else { // Parent process - wait(NULL); + end = gettime_ns(); + for (int i = 0; i < rows; i++) { + waitpid(pids[i], NULL, 0); + } + end = gettime_ns(); - // Retrieve result from shared memory - for (i = 0; i < MAX; i++) { - for (j = 0; j < MAX; j++) { - C[i][j] = *(shm + i * MAX + j); - } - } - - // Print result matrix C - printf("Matrix C:\n"); - for (i = 0; i < MAX; i++) { - for (j = 0; j < MAX; j++) { - printf("%d ", C[i][j]); - } + // Print result to console + for (int i = 0; i < rows * cols; i++) { + printf("%2d ", result[i]); + if ((i + 1) % cols == 0) { printf("\n"); } - - // Detach and remove shared memory - shmdt(shm); - shmctl(shmid, IPC_RMID, NULL); - munmap(shm); } - return 0; + printf("Addition took %" PRIu64 " nanoseconds\n", end - start); + + free(matrix1); + free(matrix2); + + // Unmap and unlink shared memory object + munmap(result, rows*cols*sizeof(int)); + close(shm_fd); + shm_unlink("MATRIX"); } \ No newline at end of file diff --git a/03-MatrixAddition (fork)/matAddSingle b/03-MatrixAddition (fork)/matAddSingle new file mode 100644 index 0000000000000000000000000000000000000000..77ca0665fd7c80b21b8901e2f40763344de41661 GIT binary patch literal 20888 zcmeHPe{dUDoqsENZ7H^8#XnLffkthUCZ$-mQzx~PrnMa_kz1!t+Za;Xu#qL%)QK{8d~P5aI7six5$=G7BZS;tJC{z&;1cMs;qKBK4#IUfdK^C-I3T1HTA(e9vq z7A%-@dAGt&b&=9|Yr@@pn<{UyemJP&&s2q1G$#`S8{3+bv8H4ql^bgsYv0(ku`QTQ z2iMDjsa{kDjj8Q7_Y1h0Axwo)_C>woNxuHL`!~04y6O5)Hof$NZ=I|B_^*4rKf*q! zOwyr5_BaA|!A}AYETG@Ii2f~$;9ZO0 zbXi%bKJQorPcDML06c)hnZf`T@?W_K{vF@}9L}@{0L5rt!nlaiFxV&t)1&c}FpR7j ziS9F^!~2ZENFpglb7pink`besM9Lh5JdsUDJ35TPY&4P@6ob)ZIvW=wkz_I*6<}aH z6gSPpNF2J+v4}C4NJWx~dx)jN$bZH(Mk0xn7|g`uVtZe2_f}(lu&t15y|$2@%dHP? z5JvB=9Y!pki4P^RW<0ZN$JS&z72g#ZNRs!Vk#tIVH!Rf!6%hiL9EWaZVh7=KHk{58PG@a+6@w*O zia;p>r3jQFP>Mh)0{<@}@Jh|4zYS0Rw3q!z8(Q{y+2i{9(z{1n1)U7YjU1Y%ZREy1>)K>*D#pEATYIxp@B51)e50 z7tbFl@HC;hc>aS0o+dIE&%dw0(*)+?`3Uot&8h=vy*Q&N^n0cLhHfHPy&0am5PtgSH-w*l z%^lXB3BUNJSq}%ga^T6oJSgMB_SAm|wvbrluI>*{Zux!_vf-&8npNTHEk6P?`|z9j z{A>)ten$T;cx?}C3+0pj`MV+PhYbc&AQql3TeD932)))i6FwArIXv~uR{)6FkHAxS z8bIQ#c;PQLBRd<`&W5LVycP>zQzflTeRc|3&z~X3%IE0R2ObGeez+K@d*(b;3=&r$wXD?dy55c0BI=gDv{ z1kaxt4A!jr5LI4Y-@4x22mfn@=z3T0)VI3&d#7IQ+SN7n`~L8urW1f~@4M;^x~9*r z`YlR+`VF_as`Vvxz37{|*f;g_o~a*qb0y-V#|3u-RK~|^qQ;I+-0;LF)B2bDzDFUSklp^pa76DB@*%2Zm*2Kh`^|64e ze^)G)Fcaxiz)Yw21=b{Ufm9@g2UpQ_Dwf66R$J-b+y`A+iqHNcpFaS4@IpR+9P}vY z4CuOF=JUg#OE2d0=RhN%uYr!en$I_4%{vRaS3Mk|XQh<1du|ijm|t62RpB`d8R7H} zz-joz8efQ>3i*g>HL`6u_M+@#pu*?h=4-sMrt)sj0dd2MP4Bp7wS0U>_IKep2R(i^ zMe2l`IL-n;On^#M)s`~2NLk9>|+kMr3jQFP>Mh)0;LH2$wq+RXXE$R z)H0~>u2>bfOf6dQm`bK~%PhKF@%*0LO2yN9jM55=2!3CV)-{w^{_30gH1Wr14THpM zj24yQcgmhqa(eDT=@p9zepjqf@ePVHQD$OHy+_9Hy3sn260N@|@jGglSghEs0LG81 zig3MWlpepc$K_wDaMr_P6WKn*RYG`#C;71QhbNXSmzG#wN`AGHzpi+0hjRaaM)-Yh zr^6Q2-<^u?RCKSRqlz9-^su7G6g{P=)9)YRJ)M@u_N`kt1=jTstXUgz`d$E*h|| z7cc1maeFFgS?w;X=mjbBxHZofn7UmRZxXDP-yk{tCJ?<$$7{DR(FY-Oy`3aYE6EFT z$RAyvr2P8{e|V+LKT7#yD`fsZP%rn_E~9+8=W#O7%C|vYL3xiCxpQT$o-nBQAs}Vf zRK!7qmm*NM(fcJ3kN0k3u9b}6`v7#y+9lKI9Yt%)IwTYD{+QG@NoJjw-sdmdESVPX zdXiixnRf3-iP<8VPA|PGP}V7#u=i)=x=S)Uy&ol}TQa-7ZN&5}i-7F)(y3Xtt$qm1 zu$KmTSynr2KkzBRfFgi%b$kck~c~1YG38^V9GsrK~nA^ zK^1iv)vKENp3q%jD!(AJla%e3x*x``)crg%Qnya{zDZhBzQ?5ob+&IaiYfmyiTIu% zc-qRp3eAcYRWt~yUIqRW95tfid!*udiiE#F*0&Bn6)RVe)U^sfo|W}k2r)_{Af6~7 zzjukJ3!(9T8%24msy+dM@cs)i{)WFHEjkbAYFb63jP_~B>T1F_fc%nA`NAN+TDV$r zOjgMEF6b@!^imqkz8L9z&eEwTos*W%ZqoUZ)ba0wj^@{?F%PSAS>ECTuRU@-&fcYO zz*6)3NW*>Pp^2q4l3zhG_mKk=wGHH<)>jVVIuN0i=tS)|$=k9@3cLHrsfpTEXuP((vPXJ9JyH7-$uF03*OAWJ50SeorPy^OTsuMD zS`@px{+)FYBhe71^bff7)Fp(rqS`9&*hIqyrLw`&5VdEJ(N-#jM{p+8zwYqzy7IDC zDSc+5!KMDnioL9}d$~`k7^(RW&c=^-FDLV*y3NXk z|NmOM8v^P8c(`>0)K?+~wH0LDU}X`*AezBSg#u7|f`*@1Lt{_-ov#|da(f){&ADub zHU>2hMWfBw5oBy^Q`>`vQn}`i=0qx*%*EnD>M3Tv-arB!^oLcN&GFHAv7*4X5fgXj zZ%?F#lJQ^^wG~-27K;xChiT?0Es#YEvSub1HH~e(eIWoC3UfJFB+>vel(XYmBc915 zu{(s#V)*-P%Hb!)h;&5zQ?jG+sO5|}%Y)F@2(OC=q1&t7uj@b3eV#gf*^T;IQ@`Ry zUEAWh(-YJ$J+Ie8=()r5MSU%fx1G?dU(t0__X<~;yG8dC0bVcZbr^x*`}MbhXgBKE zbyB7s-lJdoWxJP?f25b{FY8x+TVIJ9yh=5oGThDjRYW|y^%_M3l3u6R5e@2B5NXm^ zf)pyGSKg)jzC%7PZPvY>>vX^8CcR-$uex8azDZvTRo7qYm)b4%dQLw1q^^1Da1Lsk zVWbBK4HLU>ZZR_PNX!^DGXi^wXtPfidw@uk9ZqM=f!v_Tr0>p3O)$nl1iOf^n`bB> ze{!j8Vki}l1!(qT7}P=cV5^T!Lkb2H$#^O~R~%iTF{Uz!vGu|jOh$(03LudY&1H;e zI++{6MkiD;nvTVz`%yqT8KatK|T-mZ3QOC!$~@ndtBqYx7>9X(-S%7|D*OqQjYVDxJ$VET$@V06&N3v<7b!ZR|WM6fq(9J{`fNh3?0r25$k zgbXhlD>r~y1AtCZ*u)~^$;8kwbt9dJ8{1%KJ5kYm8Rx7h1WxWZvw|smnWCMD#o@_} z2tIR#v0t{6`%Ml#>AW!bTMMz+*W#Jne-bC|A%507{_h;joZ1b*6 ze1AIA+>?&xM&cS@*?j#naqoiqdSM-Iw{c^~ zC$GPY@e0A~^kUp2c>P+8dj+q1i}59b*Vn~(Wnmp&j91NV@Uscr*bN@=+W?hyW9RD3 zf_RNMyCCi_>^rx6bBm>d?|T&En572nh?RGXy28F_a;eJQ4K4vzZcErlNahJxwAkKGlif!D5-SAHQ?ZtrN+=B0l6pP(rRWVS| z56r_ctH4CzmwBfEBLSn|FAl5k1h5=aNQuul@XHj=_q$mCT4Xd^9H=}>+i+-Ne*8y( zQ@MrvXQYfYjzbgk`|&97h3fw(aPq@57tE7oTCBZ)52=RnbAlS;NDKL&kva|Y#?Onu zH8Fqu&_Woq(|P0YXA)mvJfotxD$N^jH)8JR67$c~WzerhdjsnJAyyzVT`6(J*hu># z_zvI!n;vJEpxl6%Kh6`2`1#Nx_+J6{!;ka4`0OJ30m5DLuMbZwqW^D;;O7^?J!luz z$9euX$o6vU=jdwSOI^za-%n#nE8#Tw0~UhGw@jVDsb5YtSUfH7DD9NEmAC(X1B@T% zOJk=U#ac@F;qP`dD{%}s={w^&s`Q-;{oEqu(v2Kym($P3fCq}JBDs^mFJAx`(Ttfj zb9lo%D&{t(8|H|Ct?((VcQF4+8$-$TKqP6zFbB&Tk=z*O1tX)$xEYTH+gmnbKDdw) zZJbXSkxV8sZeWg(8OL^c{P7#H+{nl{Ol+J1O|wYVv9PkwT8wSCb?pclp__XQY?CiG z#T2>cj+?u7^lmMdSW_6o!0glrg_VbJ&uzlk-girPSD$gqwr#hEb{V_6y8A-pRqphU zW^=L;a-V-^CvWtpo&4&n0>$84Z|^Vq?!cVkwZ$JDm=oYD0!Ca;8Le*=%t_>@1RUQv zn3J}tPaVu5mcHZT1x_)QWPN=A%`g5Gff385jp0ZtMxQC5=_suz44Qb_BSn3PSsi^x z!RdP-n^mr@&nD298k{=#7y|bxeI;SRPahP2kfGRv2xiAeFrx-FGZr1@9A@G1%%}*a zu#gDi-arsbiqUw+9JfIOxdgs0l87m&tGgHLkRc(}hq2BO!Ps~TMOYNeLMhpg*)Ucf zMT`MiCZ3Ftfy#|yRvVN73L+aEN`s{gtxAGsd<-m|EznNO9uLNc)%h_TgE!_ZAJ&Ot zS#TajMMe^EW|<@4B8ZceCg;H71Gyn+Mp8pKqZOM-4W>CC85qEXo;iGBCC+(7aG|Tl z{~Dti6fWubFSHWR-9sHoGPZr1-A&#<`u{G5*|m#-do6`l*S+XynaMOSD)uS1v) zQ*e=}j+Ev0<8GTw3H(x%xqM!)Fnz^REBq>V1^#`=(K9->=XDKJp4oE!S&!*`u%~B! z%=7w(DbM$u_2&v4LWW|>_PkDFI-?Z1d}sUV_C48mD?NU$$@HAfo?_;-|1>a)3H!&N zxRn%jt`MC4|A@mrpzN3)Q|_2J+>1vY_A^R>DeEt0f68Ic>piB2*-%mT$Mgw@JuYxgQTt3fx{mR~{Pi5H?J*Xv2sTV|Se{}(|GHlOug|c_3iOtHP(=Xex{#A?E z?^A|jyZ}@NPJ4R%>cmL(ztm%{W{1$himi*-*QyhTo*&zj)BYA^?`-Ephh_C3cZ_nv z_IBzhLTY-{_oIf@z`Go18xHPI{{Qj +#include +#include +#include + + +#define NS_PER_SEC 1000000000 + + +static inline uint64_t gettime_ns() { + struct timespec ts; + clock_gettime(CLOCK_REALTIME, &ts); + return ts.tv_sec * NS_PER_SEC + ts.tv_nsec; +} + +int main(int argc, char* argv[]) +{ + uint64_t start, end; + int rows, cols; + + // Matrix 1 + FILE* input1 = fopen(argv[1], "r"); + fscanf(input1, "%d", &rows); + fscanf(input1, "%d", &cols); + int * matrix1 = (int *)malloc(rows*cols*sizeof(int)); + for(int i = 0; i < rows*cols; i++) { + int value; + fscanf(input1, "%d", &value); + matrix1[i] = value; + } + fclose(input1); + + // Matrix 2 + FILE* input2 = fopen(argv[2], "r"); + fscanf(input2, "%d", &rows); + fscanf(input2, "%d", &cols); + + int * matrix2 = (int *)malloc(rows*cols*sizeof(int)); + for(int i = 0; i < rows*cols; i++) { + int value; + fscanf(input2, "%d", &value); + matrix2[i] = value; + } + fclose(input2); + + + start = gettime_ns(); + int * result = (int *)malloc(rows*cols*sizeof(int)); + + // Perform Single Process Matrix Addition + for(int i= 0; i < rows*cols; i++){ + result[i] = matrix1[i] + matrix2[i]; + } + + end = gettime_ns(); + + // Print result to console + for (int i = 0; i < rows * cols; i++) { + printf("%2d ", result[i]); + if ((i + 1) % cols == 0) { + printf("\n"); + } + } + + + printf("Addition took %" PRIu64 " nanoseconds\n", end - start); + + free(matrix1); + free(matrix2); + free(result); +} + + diff --git a/CS3841.code-workspace b/CS3841.code-workspace index 813e2f5..77c9d77 100644 --- a/CS3841.code-workspace +++ b/CS3841.code-workspace @@ -6,7 +6,11 @@ ], "settings": { "files.associations": { - "stdio.h": "c" + "stdio.h": "c", + "mataddsingle": "c", + "stdint.h": "c", + "inttypes.h": "c", + "wait.h": "c" } } } \ No newline at end of file