High Performance Scientific Computing with C
- 2.5 hours on-demand video
- 1 downloadable resource
- Full lifetime access
- Access on mobile and TV
- Certificate of Completion
Get your team access to 4,000+ top Udemy courses anytime, anywhere.Try Udemy for Business
- Use the C programming language to write numerical code
- Get to know Core algorithms used in scientific computing
- See how CPU design limits program performance
- Control the speed and accuracy of your programs
- Know the limitations of inaccuracy and performance and tradeoffs between them
- Use modern parallel architectures, distributed systems, and GPGPU accelerators to speed up your programs
- Optimize and extend your code to use multiple cores with OpenMP and across multiple networked machines using MPI
Why is the history of computation so tied with mathematics? How are computers used today to solve mathematical problems?
• Understand the need for computers to solve mathematical problems
• Understand the problems for which computers are used
• Understand what errors and problems computers might face while solving problems
How are real numbers stored and manipulated? How does this affect our program’s performance?
• Learn how the IEEE-754 standard defines floating-point storage
• Learn the range of floating-point numbers
• See how we can go beyond this with subnormalnumbers, underflows, and overflows
How can we deal with spectral data? How can we apply divide-and-conquer approaches to numerical algorithms?
• See how simple the DFT is to implement
• Learn how to apply the divide-and-conquer approach for the FFT
• See the huge speed-up that the FFT provides over the DFT
How can we extend our programs to use multiple cores? Why would we want to? What limitations might exist?
• Learn the different kinds of parallel architectures
• Learn about strong scaling and Amdahl’s law
• Learn about weak scaling and Gustafson’s law
- This course is for scientists, engineers, or programmers who already know at least one programming language or have some basic knowledge of C.
In this course, you’ll learn to develop scientific and numerical programs that solve problems. It’s ideal for scientists, engineers, and programmers who need to model mathematical or physical systems. You’ll get a core toolkit of algorithms that can be used in a wide variety of applications, using the low-level capabilities of the C programming language.
The close-to-the-metal approach means you’ll learn to optimize our programs to get the absolute best performance that our hardware can provide. You’ll see how the design of algorithms affects their performance and accuracy, the tools that can be used to optimize your code and develop your intuition about numerical problems. Finally, you’ll examine the growing array of parallel solutions that enable you to take advantage of multi-core CPUs, distributed compute clusters and GPU accelerators.
By the end of this course, you’ll know how to write fast, accurate code that can run on many different platforms and solve many different scientific problems.
About the Author
Benjamin Keller is a postdoctoral researcher in the MUSTANG group at Universität Heidelberg's Astronomisches Rechen-Institut. He obtained his Ph.D. at McMaster University and got his BSc in Physics with a minor in Computer Science from the University of Calgary in 2011. His current research involves numerical modeling of the interstellar medium over cosmological timescales.
He comes with an experience in writing scientific code in C, FORTRAN, and Python. He also works as a Python consultant for data science startups, building visualization and data science pipelines.
At McMaster, he worked with Dr. James Wadsley in the Physics & Astronomy department. His current research involves numerical simulations of galaxy formation on supercomputers with 10,000+ cores. He has also been a key contributor to multiple scientific computing projects, from simulation codes to visualization libraries.
- It’s ideal for those want to learn to use numerical solutions for complex mathematical problems. It’s for those who need to develop code to simulate physical systems, deal with continuous data, or squeeze extra performance out of their existing hardware.