Difference between revisions of "Fall 2023 SPO600 Weekly Schedule"
Chris Tyler (talk | contribs) |
Chris Tyler (talk | contribs) |
||
Line 52: | Line 52: | ||
=== Week 1 - Class I === | === Week 1 - Class I === | ||
− | |||
− | |||
− | |||
==== General Course Information ==== | ==== General Course Information ==== | ||
Line 66: | Line 63: | ||
** 20% - Labs and Quizzes (10% labs; 10% for quizzes - lowest 3 quiz scores not counted) | ** 20% - Labs and Quizzes (10% labs; 10% for quizzes - lowest 3 quiz scores not counted) | ||
+ | <!-- | ||
===== About SPO600 Classes ===== | ===== About SPO600 Classes ===== | ||
* Wednesday: synchronous (live) classes at 11:40 am - login to learn.senecacollege.ca ("Blackboard"), go to SPO600, and select the "Wednesday Classes" option on the left-hand menu. | * Wednesday: synchronous (live) classes at 11:40 am - login to learn.senecacollege.ca ("Blackboard"), go to SPO600, and select the "Wednesday Classes" option on the left-hand menu. | ||
* Friday: these classes will usually be asynchronous (pre-recorded) - see this page for details each week. | * Friday: these classes will usually be asynchronous (pre-recorded) - see this page for details each week. | ||
* There may be occasional exceptions to this pattern. | * There may be occasional exceptions to this pattern. | ||
− | + | --> | |
==== Introduction to the Problems ==== | ==== Introduction to the Problems ==== | ||
Line 125: | Line 123: | ||
==== How open source communities work ==== | ==== How open source communities work ==== | ||
* Do the [[SPO600 Code Review Lab|Code Review Lab (Lab 1)]] as homework. | * Do the [[SPO600 Code Review Lab|Code Review Lab (Lab 1)]] as homework. | ||
+ | |||
+ | |||
+ | |||
+ | ########################################################################################################################### | ||
+ | ########################################################################################################################### | ||
+ | ########################################################################################################################### | ||
+ | ########################################################################################################################### | ||
+ | ########################################################################################################################### | ||
+ | ########################################################################################################################### | ||
+ | ########################################################################################################################### | ||
+ | |||
+ | <!-- | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
=== Week 1 - Class II === | === Week 1 - Class II === | ||
Line 182: | Line 210: | ||
*** Much of the data in sound and images cannot be perceived by humans. Psychoacoustic and psychovisual compression remove artifacts which are least likely to be perceived. As a simple example, if two pixels on opposite sides of a large image are almost but not exactly the same, most people won't be able to tell the difference, so these can be encoded as the same colour if that saves space (for example, by reducing the size of the colour palette). | *** Much of the data in sound and images cannot be perceived by humans. Psychoacoustic and psychovisual compression remove artifacts which are least likely to be perceived. As a simple example, if two pixels on opposite sides of a large image are almost but not exactly the same, most people won't be able to tell the difference, so these can be encoded as the same colour if that saves space (for example, by reducing the size of the colour palette). | ||
+ | --> | ||
=== Week 1 Deliverables === | === Week 1 Deliverables === | ||
Line 189: | Line 218: | ||
# Start work on [[SPO600 Code Review Lab|Lab 1]]. Blog your work. | # Start work on [[SPO600 Code Review Lab|Lab 1]]. Blog your work. | ||
+ | <!-- | ||
== Week 2 == | == Week 2 == | ||
Line 544: | Line 574: | ||
* November blog posts are due Sunday, December 4, at 11:59 pm. | * November blog posts are due Sunday, December 4, at 11:59 pm. | ||
* Project Stage II is due next Thursday, December 8, at 12 noon. | * Project Stage II is due next Thursday, December 8, at 12 noon. | ||
− | + | --> | |
<br/> | <br/> |
Revision as of 09:05, 6 September 2023
This is the schedule and main index page for the SPO600 Software Portability and Optimization course for Fall 2022.
Schedule Summary Table
Please follow the links in each cell for additional detail which will be added below as the course proceeds -- especially for the Deliverables column.
Contents
Week 1
Week 1 - Class I
General Course Information
- Course resources are linked from the CDOT wiki, starting at https://wiki.cdot.senecacollege.ca/wiki/SPO600 (Quick find: This page will usually be Google's top result for a search on "SPO600"), arranged by week and class. There will be lots of hyperlinks -- be sure to follow these links.
- Coursework is submitted by blogging. The only exception to this is quizzes.
- Quizzes will be short (~1 page) and will be held without announcement at the start of any synchronous class. There is no opportunity to re-take a missed quiz, but your lowest three quiz scores will not be counted, so do not worry if you miss one or two.
- Students with test accommodations: an alternate monthly quiz can be made available via the Test Centre. Communicate with your professor for details.
- Course marks (see Weekly Schedule for dates):
- 60% - Project Deliverables in three phases (15%, 20%, 25%)
- 20% - Communication (Blog writing, in four phases roughly a month long each, 5% each)
- 20% - Labs and Quizzes (10% labs; 10% for quizzes - lowest 3 quiz scores not counted)
Introduction to the Problems
Porting and Portability
- Most software is written in a high-level language which can be compiled into machine code for a specific computer architecture. In many cases, this code can be compiled or interpreted for execution on multiple computer architectures - this is called 'portable' code. However, there is a lot of existing code that contains some architecture-specific code fragments which contains assumptions about the architecture, resulting in architecture-specific high-level or Assembly Language code.
- Reasons that code is architecture-specific:
- System assumptions that don't hold true on other platforms
- Variable or word size
- Endianness
- Code that takes advantage of platform-specific features
- System assumptions that don't hold true on other platforms
- Reasons for writing code in Assembly Language include:
- Performance
- Atomic Operations
- Direct access to hardware features, e.g., CPUID registers
- Most of the historical reasons for using assembler are no longer valid. Modern compilers can out-perform most hand-optimized assembly code, atomic operations can be handled by libraries or compiler intrinsics, and most hardware access should be performed through the operating system or appropriate libraries.
- A new architecture has appeared: AArch64, which is part of ARMv8. This is the first new computer architecture to appear in several years (at least, the first mainstream computer architecture).
- At this point, most key open source software (the software typically present in a Linux distribution such as Ubuntu or Fedora, for example) now runs on AArch64. However, it may not yet be as extensively optimized as on older architectures (such as x86_64).
Benchmarking and Profiling
Benchmarking involves testing software performance under controlled conditions so that the performance can be compared to other software, the same software operating on other types of computers, or so that the impact of a change to the software can be gauged.
Profiling is the process of analyzing software performance on finer scale, determining resource usage per program part (typically per function/method). This can identify software bottlenecks and potential targets for optimization. The resource utilization studies may include memory, CPU cycles/time, or power.
Optimization
Optimization is the process of evaluating different ways that software can be written or built and selecting the option that has the best performance tradeoffs.
Optimization may involve substituting software algorithms, altering the sequence of operations, using architecture-specific code, or altering the build process. It is important to ensure that the optimized software produces correct results and does not cause an unacceptable performance regression for other use-cases, system configurations, operating systems, or architectures.
The definition of "performance" varies according to the target system and the operating goals. For example, in some contexts, low memory or storage usage is important; in other cases, fast operation; and in other cases, low CPU utilization or long battery life may be the most important factor. It is often possible to trade off performance in one area for another; using a lookup table, for example, can reduce CPU utilization and improve battery life in some algorithms, in return for increased memory consumption.
Most advanced compilers perform some level of optimization, and the options selected for compilation can have a significant effect on the trade-offs made by the compiler, affecting memory usage, execution speed, executable size, power consumption, and debuggability.
Build Process
Building software is a complex task that many developers gloss over. The simple act of compiling a program invokes a process with five or more stages, including pre-processing, compiling, optimizing, assembling, and linking. However, a complex software system will have hundreds or even thousands of source files, as well as dozens or hundreds of build configuration options, auto configuration scripts (cmake, autotools), build scripts (such as Makefiles) to coordinate the process, test suites, and more.
The build process varies significantly between software packages. Most software distribution projects (including Linux distributions such as Ubuntu and Fedora) use a packaging system that further wraps the build process in a standardized script format, so that different software packages can be built using a consistent process.
In order to get consistent and comparable benchmark results, you need to ensure that the software is being built in a consistent way. Altering the build process is one way of optimizing software.
Note that the build time for a complex package can range up to hours or even days!
Course Setup
Follow the instructions on the SPO600 Communication Tools page to set up a blog, create SSH keys, and send your blog URLs and public key to me.
I will use this information to:
- Update the Current SPO600 Participants page with your information, and
- Create an account for you on the SPO600 Servers.
This updating is done in batches once or twice a week -- allow some time!
How open source communities work
- Do the Code Review Lab (Lab 1) as homework.
Week 1 Deliverables
- Follow the SPO600 Communication Tools set-up instructions.
- Optional (strongly recommended): Set up a personal Linux system.
- Optional: If you have an AArch64 development board (such as a Raspberry Pi 4, Raspberry Pi 400, or 96Boards device), consider installing a 64-bit Linux operating system such as Fedora on it.
- Start work on Lab 1. Blog your work.