Posts

Showing posts with the label SPO600

Project: Final

Introduction In this post, I will describe the summary of how I have done each stage. The purpose of this post is for wrapping up this project. The purpose of the project is the optimization of one open-source project. I need to compile, benchmark, profiling, and optimize the software. The detailed information about the project is described in the  SPO600 winter project .  Previous posts related to this project The previous posts for this project are listed below. You can read the detailed steps of how I have done each stage. Stage 1 Project Stage 1 - Compiling and Benchmark Butteraugli Stage 2 Project Stage 2 - Profiling Butteraugli Project Stage 2: Profiling (x86_64) The links for the results Project: Organize the Results Stage 3 Project Stage 3: Optimization Stage 1 Stage 1 is for building and benchmarking the performance of an open-source software package. There are some requirements for the open-source package I need to consider. Firstly, the time f...

Project Stage 3: Optimization

Image
Introduction This is a report for the project stage 3, optimization. Before you read this post, it is vital to read stage 1  (compile and benchmark) and stage 2 reports (profiling under Aarch64 and x86_64 architecture ) because those are the previous steps for this report. If the results images are not shown on the reports, this is the additional post for this blog which contains the links for each result. The Project I Selected: Butteraugli The Butteraugli is the project Google created. It estimates the psychovisual similarity of two images. The detailed information about this project is described on the  Google Opensource website about the Butteraugli . The source code for this project is located here:  GitHub - Butteraugli . Discover the Points of the Optimization In stage 2, the results of the profiling show that butteraugli::Convolution is the function that takes the most of the time for compiling. Also, the command perf discovers 'ldr' is the code th...

Project: Organize the Results

Introduction This blog is for organizing all the results I have done in Stage 1 and Stage 2 ( Aarch64 profiling and x86_64 profiling ). As I have found that the images I put on the blogs sometimes are not shown on the screen, I think this organization can be helpful for the readers to understand what the result of each stages. I put the links for each stage's results. Benchmark result Profiling result On the next blog, I will post what points I can optimize this project based on the profiling results.

Project Stage 2: Profiling (x86_64)

Image
Introduction As the profiling I have done on the previous blog was using Aarch64 architecture, I will do profiling in x86_64 architecture and describe the result. I recommend to take a look at the previous blogs related to this project: Project Stage 1 - Compining and Benchmarking Butteraugli and Project Stage 2 - Profiling Butteraugli The Project I Selected: Butteraugli The Butteraugli is the project Google created. It estimates the psychovisual similarity of two images. The detailed information about this project is described on the Google Opensource website about the Butteraugli . The source code for this project is located here: GitHub - Butteraugli . How to use gprof and perf The detailed process of how to use gprof and perf for Butteraugli profiling is described in the Project Stage 2 - Profiling Butteraugli .  Result of the prof in x86_64 architecture Image size: 5mb Image size: 10mb Result of the perf in x86_64 architecture Image size: 5mb Image siz...

Project Stage 2 - Profiling Butteraugli

Image
Introduction This post is about the  project  I am working on in the SPO600 class. The project is about the optimization an open-source software. I need to build, benchmark, profile, and optimize selected open-source software. The software I have selected is named 'Butteraugli'.  The 'Butteraugli' is the project Google created that estimates the psychovisual similarity of two images. The detailed information about this project is written on the Google Opensource website about the Butteraugli . The way to compile this project and the result of benchmarking this project are written in my previous post: Project Stage 1 - Compiling and Benchmarking Butteraugli . I recommend you to read this previous post to understand this post. Profiling Options There are two representative ways to profile the software: gprof and perf. The gprof  is a performance analysis tool for Unix application. It used a hybrid of both instrumentation and sampling. The perf is a profiler to...

Lab 6 - Algorithm Selection Lab

Image
Introduction This post is the contents of experiments I found during the lab 6. Lab 6 is the Algorithm Selection Lab. I observed different types of algorithms, compiled them, and checked what are the differences. The detailed contents will be described below. Lab 6 There are three source files name 'vol1.c', 'vol2.c', and 'vol3.c' that contains different types of algorithm. The algorithms are to change the volume of the digital sound. The basic or Naive algorithm ( vol1.c ). This approach multiplies each sound sample by 0.75, casting from signed 16-bit integer to floating point and back again. Casting between integer and floating-point can be  expensive  operations. A lookup-based algorithm ( vol2.c ). This approach uses a pre-calculated table of all 65536 possible results, and looks up each sample in that table instead of multiplying. A fixed-point algorithm ( vol3.c ). This approach uses fixed-point math and bit shifting to perform the multiplication w...

Project Stage 1 - Compiling and Benchmark Butteraugli

Image
Introduction This post is about the project I am working on the SPO600 class. I will benchmark one open-source, profile it, and optimize the project. The requirements for this project are the following: The running time has to be more than 4 minutes The open-source software package has to include a CPU-intensive function or method The open source software package has to implement in a language that compiles to machine code (such as C, C++, or Assembler) The detailed project instruction can be found on the  Winter 2020 SPO600 Project , I had the struggle to find a proper open-source with the requirement. I narrowed down the type of software I want to work on and found the open-source that is proper for this project. I will describe what is a project I selected, the ways I build and compile the open-source, how to benchmark the project. The Project I Selected: Butteraugli The Butteraugli is the project Google created. It estimates the psychovisual similarity of two images...