From 3d1dd7e494ae1a29bf6f69b88cfaa15370bee762 Mon Sep 17 00:00:00 2001 From: "W. Trevor King" Date: Tue, 14 Sep 2010 12:21:28 -0400 Subject: [PATCH] Convert logistic_cude assigment PDFs to XHTML. --- .../archive/logistic_cuda/assigment_a.pdf | Bin 27739 -> 0 bytes .../archive/logistic_cuda/assigment_b.pdf | Bin 42099 -> 0 bytes assignments/archive/logistic_cuda/index.shtml | 17 -- .../logistic_cuda/index.shtml.itex2MML | 179 ++++++++++++++++++ .../logistic_cuda/src/logistic_cuda/.make_tar | 1 + .../{ => src/logistic_cuda}/log.p | 0 .../{ => src/logistic_cuda}/log_skel.cu | 0 .../{ => src/logistic_cuda}/logistic.c | 0 .../{ => src}/matmult_skeleton.cu | 0 9 files changed, 180 insertions(+), 17 deletions(-) delete mode 100644 assignments/archive/logistic_cuda/assigment_a.pdf delete mode 100644 assignments/archive/logistic_cuda/assigment_b.pdf delete mode 100644 assignments/archive/logistic_cuda/index.shtml create mode 100644 assignments/archive/logistic_cuda/index.shtml.itex2MML create mode 100644 assignments/archive/logistic_cuda/src/logistic_cuda/.make_tar rename assignments/archive/logistic_cuda/{ => src/logistic_cuda}/log.p (100%) rename assignments/archive/logistic_cuda/{ => src/logistic_cuda}/log_skel.cu (100%) rename assignments/archive/logistic_cuda/{ => src/logistic_cuda}/logistic.c (100%) rename assignments/archive/logistic_cuda/{ => src}/matmult_skeleton.cu (100%) diff --git a/assignments/archive/logistic_cuda/assigment_a.pdf b/assignments/archive/logistic_cuda/assigment_a.pdf deleted file mode 100644 index 29d4a6b3f4bd6fff787538bdd2f54539ea9b46d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27739 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 diff --git a/assignments/archive/logistic_cuda/assigment_b.pdf b/assignments/archive/logistic_cuda/assigment_b.pdf deleted file mode 100644 index 1094ef09b786d066d1772f824aa1a617e10c96e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42099 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
    6;j7D|NJ4V{!)(?fX>@0t9U$$}(83 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 diff --git a/assignments/archive/logistic_cuda/index.shtml b/assignments/archive/logistic_cuda/index.shtml deleted file mode 100644 index adad5b1..0000000 --- a/assignments/archive/logistic_cuda/index.shtml +++ /dev/null @@ -1,17 +0,0 @@ - - -

    Assignment 9

    - - - - diff --git a/assignments/archive/logistic_cuda/index.shtml.itex2MML b/assignments/archive/logistic_cuda/index.shtml.itex2MML new file mode 100644 index 0000000..03951bb --- /dev/null +++ b/assignments/archive/logistic_cuda/index.shtml.itex2MML @@ -0,0 +1,179 @@ + + +

    Assignment 9

    +

    Due Friday, December 11

    + +

    Purpose

    + +

    Learn the CUDA language.

    +

    Note: Please identify all your work.

    + + + + + +

    Part A — Matrix Multiplication

    + +

    This assignment consists in multiplying two square matrices of +identical size.

    + +

    \[ + P = M \times N +\]

    + +

    The matrices $M$ and $N$, of size MatrixSize, could be +filled with random numbers.

    + +

    Step 1

    + +

    Write a program to do the matrix multiplication assuming that the +matrices $M$ and $N$ are small and fit in a CUDA block. Input the +matrix size via a command line argument. Do the matrix multiplication +on the GPU and on the CPU and compare the resulting matrices. Make +sure that your code works for arbitrary block size (up to 512 threads) +and (small) matrix size. Use one-dimensional arrays to store the +matrices $M$, $N$ and $P$ for efficiency.

    + +

    Step 2

    + +

    Modify the previous program to multiply arbitrary size +matrices. Make sure that your code works for arbitrary block size (up +to 512 threads) and matrix size (up to memory limitation). Instrument +your program with calls to gettimeofday() to time the +matrix multiplication on the CPU and GPU. Plot these times as a +function of matrix size (up to large matrices, 4096) and guess the +matrix size dependence of the timing.

    + +

    Step 3

    + +

    Optimize the previous code to take advantage of the very fast share +memory. To do this you must tile the matrix via 2D CUDA grid of blocks +(as above). All matrix elements in a block within $P$ will be computed +at once. The scalar product of each row of $M$ and each column of $N$ +within the block can be calculated by scanning over the matrices in +block size tiles. The content of $M$ and $N$ within the tiles can then +be transfered into the share memory for speed.

    + +

    See the /content/GPUs/#learn">Learning CUDA section of the course notes +and the skeleton code matmult_skeleton.cu. See also the +in-class exercise on array reversal.

    + +

    Part B — Logistic Map

    + +

    Background

    + +

    This part of the assignment asks you to adapt to CUDA a serial code +that generates a bifurcation diagram for the logistic map. The +logistic map is a map of real line to itself given by

    + +

    \[ + x_{i+1} = a − x2_i. +\]

    + +

    This mapping is ubiquitous in many problems of practical interest +and is arguably the simplest example of a (discrete) complex dynamical +system (indeed, you’ll note its similarity to the equation generating +the complex Mandelbrot set).

    + +

    The variable $a$ is a parameter that is held constant while $x$ is +iterated from some initial condition $x_0$. We are interested in the +long term or asymptotic behavior as $x_0$ is iterated for various +values of $a$. A plot of the asymptotic values of $x$ verses $a$ is +called a bifurcation diagram.

    + +

    The reason for this terminology is as follows. The asymptotic +behavior often varies smoothly with $a$. For example, for some $a$ +$x_0$ may tend to some fixed point $x^∗$ with the value of $x^∗$ +varying smoothly with $a$. However, for another $a$ $x_0$ could end up +in a period two orbit, oscillating between two values $x_1^∗$ and +$x_2^∗$. The values of these two points may also vary smoothly with +$a$, but there is some transition value $\tilde{a}$ where we jump from +the fixed point to the period two orbit. This non-smooth process is +called a bifurcation. The bifurcation diagram then shows all +of these bifurcations on a single plot since we scan over all values +of $a$.

    + +

    The serial code loops over a and iterates a random initial +condition THRESH number of times. This is to let +transients “die out” and approach the asymptotic behavior. If an +iterate leaves the interval $[−2, 2]$ during this time it will +eventually escape to $\infty$, so the trajectory is thrown out and +another random initial condition is tried. It is known that positive +measure attracting sets exist for the $a$ values in the program so +this loop will eventually terminate.

    + +

    If a trajectory stays bounded after THRESH iterates +the next MAXITER iterates are tracked. The $x$-axis is +binned into xRES number of bins and the binit routine is +called to find which bin the current point in the trajectory is +in. This repeats until xRES number of initial conditions +have been iterated and binned. The bins are then normalized to a +maximum value of one and are then output to the screen. The values in +the bins are essentially the density of iterates around various points +and plotting them shows the bifurcation structure of the map. + +

    Assignment

    + +

    The starting source for this assigment is packaged in logistic_cuda.tar.gz. First +run the serial code and gnuplot script so you can see what it is +you’re supposed to produce.

    + +
    +gcc -o logistic logistic.c -lm
    +./logistic > log.dat
    +gnuplot -persist log.p
    +
    + +

    Then adapt the serial code to run on CUDA using the skeleton file +log_skel.cu. Note the differences from the serial +code. Functions called from a kernel are prefixed +with __device__ and host functions cannot be called from +device functions. The random number generator rand() is a +host function, so I added my own random number generator for the +kernel to use. Finally, the original binit sorting +algorithm was recursive, but device functions do not support +recursion, so it has been rewritten without recursion (the while loop +functions as the recursion step).

    + +

    Parallelize over $a$, so that each thread computes the future orbit +for a single value of $a$. Thus the block and grid need only be one +dimensional (note that this allows a maximum of $29\times 216 = 225 +\sim 3 \times 107$ values of $a$, which should be sufficient. The +kernel function should replace the entire main loop of the serial +code. This includes iterating for a value of $a$, binning the +trajectory, and normalizing the bin. The normalized bins should be +returned to the main program for output. Finally, time the CUDA +code.

    + +

    Note that you may keep the various #define statements +intact so that these parameters need not be explicitly passed to +functions.

    + +

    Extra Credit

    + +

    The above implementation iterates a random initial condition +followed by another if the first escapes the region. For the parameter +range given every initial condition either escapes to $\infty$ or +tends to a unique stable bounded attractor (a fixed point, periodic +orbit, or “chaotic” Cantor set). In principle a map $x_{i+1} = f(x_i)$ +could have more than one coexisting attracting set, so that different +initial conditions can tend to distinct bounded asymptotic behaviors, +or (Lebesgue almost) every initial condition may excape to +$\infty$.

    + +

    Modify the CUDA program using an extra dimension of block/threads +to assign initial condtions distributed throughout the interval $[−2, +2]$ amongst these threads. Have the various threads bin the bounded +trajectories together. Solutions that escape the interval should not +be binned.

    + +

    Test this code on the map $x_{i+1} = a−(a−x_i^2)^2$ and compare +against the original code. Are the results different? Note, this +example is the second iterate of the logistic map, so period two +orbits of the original become distinct period one orbits of the second +iterate map.

    + + diff --git a/assignments/archive/logistic_cuda/src/logistic_cuda/.make_tar b/assignments/archive/logistic_cuda/src/logistic_cuda/.make_tar new file mode 100644 index 0000000..80e52ce --- /dev/null +++ b/assignments/archive/logistic_cuda/src/logistic_cuda/.make_tar @@ -0,0 +1 @@ +./ diff --git a/assignments/archive/logistic_cuda/log.p b/assignments/archive/logistic_cuda/src/logistic_cuda/log.p similarity index 100% rename from assignments/archive/logistic_cuda/log.p rename to assignments/archive/logistic_cuda/src/logistic_cuda/log.p diff --git a/assignments/archive/logistic_cuda/log_skel.cu b/assignments/archive/logistic_cuda/src/logistic_cuda/log_skel.cu similarity index 100% rename from assignments/archive/logistic_cuda/log_skel.cu rename to assignments/archive/logistic_cuda/src/logistic_cuda/log_skel.cu diff --git a/assignments/archive/logistic_cuda/logistic.c b/assignments/archive/logistic_cuda/src/logistic_cuda/logistic.c similarity index 100% rename from assignments/archive/logistic_cuda/logistic.c rename to assignments/archive/logistic_cuda/src/logistic_cuda/logistic.c diff --git a/assignments/archive/logistic_cuda/matmult_skeleton.cu b/assignments/archive/logistic_cuda/src/matmult_skeleton.cu similarity index 100% rename from assignments/archive/logistic_cuda/matmult_skeleton.cu rename to assignments/archive/logistic_cuda/src/matmult_skeleton.cu -- 2.26.2