{ "cells": [ { "cell_type": "markdown", "id": "261d10af", "metadata": {}, "source": [ "# Installation" ] }, { "cell_type": "markdown", "id": "71b45751", "metadata": {}, "source": [ "To set up the python environment, we will use Anaconda ( www.anaconda.com). Click the link and follow the instructions.\n", "\n", "\n", "Once installed, search for the installed app, which should be called something like **Anaconda-Navigator**. Once *Navigator* starts, go to *Environments*, and *Search Packages*. Please check for the following packages:\n", "- numpy\n", "- scipy\n", "- matplotlib\n", "- notebook (jupyter notebook)\n", "- numba\n", "- uncertainties\n", "- pybind11" ] }, { "cell_type": "markdown", "id": "cbe261a4", "metadata": {}, "source": [ "We will also need a text editor for python codes (in addition to jupyter notebooks). **Spyder** is part of Anaconda, and is very powerful editor. You can find it inside *Anaconda-Navigator*.\n", "\n", "But other editors of your choice are equally good (for example *emacs* or *Aquamacs* or *vim* or *vi*)" ] }, { "cell_type": "markdown", "id": "f556e632", "metadata": {}, "source": [ "Some examples to speed up the code will be given in C++. It is not essential to have it, but you will learn more if you can set up the environment with a C++ compiler (such as gcc), which can be combined with Python. For installation instructions, see the `Optional installation of C++` below. We will also show examples below." ] }, { "cell_type": "markdown", "id": "bec6c2f1", "metadata": {}, "source": [ "We will test the installation with an excercise of plotting **Mandelbrot set.**" ] }, { "cell_type": "markdown", "id": "22f41c3b", "metadata": {}, "source": [ "## Mandelbrot set" ] }, { "cell_type": "markdown", "id": "ab9d4c3d", "metadata": {}, "source": [ "Wikipedia: The Mandelbrot set $M$ is defined by a family of complex quadratic polynomials $f(z) = z^2 + z_0$ where $z_0$ is a complex parameter. For each $z_0$, one considers the behavior of the sequence $(f(0), f(f(0)), f(f(f(0))), · · ·)$ obtained by iterating $f(z)$ starting at $z=0$, which either escapes to infinity or stays\n", "within a disk of som finite radius. The *Mandelbrot set* is defined as the set of points $z_0$, such that the above sequence does not escape to infinity." ] }, { "cell_type": "markdown", "id": "f6cadfbb", "metadata": {}, "source": [ "More concretely, the sequence is : $(z_0,z_0^2+z_0,z_0^4+2 z_0^3+z_0^2+z_0,...)$.\n", "\n", "For large $z_0$ it behaves as $z_0^{2n}$ and clearly diverges at large $n$. Consequently, large $z_0$ is not part of the set. \n", "\n", "For small $z_0$, it is of the order of $z_0+O(z_0^2)$, and is small when $z_0$ is small. Such $z_0$ are part of the set.\n", "\n", "To determine that certain $z_0$ is not part of the *Mandelbrot set*, we check if $|f(f(f(....)))|>2$. \n", "This treshold is sufficient, because the point with the largest magnitude that is still in the set is -2. Indeed, if we set $z_0=-2$, we see that $f(f(0))=(-2)^2-2=2$ and $f(f(f(0)))=2^2-2=2$, and for any number of itterations the sequence remains equal to $2$. Such sequence remains finite, and by definition $z_0=-2$ is part of the set, and $f(f(f(...)))=2$ might lead to finite sequence. \n", "\n", "For any other point $z_0\\ne -2$, we can show that once $f(f(f(...)))$ becomes $2$, it will lead to diverging sequence. For example, for $z_0=1$ we have $f(f(0))=2$ and $f(f(f(0)))=5$, and clearly grows.\n", "\n", "We will make density plot, with $Re(z_0)$ on $x$-axis, and $Im(z_0)$ on $y$-axis, and color will denote how long it took for the sequence to have absolute value equal to 2. The mandelbrot set will have one color, and all other colors \n", "\n" ] }, { "cell_type": "code", "execution_count": 1, "id": "1338f8ce", "metadata": {}, "outputs": [], "source": [ "from numpy import * # because arrays are defined in numpy\n", "\n", "def Mand(z0, max_steps):\n", " z = 0j # no need to specify type. \n", " # To initialize to complex number, just assign 0j==i*0\n", " for itr in range(max_steps):\n", " if abs(z)>2:\n", " return itr\n", " z = z*z + z0\n", " return max_steps\n", "\n", "\n", "def Mandelbrot(ext, Nxy, max_steps):\n", " \"\"\"\n", " ext[4] -- array of 4 values [min_x,max_x,min_y,max_y]\n", " Nxy -- int number of points in x and y direction\n", " max_steps -- how many steps we will try at most before we conclude the point is in the set\n", " \"\"\"\n", " data = zeros((Nxy,Nxy)) # initialize a 2D dynamic array\n", " for i in range(Nxy):\n", " for j in range(Nxy):\n", " x = ext[0] + (ext[1]-ext[0])*i/(Nxy-1.)\n", " y = ext[2] + (ext[3]-ext[2])*j/(Nxy-1.)\n", " # creating complex number of the fly\n", " data[i,j] = Mand(x + y*1j, max_steps) \n", " return data\n", "# data now contains integers. \n", "# MandelbrotSet has value 1000, and points not in the set have value <1000." ] }, { "cell_type": "code", "execution_count": 2, "id": "07e8719a", "metadata": {}, "outputs": [], "source": [ "data = Mandelbrot([-2,1,-1,1], 500, 1000)" ] }, { "cell_type": "code", "execution_count": 3, "id": "17549e0a", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from pylab import * # plotting library\n", "%matplotlib inline\n", "\n", "ext=[-2,1,-1,1]\n", "# pylab's function for displaying 2D image\n", "imshow(transpose(data), extent=ext) " ] }, { "cell_type": "markdown", "id": "91fc0a63", "metadata": {}, "source": [ "This resolution is somewhat low, and we would like to increase $N_{xy}$ to 1000. But this would make the code 4-times slower. The code is already time consuming.\n", "Let's time it. \n", "\n", "For that we need to include *time* and use *time.time()* routine." ] }, { "cell_type": "code", "execution_count": 4, "id": "b3ada506", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "clock time: 21.987634897232056 s\n" ] } ], "source": [ "import time # timeing\n", "t0 = time.time()\n", "data = Mandelbrot([-2,1,-1,1], 1000, 1000)\n", "t1 = time.time()\n", "print ('clock time: ',t1-t0,'s')" ] }, { "cell_type": "markdown", "id": "7e8bada7", "metadata": {}, "source": [ "We can speed up the code with package **numba**: https://numba.pydata.org.\n", "\n", "In the simplest case, we just add two lines of code: \n", "\n", "`from numba import njit`\n", "\n", "`@njit`\n", "\n", "\n", "Limitations of Numba:\n", "- Numba only accelerates code that uses scalars or (N-dimensional) arrays. You can’t use built-in types like `list` or `dict` or your own custom classes.\n", "- You can’t allocate new arrays in accelerated code.\n", "- You can’t use recursion.\n", "Most of those limitations are removed if using Cython.\n", "\n", "Numba has been getting a lot better, even just over the past few months (e.g., they recently added support for generating random numbers).\n" ] }, { "cell_type": "code", "execution_count": 5, "id": "23b6e039", "metadata": {}, "outputs": [], "source": [ "from numpy import * # because arrays are defined in numpy\n", "from numba import njit # This is the new line with numba\n", "\n", "@njit # this is an alias for @jit(nopython=True)\n", "def Mand(z0, max_steps):\n", " z = 0j # no need to specify type. \n", " # To initialize to complex number, just assign 0j==i*0\n", " for itr in range(max_steps):\n", " if abs(z)>2:\n", " return itr\n", " z = z*z + z0\n", " return max_steps\n", "\n", "@njit\n", "def Mandelbrot2(ext, Nxy, max_steps):\n", " \"\"\"\n", " ext[4] -- array of 4 values [min_x,max_x,min_y,max_y]\n", " Nxy -- int number of points in x and y direction\n", " max_steps -- how many steps we will try at most before we conclude the point is in the set\n", " \"\"\"\n", " data = zeros((Nxy,Nxy)) # initialize a 2D dynamic array\n", " for i in range(Nxy):\n", " for j in range(Nxy):\n", " x = ext[0] + (ext[1]-ext[0])*i/(Nxy-1.)\n", " y = ext[2] + (ext[3]-ext[2])*j/(Nxy-1.)\n", " # creating complex number of the fly\n", " data[i,j] = Mand(x + y*1j, max_steps) \n", " return data\n", "# data now contains integers. \n", "# MandelbrotSet has value 1000, and points not in the set have value <1000." ] }, { "cell_type": "code", "execution_count": 8, "id": "177c553b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "clock time: 1.300595998764038 s\n" ] } ], "source": [ "import time # timeing\n", "t0 = time.time()\n", "data = Mandelbrot2(array([-2,1,-1,1]), 1000, 1000)\n", "t1 = time.time()\n", "print ('clock time: ',t1-t0,'s')" ] }, { "cell_type": "markdown", "id": "b1a649b8", "metadata": {}, "source": [ "This is substantial speedup of order of 20, considering a small modification required.\n", "\n", "We can slightly improve the code by making the outer loop over i parallel, and by allocating array for data outside the optimized routine.\n", "\n", "- We will allocate array data outside `Mandelbrot` function\n", "- We will change `@njit` to `@njit(parallel=True)` and use `prange` instead of `range` for loop over j. Namely, if we don't change `range` to `prange` both loops will be attempted to be parallelized, which leads to nested parallelization, which either fails or is very innefficient.\n", "\n", "\n", "The example code is:" ] }, { "cell_type": "code", "execution_count": 9, "id": "48285424", "metadata": {}, "outputs": [], "source": [ "from numpy import * # because arrays are defined in numpy\n", "from numba import njit # This is the new line with numba\n", "from numba import prange\n", "\n", "@njit # this is an alias for @jit(nopython=True)\n", "def Mand(z0, max_steps):\n", " z = 0j # no need to specify type. \n", " # To initialize to complex number, just assign 0j==i*0\n", " for itr in range(max_steps):\n", " if abs(z)>2:\n", " return itr\n", " z = z*z + z0\n", " return max_steps\n", "\n", "@njit(parallel=True)\n", "def Mandelbrot3(data, ext, max_steps):\n", " \"\"\"\n", " ext[4] -- array of 4 values [min_x,max_x,min_y,max_y]\n", " Nxy -- int number of points in x and y direction\n", " max_steps -- how many steps we will try at most before we conclude the point is in the set\n", " \"\"\"\n", " Nx,Ny = shape(data) # 2D array should be already allocated we get its size\n", " for i in range(Nx):\n", " for j in prange(Ny): # note that we used prange instead of range.\n", " # this switches off parallelization of this loop, so that\n", " # only the outside loop over i is parallelized.\n", " x = ext[0] + (ext[1]-ext[0])*i/(Nx-1.)\n", " y = ext[2] + (ext[3]-ext[2])*j/(Ny-1.)\n", " # creating complex number of the fly\n", " data[i,j] = Mand(x + y*1j, max_steps) \n", "# data now contains integers. \n", "# MandelbrotSet has value 1000, and points not in the set have value <1000." ] }, { "cell_type": "code", "execution_count": 12, "id": "514a077b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "clock time: 0.3214530944824219 s\n" ] } ], "source": [ "import time # timeing\n", "data = zeros((1000,1000))\n", "t0 = time.time()\n", "Mandelbrot3(data, array([-2,1,-1,1]), 1000)\n", "t1 = time.time()\n", "print ('clock time: ',t1-t0,'s')" ] }, { "cell_type": "markdown", "id": "afa8299f", "metadata": {}, "source": [ "With this modification, we get speedup of the order of 50.\n", "Note that pure C++ code with OpenMP could gives us speedup of the order of 200, i.e., extra factor of 4 on MAC with 8 cores.\n" ] }, { "cell_type": "markdown", "id": "28442589", "metadata": {}, "source": [ "Finally, let us improve the plot a bit. We will transform the data to plot `-logarithm` of the data (density logplot), so that *Mandelbrot Set* has the smallest value (appears black), and borders are more apparent.\n", "\n", "We will use different color scheme, for example `hot` color scheme from `matplotlib.cm`." ] }, { "cell_type": "code", "execution_count": 13, "id": "fb9d9862", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.cm as cm\n", "\n", "imshow(-log(data.T), extent=[-2,1,-1,1], cmap=cm.hot) " ] }, { "cell_type": "markdown", "id": "c7553894-b15c-42f5-9a2b-655fd8f7bd6a", "metadata": {}, "source": [ "## Optional: Using C++ with `pybind11` to speed up the code \n", "\n", "To make the code as fast as in compiler languages (C++ or fortran), we can rewrite the slow part directly in C++, and use pybind11 to produce a python module from C++ code.\n", "\n", "### Optional installation of C++. These instructions are MAC specific\n", "\n", "- Install `Xcode` package from `App Store`\n", "- Install \"Command Line Tools\" parts of `Xcode`. You can check if \"Command Line Tools\" are already installed by issuing the following in the`terminal`:\n", "\n", " `xcode-select --print-path`.\n", "\n", " If you get no output, then issue the following command in your `terminal`:\n", "\n", " `xcode-select —-install`\n", "\n", " Xcode contains `C/C++` compiler (`gcc/g++`). Check if installation was successful by issuing in `terminal`:\n", "\n", " `gcc --version`\n", " \n", " It is just a link to apples native Clang. It contains `make` utility.\n", " Xcode also contains many libraries, for example, BLAS and LAPACK libraries, which can be linked by adding linker option: `-framework Accelerate`.\n" ] }, { "cell_type": "markdown", "id": "94deb9c3", "metadata": {}, "source": [ "### Return to `pybind11` to speed up the code \n", "\n", "The function `mand` is written in conventional C++ language. For storage, we use type `py::array_t`, which can convert any numpy arrays to a simple C++ container, that can be accessed conventionally.\n", "\n", "We do that in the very top of the function, where we extract proper type from `py::array_t`\n", "\n", "`auto dat = data.mutable_unchecked<2>();`\n", "\n", "\n", "The `dat` object behaves as normal 2D array, which can be accessed via `dat(j,i)=...`. \n", "\n", "To have access to these Python types, we need to include a few `pybind11` header files:\n", "\n", "`#include \"pybind11/pybind11.h\"`
\n", "`#include \"pybind11/numpy.h\"`
\n", "`#include \"pybind11/stl.h\"`\n", "\n", "The crucial difference between normal C++ code or Python module is that the `main()` function is replaced by `PYBIND11_MODULE(imanc,m)`, which creates shared library that Python recognizes as module, rather than executable. Here, the first argument has to match the name of the file compiled file (`imanc.cc` and `imanc`). The second argument creates object with name `m`, which can than be filled with functions or classes that are exposed to Python. We just add our function `mand` to it : `m.def(\"mand\", &mand);`. The string `\"mand\"` gives name to this function in Python, which could in general be different, and `&mand` takes the pointer to existing C++ routine and binds it to Python module. The line `m.doc() = \"...\"` adds some documentation to the module as seen from Python.\n", "\n", "\n", "The entire C++ code below is just a long string (because jupyter has very limited support for C++). The last three lines in the cell open new file `imanc.cc`, write the code to this file, and close it, so that all content is safely written to this file.\n" ] }, { "cell_type": "code", "execution_count": 14, "id": "149367bd", "metadata": {}, "outputs": [], "source": [ "CPP_code=\"\"\"\n", "#include \"pybind11/pybind11.h\"\n", "#include \"pybind11/numpy.h\"\n", "#include \"pybind11/stl.h\"\n", "#include \n", "\n", "namespace py = pybind11;\n", "using namespace std;\n", "\n", "void mand(py::array_t& data, int Nx, int Ny, int max_steps, const vector& ext)\n", "{\n", " auto dat = data.mutable_unchecked<2>();\n", " #pragma omp parallel for\n", " for (int i=0; i z0(x,y);\n", " complex z=0;\n", " for (int itr=0; itr4.){\n", " dat(j,i) = itr;\n", " break;\n", " }\n", " z = z*z + z0;\n", " }\n", " }\n", " }\n", "}\n", "\n", "PYBIND11_MODULE(imanc,m){\n", " m.doc() = \"pybind11 wrap for mandelbrot\";\n", " m.def(\"mand\", &mand);\n", "}\n", "\"\"\"\n", "file = open('imanc.cc', mode='w')\n", "file.write(CPP_code)\n", "file.close()" ] }, { "cell_type": "markdown", "id": "e42c41e0", "metadata": {}, "source": [ "Next we check that the file now exists in the working directory, where our jupyter notebook is located." ] }, { "cell_type": "code", "execution_count": 15, "id": "a69a3d20", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "total 3464\r\n", "-rw-r--r--@ 1 haule staff 588532 Jan 2 22:19 Interactive MandelbrotSet.html\r\n", "-rw-r--r-- 1 haule staff 4500 Jan 2 22:15 Interactive MandelbrotSet.ipynb\r\n", "-rw-r--r--@ 1 haule staff 850412 Jan 2 22:18 Introduction to Comp Phys 488.html\r\n", "-rw-r--r-- 1 haule staff 141677 Jan 6 15:06 Introduction to Comp Phys 488.ipynb\r\n", "-rw-r--r-- 1 haule staff 828 Jan 6 15:06 imanc.cc\r\n", "-rwxr-xr-x 1 haule staff 174152 Jan 6 13:35 \u001b[1m\u001b[31mimanc.so\u001b[m\u001b[m\r\n", "drwxr-xr-x 6 haule staff 192 Jan 6 13:29 \u001b[1m\u001b[34mpybind11\u001b[m\u001b[m\r\n" ] } ], "source": [ "cmd = 'ls -l'\n", "!{cmd}" ] }, { "cell_type": "markdown", "id": "b168c682", "metadata": {}, "source": [ "Next we need to compile C++ code to create proper shared libray, which Python recognizes. This string is platform dependent, and in its current form is most appropriate for MAC. It needs some modification on other platforms. Please read the documentation and instructions to modify the compile line.\n", "\n", "We will again create a long string, which is a line that is normally written in comand line, and we will than execute it on the system.\n", "\n", "As said, the complile line is system dependend, and will most likely need modification. Here is the explanation of the command:\n", "\n", "- `g++-12` is tha name of the C++ compiler on the sytstem. Most likely needs to be changed to your existsing C++ compiler.\n", "\n", "- `python3 -m pybind11 --includes` is line that can be executed in command line (try it) and should give the location of `pybind11` include files. Each computer will have these files at slightly different location, but this command should work in most systems.\n", "\n", "- `-undefined dynamic_lookup` is something MAC specific. Withouth this flag, the compiler will issue errors of missing symbols in the module. In other operating systems should not be needed.\n", "\n", "- `-O3` switches on agrresive optimization.\n", "\n", "- `-fopenmp` allows the code to be parallelized by openMP. Namely the code above has a line `#pragma omp parallel for`, which parallelizes the first loop over i, provided that we also add this flag during compilation.\n", "\n", "- `shared` tells the compiler that we are producing shared library\n", "\n", "- `-std=c++11` forces compiler to use C++ 2011 standard. We could use later standard, but not earlier.\n", "\n", "- `-fPIC` makes code position independent, which is required for shared library\n", "\n", "- `imanc.cc` is the name of our file that is being compiled.\n", "\n", "- `-o imanc.so` says that the output file will be called `imanc.so`. The Python module is thus named `imanc`.\n" ] }, { "cell_type": "code", "execution_count": 16, "id": "57ca239f", "metadata": {}, "outputs": [], "source": [ "#cmd=\"g++ `python -m pybind11 --includes` -undefined dynamic_lookup -O3 -shared -std=c++11 -fPIC imanc.cc -o imanc.so\"\n", "cmd=\"g++ `python -m pybind11 --includes` -undefined dynamic_lookup -O3 -shared -std=c++11 -fPIC imanc.cc -o imanc.so\"\n", "\n", "!{cmd}" ] }, { "cell_type": "markdown", "id": "911b1ab0", "metadata": {}, "source": [ "Finally, we import this generated module `imanc` and use the exposed function `mand` as `imanc.mand()`, which requires several arguments (see C++ code `mand` to understand the arguments). The arguments are `data, Nx, Ny, max_steps, ext`." ] }, { "cell_type": "code", "execution_count": 17, "id": "0ba2fbae", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "pybind11: walltime: 1.0743510723114014\n" ] } ], "source": [ "import imanc # We now import pybind11 module, produced with C++ code\n", "\n", "data3 = ones((1000,1000))\n", "\n", "t0 = time.time()\n", "imanc.mand(data3, 1000, 1000, 1000, [-2,1,-1,1])\n", "t1 = time.time()\n", "\n", "print('pybind11: walltime: ', t1-t0)" ] }, { "cell_type": "markdown", "id": "ddf0922c", "metadata": {}, "source": [ "The walltime should be around 150 - 200 times shorter than pure python code above. This close to the optimal performance of modern computers. \n", "\n", "Unfortunately, my current computer has `silicon` architecure, and anaconda seems to not yet properly take advantage of its speed. I can only demonstrate the speed in terminal running different `python` version from `homebrew`.\n", "\n", "Finally we replot the data." ] }, { "cell_type": "code", "execution_count": 18, "id": "7acda3b9", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import matplotlib.cm as cm\n", "\n", "imshow(-log(data3), extent=ext, cmap=cm.hot) " ] }, { "cell_type": "markdown", "id": "6e1ee084-4d0f-4f22-a8df-0ae71c101ae2", "metadata": {}, "source": [ "## Popularity of programing languages\n", "\n", "https://www.tiobe.com/tiobe-index/\n" ] }, { "cell_type": "code", "execution_count": null, "id": "a77157de-5f46-4cc1-99db-216dafa14fd2", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.18" } }, "nbformat": 4, "nbformat_minor": 5 }