diff --git a/lec10/coredump.c b/lec10/coredump.c new file mode 100644 index 0000000000000000000000000000000000000000..97c148287a9ea88abb6d98004544629aee8c35e2 --- /dev/null +++ b/lec10/coredump.c @@ -0,0 +1,4 @@ +int main() +{ + int a = 10/0; +} diff --git a/lec10/gprof.32.txt b/lec10/gprof.32.txt new file mode 100644 index 0000000000000000000000000000000000000000..59e5fdf5d68dfa2f0cab93fc770bf003a506a5bf --- /dev/null +++ b/lec10/gprof.32.txt @@ -0,0 +1,156 @@ +Flat profile: + +Each sample counts as 0.01 seconds. + % cumulative self self total + time seconds seconds calls ns/call ns/call name + 40.94 0.57 0.57 main + 33.40 1.04 0.47 171798692 2.72 2.72 fxMul2 + 21.55 1.34 0.30 171798692 1.76 1.76 fxMul1 + 4.67 1.41 0.07 frame_dummy + + % the percentage of the total running time of the +time program used by this function. + +cumulative a running sum of the number of seconds accounted + seconds for by this function and those listed above it. + + self the number of seconds accounted for by this +seconds function alone. This is the major sort for this + listing. + +calls the number of times this function was invoked, if + this function is profiled, else blank. + + self the average number of milliseconds spent in this +ms/call function per call, if this function is profiled, + else blank. + + total the average number of milliseconds spent in this +ms/call function and its descendents per call, if this + function is profiled, else blank. + +name the name of the function. This is the minor sort + for this listing. The index shows the location of + the function in the gprof listing. If the index is + in parenthesis it shows where it would appear in + the gprof listing if it were to be printed. + +Copyright (C) 2012-2018 Free Software Foundation, Inc. + +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. + + Call graph (explanation follows) + + +granularity: each sample hit covers 2 byte(s) for 0.71% of 1.41 seconds + +index % time self children called name + <spontaneous> +[1] 95.4 0.57 0.77 main [1] + 0.47 0.00 171798692/171798692 fxMul2 [2] + 0.30 0.00 171798692/171798692 fxMul1 [3] +----------------------------------------------- + 0.47 0.00 171798692/171798692 main [1] +[2] 33.2 0.47 0.00 171798692 fxMul2 [2] +----------------------------------------------- + 0.30 0.00 171798692/171798692 main [1] +[3] 21.4 0.30 0.00 171798692 fxMul1 [3] +----------------------------------------------- + <spontaneous> +[4] 4.6 0.07 0.00 frame_dummy [4] +----------------------------------------------- + + This table describes the call tree of the program, and was sorted by + the total amount of time spent in each function and its children. + + Each entry in this table consists of several lines. The line with the + index number at the left hand margin lists the current function. + The lines above it list the functions that called this function, + and the lines below it list the functions this one called. + This line lists: + index A unique number given to each element of the table. + Index numbers are sorted numerically. + The index number is printed next to every function name so + it is easier to look up where the function is in the table. + + % time This is the percentage of the `total' time that was spent + in this function and its children. Note that due to + different viewpoints, functions excluded by options, etc, + these numbers will NOT add up to 100%. + + self This is the total amount of time spent in this function. + + children This is the total amount of time propagated into this + function by its children. + + called This is the number of times the function was called. + If the function called itself recursively, the number + only includes non-recursive calls, and is followed by + a `+' and the number of recursive calls. + + name The name of the current function. The index number is + printed after it. If the function is a member of a + cycle, the cycle number is printed between the + function's name and the index number. + + + For the function's parents, the fields have the following meanings: + + self This is the amount of time that was propagated directly + from the function into this parent. + + children This is the amount of time that was propagated from + the function's children into this parent. + + called This is the number of times this parent called the + function `/' the total number of times the function + was called. Recursive calls to the function are not + included in the number after the `/'. + + name This is the name of the parent. The parent's index + number is printed after it. If the parent is a + member of a cycle, the cycle number is printed between + the name and the index number. + + If the parents of the function cannot be determined, the word + `<spontaneous>' is printed in the `name' field, and all the other + fields are blank. + + For the function's children, the fields have the following meanings: + + self This is the amount of time that was propagated directly + from the child into the function. + + children This is the amount of time that was propagated from the + child's children to the function. + + called This is the number of times the function called + this child `/' the total number of times the child + was called. Recursive calls by the child are not + listed in the number after the `/'. + + name This is the name of the child. The child's index + number is printed after it. If the child is a + member of a cycle, the cycle number is printed + between the name and the index number. + + If there are any cycles (circles) in the call graph, there is an + entry for the cycle-as-a-whole. This entry shows who called the + cycle (as parents) and the members of the cycle (as children.) + The `+' recursive calls entry shows the number of function calls that + were internal to the cycle, and the calls entry for each member shows, + for that member, how many times it was called from other members of + the cycle. + +Copyright (C) 2012-2018 Free Software Foundation, Inc. + +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. + +Index by function name + + [4] frame_dummy [2] fxMul2 + [3] fxMul1 [1] main diff --git a/lec10/gprof.64.txt b/lec10/gprof.64.txt new file mode 100644 index 0000000000000000000000000000000000000000..8584f99394287f4062d290a1043481ed850c4f4a --- /dev/null +++ b/lec10/gprof.64.txt @@ -0,0 +1,156 @@ +Flat profile: + +Each sample counts as 0.01 seconds. + % cumulative self self total + time seconds seconds calls ns/call ns/call name + 34.36 0.41 0.41 main + 32.68 0.80 0.39 171798692 2.28 2.28 fxMul2 + 29.75 1.16 0.36 171798692 2.08 2.08 fxMul1 + 3.77 1.21 0.05 frame_dummy + + % the percentage of the total running time of the +time program used by this function. + +cumulative a running sum of the number of seconds accounted + seconds for by this function and those listed above it. + + self the number of seconds accounted for by this +seconds function alone. This is the major sort for this + listing. + +calls the number of times this function was invoked, if + this function is profiled, else blank. + + self the average number of milliseconds spent in this +ms/call function per call, if this function is profiled, + else blank. + + total the average number of milliseconds spent in this +ms/call function and its descendents per call, if this + function is profiled, else blank. + +name the name of the function. This is the minor sort + for this listing. The index shows the location of + the function in the gprof listing. If the index is + in parenthesis it shows where it would appear in + the gprof listing if it were to be printed. + +Copyright (C) 2012-2018 Free Software Foundation, Inc. + +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. + + Call graph (explanation follows) + + +granularity: each sample hit covers 2 byte(s) for 0.83% of 1.21 seconds + +index % time self children called name + <spontaneous> +[1] 96.2 0.41 0.75 main [1] + 0.39 0.00 171798692/171798692 fxMul2 [2] + 0.36 0.00 171798692/171798692 fxMul1 [3] +----------------------------------------------- + 0.39 0.00 171798692/171798692 main [1] +[2] 32.5 0.39 0.00 171798692 fxMul2 [2] +----------------------------------------------- + 0.36 0.00 171798692/171798692 main [1] +[3] 29.6 0.36 0.00 171798692 fxMul1 [3] +----------------------------------------------- + <spontaneous> +[4] 3.8 0.05 0.00 frame_dummy [4] +----------------------------------------------- + + This table describes the call tree of the program, and was sorted by + the total amount of time spent in each function and its children. + + Each entry in this table consists of several lines. The line with the + index number at the left hand margin lists the current function. + The lines above it list the functions that called this function, + and the lines below it list the functions this one called. + This line lists: + index A unique number given to each element of the table. + Index numbers are sorted numerically. + The index number is printed next to every function name so + it is easier to look up where the function is in the table. + + % time This is the percentage of the `total' time that was spent + in this function and its children. Note that due to + different viewpoints, functions excluded by options, etc, + these numbers will NOT add up to 100%. + + self This is the total amount of time spent in this function. + + children This is the total amount of time propagated into this + function by its children. + + called This is the number of times the function was called. + If the function called itself recursively, the number + only includes non-recursive calls, and is followed by + a `+' and the number of recursive calls. + + name The name of the current function. The index number is + printed after it. If the function is a member of a + cycle, the cycle number is printed between the + function's name and the index number. + + + For the function's parents, the fields have the following meanings: + + self This is the amount of time that was propagated directly + from the function into this parent. + + children This is the amount of time that was propagated from + the function's children into this parent. + + called This is the number of times this parent called the + function `/' the total number of times the function + was called. Recursive calls to the function are not + included in the number after the `/'. + + name This is the name of the parent. The parent's index + number is printed after it. If the parent is a + member of a cycle, the cycle number is printed between + the name and the index number. + + If the parents of the function cannot be determined, the word + `<spontaneous>' is printed in the `name' field, and all the other + fields are blank. + + For the function's children, the fields have the following meanings: + + self This is the amount of time that was propagated directly + from the child into the function. + + children This is the amount of time that was propagated from the + child's children to the function. + + called This is the number of times the function called + this child `/' the total number of times the child + was called. Recursive calls by the child are not + listed in the number after the `/'. + + name This is the name of the child. The child's index + number is printed after it. If the child is a + member of a cycle, the cycle number is printed + between the name and the index number. + + If there are any cycles (circles) in the call graph, there is an + entry for the cycle-as-a-whole. This entry shows who called the + cycle (as parents) and the members of the cycle (as children.) + The `+' recursive calls entry shows the number of function calls that + were internal to the cycle, and the calls entry for each member shows, + for that member, how many times it was called from other members of + the cycle. + +Copyright (C) 2012-2018 Free Software Foundation, Inc. + +Copying and distribution of this file, with or without modification, +are permitted in any medium without royalty provided the copyright +notice and this notice are preserved. + +Index by function name + + [4] frame_dummy [2] fxMul2 + [3] fxMul1 [1] main diff --git a/lec10/test.c b/lec10/test.c new file mode 100644 index 0000000000000000000000000000000000000000..16f9cf84ccc7e128ccdb1a792aef5680f8e3fe5f --- /dev/null +++ b/lec10/test.c @@ -0,0 +1,50 @@ +#include <stdio.h> +#include <math.h> +// #### #### #### #### . #### #### #### #### - 32bit +// Sbit 15bit . 16bit +#define FX_Q_NUM 16 +#define FX_2_MINUS_16 1.52587890625e-05F +#define FX_2_PLUS_16 (1<<16) +#define FX_S_15_16 11516 // 1:singed 15 16 +#define FX_SYSTEM FX_S_15_16 + +typedef int fixed32; + + +fixed32 fromFloat(float fa) +{ + return (fixed32) (fa * FX_2_PLUS_16); +} +float toFloat(fixed32 xa) +{ + return ((float) (xa)) * FX_2_MINUS_16; +} +fixed32 fxAdd(fixed32 a, fixed32 b) +{ + //return fromFloat((toFloat(a) + toFloat(b))); + return (fixed32) + ( FX_2_PLUS_16 * + (((float) (a)) * FX_2_MINUS_16) + + (((float) (b) * FX_2_MINUS_16)) + ); +} +fixed32 fxAdd2(fixed32 a, fixed32 b) +{ + return a+b; +} + +int main() +{ + long long i=0; + int ia, ib, ic, ic2; + float fa; + //fscanf(stdin, "%d %d", &ia, &ib); + for (i=0; i< (long long)256*256*256*256; i+=(25)) + { + ic = fxAdd(i, i); + ic2 = fxAdd2(i, i); + //fprintf(stdout, "%f + %f : %f, %f diff=%d\n", toFloat(i), toFloat(i),toFloat(ic),toFloat(ic2),ic-ic2); + } + +} + diff --git a/lec10/test2.c b/lec10/test2.c new file mode 100644 index 0000000000000000000000000000000000000000..6dbe81794ad0a9462a7ba21ec4659e616a0cfa10 --- /dev/null +++ b/lec10/test2.c @@ -0,0 +1,27 @@ +#include <stdio.h> + +int fxMul1(int a, int b) +{ + return a*b; +} + +int fxMul2(int a, int b) +{ + return (int)((long long) a * (long long) b) ; +} + +int main() +{ + long long i=0; + int ia, ib, ic, ic2; + float fa; + // fscanf(stdin, "%d %d", &ia, &ib); + for ( i = 0; i < (long long) 256*256*256*256; i+=(25)) + { + ic = fxMul1(i, i); + } + for ( i = 0; i < (long long) 256*256*256*256; i+=(25)) + { + ic = fxMul2(i, i); + } +}