*** This file is complete.*** The final exam covers the entire course. Therefore, the hints for all previous 2013 quizzes and the questions and answers for all 2011 and 2013 quizzes will be helpful. Also, you should review lecture notes, relevant sections of the textbook, your old homeworks, and the posted comments/solutions for your homeworks. There may be a true/false question. If so, it will have the format and scoring algorithm of question 1 on http://www.cs.umd.edu/~oleary/c460/q10.pdf, with a max score of 20 and a min score of 0. I will give you a copy of the IA32 instructions handout and the floating point assembler instruction handout if they are needed. You will be allowed to bring in one sheet of paper, 8.5" x 11", with any notes you think will be helpful. -- You may use both sides, but no "overlays". -- The paper must be handwritten by you. -- You will submit the sheet with your exam. In addition, be able to: -- Given a task, identify it as performed by an operating system, a compiler, or an applications code. Examples: allocate space on a disk. interpret pragmas in a C code. handle overflow. -- Identify the role of BIOS and the bootstrap loader. -- Distinguish between tasks performed by hardware, operating system, applications programs, and BIOS. -- List 5 major themes from the course and 5 important things you have learned. -- Explain the significance of the username for the website: what did she have to do with scientific computing? -- Identify the tasks in the stages in gcc: preprocessor, compiler, assembler, linker. -- Distinguish local, global, and external symbols (linker slide 14), and those the linker does not handle. -- Explain why GPUs are good computational devices, and why they can be difficult to use effectively. From the student presentations, this is all that you need to be able to do: -- Know the capabilities of tools like debuggers, version control, profilers, collaborative code repositories (Dropbox), and symbolic arithmetic systems. in your development of software. -- Define a loop invariant, which is a property that holds before each iteration of a "for" loop, or before each repetition in a "while" loop. Example: This Matlab program computes n-factorial. The loop invariant is "For each value of j, f = (j-1)!". f = 1; for j=1:n, f = f * j; end Loop invariants are used in induction proofs to show that programs are correct. -- Explain that (pseudo) random number generators (like the functions "rand" in C or Matlab generate a permutation of a list of numbers so that the sequence has properties that mimic truly random numbers, such as those generated by the intervals between decays of atomic particles. A "seed" is used to specify where in the sequence you wish to begin. -- Explain what encryption is and why scientific data might need to be encrypted. -- Define the halting problem. -- Write a program for an out-of-core sorting algorithm or a parallel sorting algorithm. -- Understand that some problems (e.g., prime factorization) are easy on quantum computers and hard on conventional machines. *** This file is complete.***