Posts

Improve Lab 2

In this post, I will enhance the Lab 2 . The previous work can be found  here . This post will cover two main parts:      1. Improving the calculation performance.     2. Sharing experiences and reflections Improving the calculation performance Detailed information about the calculation performance can be found in this post . Following the professor 's feedback, it was identified that the previous fast version had a issue that it destroys all memory. Consequently, I have updated the code. To reduce the execution time, the iterated part(loop) should be used as minimum as possible. Each sta ($40), y command that utilizes indirect indexed addressing is repeated a total of six times. Instead of using indirect indexed addressing, replacing it with absolute addressing might significantly reduce the execution time. The following is the code with the applied changes. lda #$07 ldy #$00 loop: sta $0200,y iny sta $0300,y iny

Big Data Unveiled

Today, let's embark on a journey to demystify the fascinating world of big data. If you're new to this concept, fear not – we'll break it down into simple terms that anyone can understand. What is Big Data? Big data is like a gigantic puzzle made up of lots and lots of tiny pieces. These pieces are information, and there's so much of it that regular tools can't handle it. It's not just about the amount of data; it's also about the speed at which it comes in and the different types it can be – like numbers, text, pictures, and more. Three Key Aspects of Big Data 1. Volume: Think of a big library with countless books. That's a lot of information! Big data deals with massive amounts of data, much more than you could fit in your backpack. 2. Velocity: Imagine information coming at you like a speeding train. Big data isn't just about having a lot; it's about dealing with data that comes in really fast, like tweets during a popular event. 3. Variety:

Demystifying Machine Learning

Today, let's embark on a journey to unravel the fascinating world of machine learning. Whether you're a seasoned developer or someone curious about the buzz around AI, this blog aims to provide a beginner-friendly guide to machine learning. Understanding the Basics Machine learning, at its core, is about creating algorithms that can learn patterns from data and make predictions or decisions. To grasp this concept, let's break down the fundamental components: 1. Data: The Fuel for Learning Machine learning relies on data. It's the raw material from which algorithms extract meaningful patterns. Understanding the types of data used in machine learning is the first step in this exploration. 2. Algorithms: The Brain of Machine Learning Algorithms are the brains behind machine learning models. We'll explore some common algorithms, such as linear regression and decision trees, in a way that even those new to coding can comprehend. Practical Applications of Machine Learning

Unveiling the World of Software Development Methodologies: Agile, Scrum, and DevOps Made Simple

Image
In this post, we're diving into the dynamic realm of software development methodologies. If you've ever wondered about terms like Agile, Scrum, or DevOps, you're in the right place. Let's unravel the mysteries behind these methodologies and understand how they shape the software development landscape. Navigating Software Development Methodologies What's a Methodology Anyway? In the world of software development, a methodology is like a roadmap—a set of guidelines that teams follow to create and deliver software. It's not just about writing code; it's about how teams collaborate, plan, and adapt to changes. Agile: Embracing Flexibility and Collaboration A Lighter Approach to Software Development Agile is all about flexibility. Instead of rigid plans, Agile promotes adaptability. Teams work in short cycles, called sprints , to continuously deliver small, valuable pieces of software. It's like building a puzzle one piece at a time. Scrum: Sprints, Roles,

Understanding Docker: A Comprehensive Guide

Image
Introduction In recent years, containerization has become a pivotal technology in the world of software development and deployment. Among the various containerization tools available, Docker stands out as a powerful and widely adopted solution. In this blog post, we will delve into the fundamentals of Docker, exploring its key concepts, benefits, and practical applications. What is Docker? Docker is an open-source platform designed to automate the deployment, scaling, and management of applications within lightweight, portable containers. Containers encapsulate an application and its dependencies, ensuring consistency across different environments. Docker provides a standardized runtime environment, enabling seamless execution of applications across diverse systems. Key Concepts Containers Containers are lightweight, standalone, and executable software packages that include everything needed to run a piece of software, including the code, runtime, libraries, and system tools. Docker

Project - Stage 2 (Part 2)

In this post, I will continue to work on SPO600 Project - Stage 2. This post will include the part 2 of the project, which is about the design. You can see Stage 2 - Part 1 here . 1. Design how an automatic ifunc implementation within the GCC compiler could work from the user's point of view. 1-1) What options should the user specify on the command line to indicate that they want automatic ifunc capability to be applied during the compilation? -fauto-ifunc It would instruct the GCC compiler to enable automatic ifunc generation during the compilation process.    1-2)  How should the user specify the list of architecture variants they want to target? (e.g., a base architecture of "armv8-a" and extended architectures of "armv8-a+sve" and "armv8-a+sve2", or a similar list of architecture variants for other platforms). User can specify the list of architecture variants by using  -march-variants . For example,  -march-variants=base  selects the base architec

Project - Stage 2 (Part 1)

In  SPO600 project - Stage 2 , i t is divided into 2 parts: (1) examine the intermediate code output of the compiler (2) propose a design for how the automatic ifunc capability could operate from the user's point of view I will work on the part 1 in this post. 1. Unpack the file First of all, run  cd ; tar xvf /public/spo600-autoifunc-preprocessor-pos.tgz  to make sure you have the unpacked file in your directory. 2. Build the code What does the scripts/autoifunc script or program do? It utilizes the GCC compiler to automatically build functions as Indirect Functions (ifunc). ifunc is a mechanism used to selectively support specific features at runtime. Certainly, let's take a brief look at a few lines of code related to the functionality of the script: The script uses the makeheaders command to generate a .h file from a  .c  file for the purpose of obtaining function prototypes.      ...     makeheaders "${TEMP_C}.c"     ... The generated resolver function utilize