Skip to main content

Lab2

Complied C Lab

In this lab, we were asked to compile a C program, using gcc command with different options.

At the beginning of this lab, we wrote a simple C program that prints a message:

Then using gcc command and the following compiler options to compile the program:
-g               # enable debugging information
-O0              # do not optimize (that's a capital letter and then the digit zero)
-fno-builtin     # do not use builtin function optimizations

Note that the size of file is 73088 bytes

We can use objdump --source a.out command to show source code, the source code is under <main> section. And readelf -p .rodata a.out contains the string to be printed.


Then we add the option "-static" to recompile the program, found out the size is changed to 696264 bytes, which is bigger than the original program. And section headers are also increased.

Next, I removed the builtin function optimization by remove option "-fno-builtin", and rebuilt the program. Note that the size is smaller than using the built-in function to 696256 bytes.

Then I disabled debugging information by removing option "-g"
Note that the size is smaller to 693840 bytes
And there are also more section headers and disassembly outputs.

With adding a number to the argument of printf() function, we note the argument is assigned to a register and added to a stack, and moved.

Finally, I added an option "-O3" instead of "-O0", which is stand to optimization level to 3, I found that the size is not changed, but the lines are less than original.

Comments

Popular posts from this blog

Lab 5

In this lab, we are going to use different approaches to scale volume of sound, and the algorithm’s effect on system performance. Here is some basic knowledge of digital sound: Digital sound is usually represented by a signed 16-bit integer signal sample, taken at a rate of around 44.1 or 48 thousand samples per second for one stream of samples for the left and right stereo channels. In order to change the volume of sound, we will have to scale the volume factor for each sample, the range of 0.00 to 1.00 (silence to full volume). Here is the source code I got from professor: (vol1.h) ------------------------------------------------- #include <stdlib.h> #include <stdio.h> #include <stdint.h> #include "vol.h" // Function to scale a sound sample using a volume_factor // in the range of 0.00 to 1.00. static inline int16_t scale_sample(int16_t sample, float volume_factor) { return (int16_t) (volume_factor * (float) sample); } int main() { // Al

Lab 6A

This lab is separated into two parts, I'll blog my work in different post. In the first part, we've got a source code from professor Chris, which is a similar stuff to our lab5, scaling the volume of sound, but it includes inline assembler. The first thing I'll do is add a timer to the code in order to check the performing time. Build and run the program, here is the output: ------------------------------------------------------------------------- [qichang@aarchie spo600_20181_inline_assembler_lab]$ ./vol_simd Generating sample data. Scaling samples. Summing samples. Result: -462 Time: 0.024963 seconds. ------------------------------------------------------------------------- Then I adjusted the number of samples to 5000000 in vol.h: ------------------------------------------------------------------------- [qichang@aarchie spo600_20181_inline_assembler_lab]$ cat vol_simd.c // vol_simd.c :: volume scaling in C using AArch64 SIMD // Chris Tyler 2017.11.29-2018