Open main menu

CDOT Wiki β

Changes

Winter 2015 SPO600 Weekly Schedule

6,337 bytes added, 12:21, 29 August 2015
no edit summary
[[Category:Winter 2015 SPO600]]
{{Admon/importantobsolete|It's Alive!|This [[Current SPO600Weekly Schedule]] 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.}} For the Fall 2014 version of the weekly schedule, see [[Fall 2014 SPO600 Weekly Schedule]].
== Schedule Summary Table ==
|-
|3||Jan 26||[[#Tuesday (Jan 27)|Profiling: Finding the pain points (Lab 3)]]||[[#Thursday (Jan 29)|Computer architecture overview]]||[[#Week 3 Deliverables|Blog about the profiling results and pain points discovered (Lab 3)]]
|-
|4||Feb 2||[[#Tuesday (Feb 3)|Compiled C Lab (Lab 4)]]||[[#Thursday (Feb 5)|Compiler optimizations]]||[[#Week 4 Deliverables|Blog a commentary on the Compiled C Lab (Lab 34).]]
|-
|-
|7||Feb 23 ||[[#Tuesday (Feb 24)|Project presentations - Stage 1.Assembly lab (Lab 5)]]||[[#Thursday (Feb 26)|Prepare a presentation on a selected aspect of Inline assembly language.lab and Course Projects]]||[[#Week 6 7 Deliverables|Blog about your the Assembly Lab (Lab 5) and start project plans - this will be used to assign your 1st Project Marks. Be prepared to give your presentationinvestigation.]]
|-style="background: #f0f0ff"
|Study Week||Mar 2||colspan="3" align="center"|Study Week - No classes!Please work on your initial project investigation.
|-
|8||Mar 9||[[#Tuesday (Mar 10)|Assembly language presentationsProject discussion, and Reading Reference Documentation.]]||[[#Thursday (Mar 12)|Assembly language Project presentations- Stage 1]]||[[#Week 7 8 Deliverables|Blog about your assembly language presentationproject progress - this will be used to assign your 1st Project marks.]]
|-
|9||Mar 16||[[#Tuesday (Mar 17)|Assembly lab (Lab 5)Upstreaming]]||[[#Thursday (Mar 19)|Reading reference documentation (Spinlocks and Lab 5 Continued)Tail Call Optimization]]||[[#Week 9 Deliverables|Blog about the assembly lab (Lab 5)your project work.]]
|-
|10||Mar 23||[[#Tuesday (Mar 24)|Project Presentations - Stage 2Portable alternatives to Assembler]]||[[#Thursday (Mar 26)|UptreamingProject Presentations - Stage 2]]||[[#Week 8 10 Deliverables|Blog about your project progress - this will be used to assign your 2nd Project Marks.]]
|-
|11||Mar 30||[[#Tuesday (Mar 31)|Inline AssemblerHack Session]](Professor will not be present)||[[#Thursday (Apr 2)|Find inline assembler in 3 packages (Lab 6)SIMD]]||[[#Week 9 11 Deliverables|Blog about the assembler you found (Lab 6)SIMD/vectorization and your project.]]
|-
|12||Apr 6||[[#Tuesday (Apr 7)|Discussion & Hack Session]]||[[#Thursday (Apr 9)|Discussion & Hack SessionVectorization]]||[[#Week 10 12 Deliverables|Blog about your progresswork.]]
|-
|13||Apr 13||[[#Tuesday (Apr 14)|Project Presentations - Stage 3]]||[[#Thursday (Apr 16)|Wrap-up Session]]||[[#Week 11 13 Deliverables|Blog about your project progress - this will be used to assign your 3rd project marks.]]
|-
|Labs||align="right"|10%||See deliverables column above.
|-
|Project work||align="right"|60%||Feb 27 March 16 (15%), March 27 31 (20%), April 22 (25%)
|}
=== Thursday (Jan 15) ===
* [[Benchmarking]]* [[Profiling]]** Profiling with <code>gprof</code>*** Build with profiling enabled (use the option <code>-pg</code> with both gcc and ld)*** Run the profile-enabled executable*** Analyze the data in the <code>gmon.out</code> file**** <code>gprof ''nameOfBinary''</code> # Displays text profile including call graph**** <code>gprof ''nameOfBinary'' | gprof2dot | dot | display -</code> # Displays visualization of call graph Resources* [https://sourceware.org/binutils/docs-2.16/gprof/ GProf Manual]* [http://www.thegeekstuff.com/2012/08/gprof-tutorial/ Profiling with GProf]
=== Week 1 Deliverables ===
# 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 [[Fall 2014 Winter 2015 SPO600 Participants]] page (leave the projects columns blank).
# Generate a [[SSH#Using_Public_Keys_with_SSH|pair of keys]] for [[SSH]] and email the public key to your professor.
# Sign and return the [[Open Source Professional Option Student Agreement]].
# Optional but recommended: [[SPO600 Host Setup|Set up a personal Fedora 20 system]].
== Week 2 ==
=== Tuesday (Jan 20) ===
{{Admon/tip|Bring Your Laptop|Classes are held in a [[Active Learning Classroom]]. If you have a laptop or other device with a VGA or HDMI output (such as a smartphone!) please bring it. You'll need either a local linux environment or an [[SSH ]] client -- which is built-in to Linux, Mac, and Chromebook systems, and readily available for Windows, Android, and iOS devices.}}
Status Check
* Introductions around the Room
** Name
** Program
** Interest in the course
** Results of <code>gzip</code> benchmarking and most interesting thing you observed
* Check the [[SPO600 Servers|server accounts]] that were set up with your [[SSH]] keys
* Sheets from Last Week
** Open Source Student Agreement
** Survey (Optional)
Working with the Code
* Working with GITGetting Code** In a tarball** From git*** Git basics** Working with other version control systems  * Building the Code** Make** Configuration tools (autotools, cmake)** The compiler toolchain*** Preprocessor*** Compiler*** Assembler*** Linker** Debug vs. Non-debug/Stripped binaries 
Looking at How Distributions Package the Code
* Using fedpkg
 
==== Resources ====
* [https://sourceware.org/binutils/docs-2.16/gprof/ GProf Manual]
* [http://www.thegeekstuff.com/2012/08/gprof-tutorial/ Profiling with GProf]
=== Thursday (Jan 22) ===
* Complete and blog your conclusion to the [[SPO600 Code Review Lab|Code Review Lab (Lab 1)]].
* Blog your baseline data from the [[SPO600 Baseline Builds and Benchmarking Lab|Baseline Builds and Benchmarking lab (Lab 2)]].
 
 
== Week 3 ==
 
=== Tuesday (Jan 27) ===
 
Profiling
* Profiling with <code>gprof</code>
** Build with profiling enabled (use the option <code>-pg</code> with both gcc and ld)
** Run the profile-enabled executable
** Analyze the data in the <code>gmon.out</code> file
*** <code>gprof ''nameOfBinary''</code> # Displays text profile including call graph
*** <code>gprof ''nameOfBinary'' | gprof2dot | dot | display -</code> # Displays visualization of call graph
* Other profiling tools
** OProf, SystemTap, and others
* [[SPO600 Profiling Lab]] (Lab 3)
 
=== Thursday (Jan 29) ===
 
* [[Computer Architecture]] overview (see also the [[:Category:Computer Architecture|Computer Architecture Category]])
 
=== Week 3 Deliverables ===
 
* Complete and blog your conclusions to the [[SPO600 Profiling Lab|Profiling Lab (Lab 3)]].
 
 
== Week 4 ==
 
=== Tuesday (Feb 3) ===
* [[SPO600 Compiled C Lab|Compiled C Lab (Lab 4)]]
 
=== Thursday (Feb 5) ===
* [[Compiler Optimizations]]
 
=== Week 4 Deliverables ===
* Blog your [[SPO600 Compiled C Lab|Compiled C Lab (Lab 4)]] results. Be sure to include a reflective section on what you learned.
* Select your topic for the [[Winter 2015 SPO600 Platform Specific Code Presentation|Platform-Specific Code Presentation]].
 
== Week 5 ==
* Prepare your [[Winter 2015 SPO600 Platform Specific Code Presentation|Platform-Specific Code Presentation]].
 
=== Week 5 Deliverables ===
* Be ready to [[Winter 2015 SPO600 Platform Specific Code Presentation|present]].
 
== Week 6 ==
=== Tuesday (Feb 17) ===
* Introduction to the [http://www.96boards.org/products/hikey/ HiKey] board and the [http://www.96boards.org/ 96Boards] project.
* [[Winter 2015 SPO600 Platform Specific Code Presentation|Presentations on platform-specific code]]
 
=== Thursday (Feb 19) ===
* [[Winter 2015 SPO600 Platform Specific Code Presentation|Presentations on platform-specific code]]
 
=== Week 6 Deliverables ===
* Blog about your presentation.
 
== Week 7 ==
=== Tuesday (Feb 24) ===
* [[SPO600 Assembler Lab|Assembly language lab (Lab 5)]]
 
=== Thursday (Feb 26) ===
* Remaining [[Winter 2015 SPO600 Platform Specific Code Presentation|Presentations on platform-specific code]]
* [[Inline Assembly Language]]
* [[Winter 2015 SPO600 Project|Course Projects]]
 
=== Week 7 Deliverables ===
* Blog your conclusion to the [[SPO600 Assembler Lab|assembly language lab (Lab 5)]] - See the ''Deliverables'' section in the lab instructions for details on what to include in your blog post.
 
== Week 8 ==
 
=== Tuesday (Mar 10) ===
* Project discussion
** Discussion of project ideas and fine-tuning of project plans
** Next steps
** Addressing Problem Areas
* Accessing and Reading Reference Documentation
** AArch64 ISA
 
=== Thursday (Mar 12) ===
* Project presentations
** Provide a very short (2 minute) overview of your project. Include:
*** Which piece of software you are working on
*** What area of that software needs optimization/performance tuning
*** How you are going to perform the optimization/tuning (algorithm replacement, platform-specific code, removing platform-specific code, build options, and so forth)
*** Plans for the next step
*** Engagement with the upstream community
* Use this project presentation to tell the class what you're working on and incorporate feedback into your blog post
 
=== Week 8 Deliverables ===
* Blog about your project and plans, incorporating feedback from your presentation
* Add your project to the [[Winter 2015 SPO600 Participants|Participants and Project Table]].
 
== Week 9 ==
 
=== Tuesday (Mar 17) ===
* Upstreaming
** Git Discussion
** Creating a Patch
** Various open source community workflows
 
=== Thursday (Mar 19) ===
* Spinlocks
** The need for Atomics in Spinlocks
** Using Intrinsics for Atomic Operations
* Tail Call Optimization (TCO)
** gcc will perform TCO at -O2 and higher
** Important to ensure that gcc recognizes code patterns that permit TCO to be applied
 
=== Week 9 Deliverables ===
* Blog at least once (and ideally more than once) about your Project
** Frequent shorter posts are better than rare long ones
** Aim to make steady progress on your project, a bit each day
** Blog about your evolving project plan and the steps you're making along the way
** Keep the work short, and focus on narrowing the scope of work as early as possible
** Keep talking to the community
 
== Week 10 ==
 
=== Tuesday (Mar 24) ===
* Discussion of GCC Intrinsics
** Where to find documentation: [https://gcc.gnu.org/onlinedocs/ GCC Manual]
** __atomic vs __sync intrinsic families
* Examination of Build Files
** Differential analysis of successful and unsuccessfull build
 
=== Thursday (Mar 26) ===
* Project Presentations - Stage 2
** At this point, you should have a proposed patch that you're working to get upstream
 
=== Week 10 Deliverables ===
* Blog posts about your project
** Include information about your patch(es)
** Include links to discussion about the patch(es) with the community (e.g., link to bug/issue tracker entries or email archives)
** If you don't have patches and/or have not pushed them upstream yet, describe the state of your project and your plan to get changes upstream.
* Blogs will be marked Monday for Stage 2 project work (20%)
 
== Week 11 ==
 
=== Tuesday (Mar 31) ===
Your professor will be away. You are welcome to use the classroom for a project hacking time and collaboration with your colleagues.
 
=== Thursday (Apr 2) ===
* Single Instruction / Multiple Data (SIMD)
** Brief look at x86_64 & AArch64 implementations of SIMD
 
=== Week 11 Deliverables ===
* Blog about your ongoing project work. Please post at least 1-2 entries per week.
 
== Week 12 ==
 
=== Tuesday (Apr 7) ===
* Discussion & Hacking Session
 
=== Thursday (Apr 9) ===
* Vectorization
** Using Intrinsics
** Using Auto-Vectorization
 
=== Week 12 Deliverables ===
* Blog about your ongoing project work. Please post at least 1-2 entries per week.
* You should have patches (code, makefiles, documentation, or tests) in the upstream review process at or before this point.
* Blog about vectorization - specifically:
** What -O level and/or options are needed to turn on the auto-vectorizer in GCC
** At least three limitations -- conditions under which the vectorization will not be performed
** The significance of alignment and non-overlapping pointers for vectorization
 
== Week 13 ==
 
=== Tuesday (Apr 14) ===
* Informal Project Presentations - Phase 3
 
=== Thursday (Apr 16) ===
* Wrap-up Session
 
=== Week 13 Deliverables ===
* Blog about your ongoing project work. Your patches should be through the upstream review process.
* Final date for posting about your project: April 22.
<!--