501notes.pdf - COMPUTING FOR SCIENCE AND ENGINEERING...

Info icon This preview shows pages 1–5. Sign up to view the full content.

View Full Document Right Arrow Icon
COMPUTING FOR SCIENCE AND ENGINEERING Revised through end of Chapter 6 Robert D. Skeel This work is licensed under the Creative Commons Attribution 3.0 United StatesLicense. To view a copy of this license, visit or send a letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA.
Image of page 1

Info icon This preview has intentionally blurred sections. Sign up to view the full version.

View Full Document Right Arrow Icon
Contents 1 Introduction 1 1.1 Role of Computing in Science and Engineering . . . . . . . . . . . . . . . . . . . . . 1 1.2 Using Unix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2.1 Text editors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.2.2 Integrated development environments . . . . . . . . . . . . . . . . . . . . . . 5 1.2.3 Shell scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.2.4 Unix tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.3 Installation of Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 1.3.1 Unix, C compiler, and OpenMP . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.3.2 MPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 1.3.3 The Anaconda Python Distribution . . . . . . . . . . . . . . . . . . . . . . . 10 1.3.4 * The Enthought Python Distribution . . . . . . . . . . . . . . . . . . . . . . 10 1.3.5 * Separate Installation of Python and Packages . . . . . . . . . . . . . . . . . 10 1.3.6 MPI for Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.4 Use of Rosen Center Linux Cluster . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.4.1 Remote access and file transfer . . . . . . . . . . . . . . . . . . . . . . . . . . 12 1.4.2 Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2 Python 13 2.1 Interactive Computing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.1.1 Importing a module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.1.2 Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.1.3 Lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.1.4 Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.1.5 Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.1.6 Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.2 Developing a Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.2.1 Control structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.2.2 Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.2.3 Reading and writing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.3 Variables and Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.3.1 Variables and data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 i
Image of page 2
2.3.2 Assignment and copy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 2.3.3 Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.4 Developing a Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 2.4.1 Exception handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 2.4.2 Verification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 2.4.3 Side effects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 2.4.4 Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 2.4.5 Coding standards . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 2.4.6 Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 2.5 Operating System Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 2.6 Object-oriented Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 3 Python Extensions 32 3.1 NumPy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 3.1.1 Array constructors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 3.1.2 Indexing and slicing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 3.1.3 Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 3.1.4 Array operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 3.1.5 Fancy indexing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 3.1.6 Input/output functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 3.1.7 Matrix operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 3.2 NumPy Modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 3.2.1 Pseudo-random numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 3.2.2 Linear algebra functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 3.3 Matplotlib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 3.4 Other Extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 3.4.1 Computer algebra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 3.4.2 SciPy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 4 C Programming 41 4.1 Declarations and Control Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 4.2 Pointers, Arrays, and malloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 4.2.1 Pointers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 4.2.2 One-dimensional arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 4.2.3 Multidimensional arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 4.2.4 malloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 4.3 Functions and Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 4.3.1 Definitions vs. declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 4.3.2 Function pointers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 4.3.3 Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 4.4 Strings and Input/Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 4.4.1 Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 4.4.2 I/O functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 ii
Image of page 3

Info icon This preview has intentionally blurred sections. Sign up to view the full version.

View Full Document Right Arrow Icon
4.5 Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 4.5.1 Abstract data types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 4.5.2 Data structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 4.6 Compiling and Debugging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 4.6.1 Creating dynamically loaded libraries . . . . . . . . . . . . . . . . . . . . . . 57 4.6.2 Dynamic loading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 4.6.3 Improving performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 4.7 Calling Compiled Code from Python . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 4.7.1 The Python ctypes module . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 4.7.2 The NumPy ctypeslib module . . . . . . . . . . . . . . . . . . . . . . . . . . 61 5 Parallel Computing 63 5.1 Computer System Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 5.1.1 Computer organization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 5.1.2 Processes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 5.1.3 Python as glue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 5.2 Distributed Memory Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 5.2.1 MPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 5.2.2 Point-to-point operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 5.2.3 Collective operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 5.2.4 Grid computing and Condor . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 5.3 Computing on Scholar and PBS Job Submission . . . . . . . . . . . . . . . . . . . . 69 5.4 Shared Memory Programming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 5.4.1 POSIX Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 5.4.2 Cilk Plus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 5.4.3 OpenMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 5.4.4 OpenACC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 5.4.5 Coprocessors, including graphics processing units . . . . . . . . . . . . . . . . 74 5.4.6 Python multiprocessing module . . . . . . . . . . . . . . . . . . . . . . . . . . 75 6 Survey of Other Topics 77 6.1 Software Development . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 6.1.1 Version control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 6.1.2 Automated builds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 6.2 Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 6.2.1 Loop invariants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 6.2.2 Computational complexity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 6.2.3
Image of page 4
Image of page 5
This is the end of the preview. Sign up to access the rest of the document.

{[ snackBarMessage ]}

What students are saying

  • Left Quote Icon

    As a current student on this bumpy collegiate pathway, I stumbled upon Course Hero, where I can find study resources for nearly all my courses, get online help from tutors 24/7, and even share my old projects, papers, and lecture notes with other students.

    Student Picture

    Kiran Temple University Fox School of Business ‘17, Course Hero Intern

  • Left Quote Icon

    I cannot even describe how much Course Hero helped me this summer. It’s truly become something I can always rely on and help me. In the end, I was not only able to survive summer classes, but I was able to thrive thanks to Course Hero.

    Student Picture

    Dana University of Pennsylvania ‘17, Course Hero Intern

  • Left Quote Icon

    The ability to access any university’s resources through Course Hero proved invaluable in my case. I was behind on Tulane coursework and actually used UCLA’s materials to help me move forward and get everything together on time.

    Student Picture

    Jill Tulane University ‘16, Course Hero Intern