Changes

Jump to: navigation, search

Fall 2018 SPO600 Weekly Schedule

3,441 bytes added, 07:05, 3 December 2018
Evaluation
[[Category:Fall 2018 SPO600]]
This is the schedule and main index page for the [[SPO600]] ''Software Portability and Optimization'' course for Fall 2018.
<!-- {{Admon/important|It's Alive!|This [[SPO600]] weekly schedule will be updated as the course proceeds - dates and content are subject to change. The cells in the summary table will be linked to relevant resources and labs as the course progresses.}} <!-->{{Admon/important|Content being Updated|This page is in the process of being updated from a previous semester's content. It is not yet updated for Fall 2018. Do not rely on the accuracy of this information until this warning is removed.}}-->
== Schedule Summary Table ==
{|cellspacing="0" width="100%" cellpadding="5" border="1" style="background: #e0e0ff"
|-
!Week!!Week of...!!width="28%"|Class I<br/>Wednesday 3Monday 5:2010-56:0555<br />Room S2174S2173!!width="28%"|Class II<br/>Friday 9Wednesday 5:5010-116:3555<br />Room S2172S2173!!width="28%"|Deliverables<br/>(Summary - click for details)
|-
|1||Jan 15Sep 3||[[style="background:#000044; color:#Week 1 - Class Iffffff"|Introduction]]Labour day||[[#Week 1 - Class II|Account setup for this course. Introduction / Computer architecture overview / How is code accepted into an open source project? (Lab 1)]]||[[#Week 1 Deliverables|Set up accounts.]]
|-
|2||Jan 22Sep 10||[[#Week 2 - Class I|Computer Architecture Overview - Binary representation, processor internals, instruction set architectureSysadmin for Devs / Building Software (Lab 2)]]||[[#Week 2 - Class II|Compiled C Lab (Lab 23)/ Baseline Builds and Benchmarking]]||[[#Week 2 Deliverables|Blog your conclusion to Labs 1 , 2, and 23.]]
|-
|3||Jan 29Sep 17||[[#Week 3 - Class I|Assembly Makefiles, Assembler / Assembler Lab (Lab 34)]]||[[#Week 3 - Class II|<strike>Assembly Lab (Lab 3 - continued) and Code Bulding Assembler Lab (Lab 4)</strike>Continued]] <span style="color: #ff0000"><b>Class cancelled</b></span>||[[#Week 3 Deliverables|Blog your results and conclusions for about Lab 34.]]
|-
|4||Sep 24||[[#Week 4 - Class I|Assembler Lab (Lab 4) Wrap-up / Binary Representation]]||[[#Week 4 - Class II|Compiler Optimizations / Algorithm Selection (Lab 5)]]||[[#Week 4 Deliverables|Blog your Lab 4 results.]]
|-
 |5|4|Oct 1|Feb 5|style="background:#aaaaff"|[[#Week 4 5 - Class I|Assembly Lab (Lab 3) Continued...Investigation: Profiling]]||[[#Week 4 5 - Class II|Assembly Lab SIMD & Vectorization (Lab 36) Continued.../ Inline Assembler]]||[[#Week 4 5 Deliverables|Blog your Lab 3 lab 5 and 6 results.]]
|-
|56||Feb 12Oct 8||[[style="background:#000044; color:#Week 5 - Class Iffffff"|Thanksgiving|Compiler Optimizations]]|style="background:#aaaaff"|[[#Week 5 6 - Class II|SIMD and Auto-Vectorization (Lab 4 as Homework); Algorithm Selection Investigation: Inline Assembler]] (Lab 57)]]||[[#Week 5 6 Deliverables|Blog the conclusion to Lab 4 and about Lab 57.]]
|-
<!--Auto-vectorization (Lab 5)Algorithm Selection (Lab 6)Inline Assembler (Lab |7)-->|6||Feb 19Oct 15||[[#Week 6 7 - Class I|Inline Assembler (Lab 6)Discussion]]||[[#Week 6 7 - Class II|Project: Selecting, Building, Benchmarking, and ProfilingDiscussion]]||[[#Week 6 7 Deliverables|Blog your conclusion to Lab 6 and blog about your projectCatch up on any missed labs.]]
|-
| ||Feb 26Oct 22||style="background: #f0f0ff" colspan="5" align="center|Reading Weekand [http://fsoss.ca FSOSS 2018]
|-
|78||Mar 5Oct 29||[[#Week 7 8 - Class I|Project DiscussionProjects!]]||[[#Week 7 8 - Class II|ProfilingProjet Hacking]]||[[#Week 7 8 Deliverables|Blog blog about your project.]]
|-
|89||Mar 12Nov 5||[[#Week 8 9 - Class I|Sysadmin for Programmers, Project DiscussionMemory]]||[[#Week 8 9 - Class II|MemoryAtomics]]||[[#Week 8 9 Deliverables|Blog about your project.]]
|-
|910||Mar 19Nov 12||[[#Week 9 10 - Class I|Memory (continued), Building and testing softwareProject Hacking]]||[[#Week 9 10 - Class II|AtomicsCompiler Intrinsics]]||[[#Week 9 10 Deliverables|Blog about your project.]]
|-
|1011||Mar 26Nov 19||[[#Week 10 11 - Class I|Project Hacking]]||style="background: [[#f0f0ff" align="centerWeek 11 - Class II|Good Friday (Holiday)Project Hacking]]||[[#Week 10 11 Deliverables|Blog about your project.]]
|-
|1112||Apr 2Nov 26||[[#Week 11 12 - Class I|Project Hacking]]||[[#Week 11 12 - Class II|Compiler IntrinsicsProject Hacking]]||[[#Week 11 12 Deliverables|Blog about your project.]]
|-
|1213||Apr 9Dec 3||[[#Week 12 13 - Class I|<strike>Project Hacking</strike> <span style="color: #ff0000"><b>Class cancelled</b></span>]]||[[#Week 12 13 - Class II|Project HackingWrap-up Discussion]]||[[#Week 12 13 Deliverables|Blog about your project.]]
|-
|13||Apr 16||[[#Week 13 - Class I|Project Hacking]]||[[#Week 13 - Class II|Wrap-up Discussion]]||[[#Week 13 Deliverables|Blog about your project.]]
|-
|Exam||Dec 10||colspan="3"|Exam Week - No exam in this course!
|}
!Category!!Percentage!!Evaluation Dates
|-
|Communication||align="right"|20%||January September (blog posts up to Feb 4, Oct 6 - 5%), End of February October (March 4, Nov 10 - 5%), End of March November (April 2, Dec 3 - 5%), end of course (April 22, Dec 12 - 5%).
|-
|Quizzes||align="right"|10%||May be held during any class, usually at the start of class. A minimum of 5 one-page quizzes will be given. No make-up/retake option is offered if you miss a quiz. Lowest 3 scores will not be counted.
|-
|Labs||align="right"|10%||See deliverables column above. All labs must be submitted by April 21Dec 12, but it is best if you stay on top of the labs and submit according to the table above.
|-
|Project work||align="right"|60%||3 stages: 15% (March 18Nov 6), 20% (April 10Nov 21), 25% (April 22Dec 12).
|}
== Week 1 ==
* Labour day - no Class I this week === Week 1 - Class I II ===
==== Introduction to the Problems ====
===== Porting and Portability =====
* Most software is written in a '''high-level language''' which can be compiled into [[Machine Language|machine code]] for a specific computer architecture. In many cases, this code can be compiled for multiple architectures. However, there is a lot of existing code that contains some architecture-specific code fragments written in architecture-specific high-level code or in [[Assembly Language]] (.* Reasons that code is architecture-specific:** System assumptions that don't hold true on other platforms*** Variable or, in some cases, machine[[Word|word]] size*** [[Endian|Endianness]]** Code that takes advantage of platform-specific high-level code).features
* Reasons for writing code in Assembly Langauge include:
** Performance
* Course resources are linked from the CDOT wiki, starting at http://wiki.cdot.senecacollege.ca/wiki/index.php/SPO600 (Quick find: This page will usually be Google's top result for a search on "SPO600").
* Coursework is submitted by blogging.
* Quizzes will be short (1 page) and will be held without announcement at any time, generally at the start of class. Your 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 is available in the Test Centre. See the professor for details.
* Course marks (see Weekly Schedule for dates):
** 60% - Project Deliverables
* All classes will be held in an [[Active Learning Classroom]] -- you are encouraged to bring your own laptop to class. If you do not have a laptop, consider signing one out of the Learning Commons for class, or using a smartphone with an HDMI adapter.
* For more course information, refer to the SPO600 Weekly Schedule (this page), the [http://www.senecacollege.ca/ssos/findWithoutSemester/spo600/sict Course Outline], and [[SPO600 Course Policies]].
 
=== Week 1 - Class II ===
==== Course and Setup: Accounts, agreements, servers, and more ====
* Student Agreement
==== Discussion of how How open source communities work ====
* Background for the [[SPO600 Code Review Lab|Code Review Lab (Lab 1)]]as homework.
==== Computer Architecture ====
* [[Computer Architecture]] overview (see also the [[:Category:Computer Architecture|Computer Architecture Category]])
* A first look at the x86_64 and AArch64 Architectures and ISA
** Register file comparison
** Instruction encoding
** ELF
** Procedure calling conventions
 
==== Reference ====
* [[Computer Architecture]] and [[:Category:Computer Architecture|Computer Architecture Category]]
=== Week 1 Deliverables ===
# Course setup:
## Set up your [[SPO600 Communication Tools]] - in particular, set up a blog and add it to [http://zenit.senecac.on.ca/~chris.tyler/planet/ Planet CDOT] (via the [[Planet CDOT Feed List]]).
## Add yourself to the [[Winter 2018 SPO600 Participants]] page (leave the projects columns blank).
## Generate a [[SPO600_Servers#Preparatory_Steps|pair of keys]] for [[SSH]] and email the public key to your professor, so that he can set up your access to the [[SPO600 Servers|class servers]].
## Sign and return the [[Open Source Professional Option Student Agreement]] (this will be done on paper in class).# Optional (strongly recommended): [[SPO600 Host Setup|Set up a personal Fedora system]].
# Optional: Purchase an AArch64 development board (such as a [http://96boards.org 96Boards] HiKey or Raspberry Pi 3. If you use a Pi, install a 64-bit Linux operating system on it, not a 32-bit version).
== Week 2 ==
 
=== Week 2 - Class I ===
 
* Sysadmin for Developers
* Building Code
** [[Make and Makefiles]]
** [[SPO600 Code Building Lab|Code Building Lab]] (Lab 2)
 
=== Week 2 - Class II ===
 
* Compiler Operation
** Stages of Compilation
**# Preprocessing
**# Compiling
**# Assembling
**# Linking
* Analyzing compiler output
** Disassembly
* [[SPO600 Compiled C Lab|Compiled C Lab]] (Lab 3)
 
=== Week 2 Deliverables ===
 
* Blog your conclusion to the [[SPO600 Code Review Lab|Code Review Lab (Lab 1)]]
* Blog the results and conclusion from the [[SPO600 Code Building Lab|Compiled C Lab (Lab 2)]]
* Blog the results and conclusion from the [[SPO600 Compiled C Lab|Compiled C Lab (Lab 3)]]
 
 
== Week 3 ==
 
=== Week 3 - Class I ===
* [[Make and Makefiles]]
* [[Assembly Language]]
* [[SPO600 Assembler Lab|Assembler Lab]] (Lab 4)
 
=== Week 3 - Class II ===
* [[SPO600 Assembler Lab|Assembler Lab]] (Lab 4) Continued...
 
=== Week 3 Deliverables ===
* Blog about [[SPO600 Assembler Lab|Lab 4]].
 
== Week 4 ==
 
=== Week 4 - Class I ===
* [[SPO600 Assembler Lab|Assembler Lab]] (Lab 4) Wrap-up...
* Binary Representation of Data
** Integers
** Fixed-point
** Floating-point
** Sound
** Graphics
** Compression techniques
*** Huffman encoding / Adaptive arithmetic encoding
*** Repeated sequence encoding (1D, 2D, 3D)
*** Decomposition
*** Pallettization
*** Psychoacoustic and psychovisual compression
 
=== Week 4 - Class II ===
* [[SPO600 Algorithm Selection Lab|Algorithm Selection Lab]] (Lab 5)
 
=== Week 4 Deliverables ===
* Blog your results to [[SPO600 Assembler Lab|Lab 4]]
 
 
== Week 5 ==
 
=== Week 5 - Class I ===
'''Note:''' Your prof is away!
* Investigate various tools available for [[Profiling]]
** Ensure that you know how to use <code>gprof</code>
** Ensure that you know how to use at least one other Linux profiling tool
** Blog about it, including the example of profiling the sound scaling programs from [[SPO600 Algorithm Selection Lab|Lab 5]]
 
 
=== Week 5 - Class II ===
* SIMD and Auto-vectorization
* Inline Assembler
* [[SPO600 Vectorization Lab|Vectorization Lab]] (Optional lab - recommended)
 
=== Week 5 Deliverables ===
* Blog your Profiling investigation results
* Optional: Blog about the Vectorization Lab if you performed it
 
== Week 6 ==
 
=== Week 6 - Class I ===
* Thanksgiving -- enjoy time with your friends and family!
** No class
 
=== Week 6 - Class II ===
* '''Note: Your prof is away'''
** Room is available to collaborate if desired -- AV unlock code is 2598
* Perform the [[SPO600 Inline Assembler Lab|Inline Assembler Lab]] (Lab 6)
 
=== Week 6 Deliverables ===
* Blog your results to the [[SPO600 Inline Assembler Lab|Inline Assembler Lab]] (Lab 6)
 
 
== Week 7 ==
 
=== Week 7 - Class I ===
* Discussion
 
=== Week 7 - Class II ===
* Discussion
 
=== Week 7 Deliverables ===
* Wrap up any labs not yet completed.
 
 
== Week 8 ==
 
=== Week 8 - Class I ===
* [[Fall 2018 SPO600 Project]]
 
=== Week 8 - Class II ===
* Project Discussion
 
=== Week 8 Deliverables ===
* Blog about your project.
 
<!--
== Week 2 ==
* Project hacking and discussion
-->
<!--
###################################################################################

Navigation menu