.. title: PAR Class 25, Thurs 2020-04-23
.. slug: class25
.. date: 2020-04-21
.. tags: class
.. category: 
.. link: 
.. description: 
.. type: text
.. has_math: true

.. raw:: html

   <style> .red {color:red} </style>
   <style> .blue {color:blue} </style>

.. role:: red
.. role:: blue

.. sectnum::
.. contents:: Table of contents
..


Final paper format
------------------

Try to use the `IEEE conference format <https://www.ieee.org/conferences/publishing/templates.html>`_ .  It allows either latex or MS word.  Submit the PDF paper to gradescope.



Final project presentations
---------------------------

#. Kevi M
#. Liz C
#. Chri H
#. Zhep L



Inspiration for finishing your term projects
--------------------------------------------

#. `The Underhanded C Contest <http://www.underhanded-c.org/>`_

   "The goal of the contest is to write code that is as readable, clear, innocent and straightforward as possible, and yet it must fail to perform at its apparent function. To be more specific, it should do something subtly evil. Every year, we will propose a challenge to coders to solve a simple data processing problem, but with covert malicious behavior. Examples include miscounting votes, shaving money from financial transactions, or leaking information to an eavesdropper. The main goal, however, is to write source code that easily passes visual inspection by other programmers."

#. `The International Obfuscated C Code Contest <http://ioccc.org/>`_


#. https://www.awesomestories.com/asset/view/Space-Race-American-Rocket-Failures

   Moral: After early disasters, sometimes you can eventually get things to work.

#. `The 'Wrong' Brothers Aviation's Failures (1920s) <https://www.youtube.com/watch?v=fw_C_sbfyx8>`_

#. `Early U.S. rocket and space launch failures and explosion <https://www.youtube.com/watch?v=13qeX98tAS8>`_

#. `Numerous US Launch Failures <https://www.youtube.com/watch?v=CEFNjL86y9c>`_

   
Software tips
--------------------------------------

Git
===

Git is good to simultaneously keep various versions.  Here's a git intro:

Create a dir for the project::

  mkdir PROJECT; cd PROJECT

Initialize::

  git init

Create a branch (you can do this several times)::

  git branch MYBRANCHNAME

Go to a branch::

  git checkout MYBRANCHNAME

Do things::

  vi, make, ....

Save it::

  git add .; git commit -mCOMMENT

Repeat

At times I've used this to modify a program for class while keeping a copy of the original.


Freeze decisions early: SW design paradigm
===========================================

One of my rules is to push design decisions to take effect as early in the process execution as possible.  Constructing variables at compile time is best, at function call time is 2nd, and on the heap is worst.

a. If I have to construct variables on the heap, I construct few and large variables, never many small ones.

#. Often I compile the max dataset size into the program, which permits
   constructing the arrays at compile time.  Recompiling for a larger
   dataset is quick (unless you're using CUDA).

   Accessing this type of variable uses one less level of pointer than
   accessing a variable on the heap.  I don't know whether this is faster
   with a good optimizing compiler, but it's probably not slower.

#. If the data will require a dataset with unpredictably sized components, such as a ragged array, then I may do the following.

   i. Read the data once to accumulate the necessary statistics.

   #. Construct the required ragged array.

   #. Reread the data and populate the array.

Update:  However, with CUDA, maybe managed variables must be on the heap.


CPPCON
-----------

CppCon is the annual, week-long face-to-face gathering for the entire C++ community.
https://cppcon.org/

https://cppcon2018.sched.com/

CppCon 2014: Herb Sutter "Paying for Lunch: C++ in the ManyCore Age"
https://www.youtube.com/watch?v=AfI_0GzLWQ8

CppCon 2016:  Combine Lambdas and weak_ptrs to make concurrency easy (4min)
https://www.youtube.com/watch?v=fEnnmpdZllQ

A Pragmatic Introduction to Multicore Synchronization
by Samy Al Bahra.
https://www.youtube.com/watch?v=LX4ugnzwggg

CppCon 2018: Tsung-Wei Huang “Fast Parallel Programming using Modern C++”
https://www.youtube.com/watch?v=ho9bqIJkvkc&list=PLHTh1InhhwT7GoW7bjOEe2EjyOTkm6Mgd&index=13

CppCon 2018: Anny Gakhokidze “Workflow hacks for developers”
https://www.youtube.com/watch?v=K4XxeB1Duyo&list=PLHTh1InhhwT7GoW7bjOEe2EjyOTkm6Mgd&index=33

CppCon 2018: Bjarne Stroustrup “Concepts: The Future of Generic Programming (the future is here)”
https://www.youtube.com/watch?v=HddFGPTAmtU

CppCon 2018: Herb Sutter “Thoughts on a more powerful and simpler C++ (5 of N)”
https://www.youtube.com/watch?v=80BZxujhY38

CppCon 2018: Jefferson Amstutz “Compute More in Less Time Using C++ Simd Wrapper Libraries”
https://www.youtube.com/watch?v=80BZxujhY38

CppCon 2018: Geoffrey Romer “What do you mean "thread-safe"?”
https://www.youtube.com/watch?v=s5PCh_FaMfM


Quantum computing ctd
---------------------------------------

Go Behind-the-Scenes of a Quantum Experiment (2:10)
https://quantumexperience.ng.bluemix.net/qx/community/question?questionId=5ae975690f020500399ed39a&channel=videos

or

https://www.youtube.com/watch?v=tfZpJLdkzRU&list=PLOFEBzvs-VvpzQnlazij7cL1mjKvJTAwk&index=7

A Qubit in the Making (2:01)

https://www.youtube.com/watch?v=2pB87H3_F_c&list=PLOFEBzvs-VvpzQnlazij7cL1mjKvJTAwk&index=10&t=0s

Behold the Mighty Qubit (2:51)
https://www.youtube.com/watch?v=_P7K8jUbLU0&list=PLOFEBzvs-VvpzQnlazij7cL1mjKvJTAwk&index=10

Classical and Quantum Randomness (3:39)
https://www.youtube.com/watch?v=8kyJfAC4VAo&list=PLOFEBzvs-VvpzQnlazij7cL1mjKvJTAwk&index=6

Quantum Entanglement (2:21)
https://www.youtube.com/watch?v=RmXasxLm43k&list=PLOFEBzvs-VvpzQnlazij7cL1mjKvJTAwk&index=5

Benchmarking Quantum Systems (1:58)
https://www.youtube.com/watch?v=-7L5o-mzLqU&list=PLOFEBzvs-VvpzQnlazij7cL1mjKvJTAwk&index=8


Supercomputing 2018 (SC18) videos
---------------------------------

SC18 Invited Talk: Matthias Troyer
https://www.youtube.com/watch?v=97s3FEhG14g (45:46)

This is very nice.  I'll show the start and then a highlight, starting at 19:00.


SC18: NVIDIA CEO Jensen Huang on the New HPC (1:44:46)
https://www.youtube.com/watch?v=PQbhxfRH2H4

We'll watch the wrapup,

SCinet Must See: How to Build the World’s Fastest Temporary Computer Network Time Lapse (0:57)
https://sc18.supercomputing.org/scinet-must-see-how-to-build-the-worlds-fastest-temporary-computer-network-time-lapse/


Jack Dongarra
-------------

He has visited RPI more than once.

Algorithms for future emerging technologies (2:55:45)
https://www.youtube.com/watch?v=TCgHNMezmZ8

We'll watch the start.  You're encouraged to watch it all.
It gets more technical later.

Stony Brook talk
https://www.youtube.com/watch?v=D1hfrtoVZDo


	      
Course survey
-------------

I see my role as a curator, selecting the best stuff to present to you.  Since I like the topic, and asked to be given permission to create this course, I pick things I like since you might like them too.

So, if you liked the course, then please officially tell RPI by completing the survey and saying what you think.  Thanks.
