Syllabus
This course is intended for students whose current or future coursework or research involves computational science (e.g. computational fluid dynamics, genomics, finite element analysis, economics simulations, computational linguistics, physics, etc). The class will help students learn the principles of operating in a typical scientific computing environment. Topics include typical Linux shells and commands, hardware (CPU, memory, network, etc), storage management, batch job scheduling, code and workflow optimization, code management, results verification, and programming. A semester-long project will help students apply the principles that are taught in class.
The class is designed to cover a broad range of topics, exposing you to the landscape of High-Performance Computing (HPC) and imbuing you with an understanding of what’s possible. That breadth comes at the expense of depth: we don’t have the time to make you a master of MPI or GPU programming, but will provide enough of an introduction that you know what to continue learning when faced with supercomputing-related challenges.
As a graduate-level course, this class affords more independence than most undergraduate classes. Assignments and projects usually involve more decision-making; you are given specs and expected to find your own path to fulfill them, which may involve searching language and library documentation and difficult high-level design choices. If you haven’t done much open-ended programming, this will help you mature as a programmer–expect some growing pains to accompany your progression.
Prerequisites
This course is taught in C++ and Julia (starting Fall 2023). Some language instruction will occur during the course and skeleton code is used in some places, but prior C++ knowledge is extremely helpful. If you want a free C++ primer, consider something like W3Schools. Free Julia resources are available here.
Prior to taking the class, students must know how to program in at least one language, including knowing how to write conditionals, loops, and functions. C++ is strongly preferred. Experience with only the R programming language has been found to be insufficient preparation. A computer science background is not necessary except for the programming skills requirement. The first phase of the project serves as a good litmus test–if you struggle with it, the course will seriously challenge you since subsequent assignments increase in difficulty. The less programming experience you have the harder the class will be. We have found that people of most skill levels do very well in the class, though it definitely takes more effort for those with less of a programming background. If you don’t have much experience programming, please plan to spend additional effort learning some of the programming concepts. The first phase of the semester-long project is one of the easier assignments, and is a good way to determine whether you’re prepared for the class. Please email us or open a support ticket if you have questions.
Getting Help
Help is readily available during business hours; send an email or a Slack message and we’ll help you out, over email or chat for simple problems or video conference for more complicated questions. When you do ask for help, it’s expected that your code is clean and understandable–if you come to us with spaghetti code, you’ll be asked to untangle it and come back.
If you run into confusing material, typos, syntax errors, or similar, you can get extra credit by letting us know. You can also leave feedback anonymously.
Grading
The standard grading scale is used–A for 93% or more, A- for 90%-93%, B+ for 87%-90%, etc. Enough extra credit is offered that we don’t round up. The semester-long project accounts for about 55% of your grade, quizzes and tests for 25%, and everything else for 20%.
For assignments and projects, there is a 20% penalty for the first day late, then an additional 10% penalty for each subsequent day late with a maximum penalty of 80%. For quizzes, tests, and presentations, there is a 20% penalty per day late, with no credit after 4 days late. The final can’t be taken after the end of the semester.
Project rubrics aren’t iron-clad–we may award more points than indicated in some cases. For example, if your program fails to compile and would thus receive 5 points according to the assignment’s rubric, but fixing a single, obvious typo results in a correct program, you may actually receive significantly more points.
Contact us if you have exceptional circumstances.
AI Policy
As you work on the semester project, you may struggle to implement the code changes. AI tools can be valuable resources to help you overcome hurdles. However, it’s essential to use these tools responsibly and in a way that fosters your learning and development.
Before turning to AI, you should attend/review the weekly Q&A as it is enough to give you a general sense of direction. Next, read official documentation that’s linked in each project phase. Documentation often provides simple solutions and can enhance your comprehension. We also encourage you to reach out to us or discuss with your classmates if you’re stuck.
You are permitted to consult AI tools to assist with syntactical issues in your coding assignments. When using AI for this purpose, any solutions obtained must be manually typed. Copying and pasting code directly from AI outputs into your project is not permitted. This practice ensures a thorough reading of a solution and reinforces your understanding.
AI is never allowed on tests or quizzes.
HPC is often on the cutting edge of research out in industry and there isn’t always a clearly defined solution. As such, it’s pretty easy to spot where AI was used. It typically sends students down a harder and more complex path that’s easy for an experienced programmer to spot. AI hallucinations will plague you and this course gives you a foundation to recognize when it errors. Please take the time now to build such a foundation.