From 32926be25cf4788b32c1479eeb8fbf6e760266a2 Mon Sep 17 00:00:00 2001 From: Markus Holzer <markus.holzer@fau.de> Date: Thu, 22 Jun 2023 17:26:16 +0200 Subject: [PATCH] Replace PyCuda with CuPy --- .gitignore | 1 + README.md | 4 +- binder/environment.yml | 4 +- conftest.py | 6 +- .../01_tutorial_getting_started.ipynb | 497 +++++-- doc/notebooks/03_tutorial_datahandling.ipynb | 371 +++-- ...tutorial_phasefield_dentritic_growth.ipynb | 2 +- doc/notebooks/demo_wave_equation.ipynb | 265 ++-- doc/sphinx/kernel_compile_and_call.rst | 6 +- pystencils/__init__.py | 13 +- pystencils/boundaries/boundaryhandling.py | 7 +- pystencils/config.py | 2 +- pystencils/datahandling/blockiteration.py | 2 +- .../datahandling/datahandling_interface.py | 1 + .../datahandling/parallel_datahandling.py | 18 +- pystencils/datahandling/pycuda.py | 52 - .../datahandling/serial_datahandling.py | 42 +- pystencils/gpu/__init__.py | 9 + pystencils/{gpucuda => gpu}/cudajit.py | 56 +- pystencils/gpu/gpu_array_handler.py | 51 + pystencils/{gpucuda => gpu}/indexing.py | 39 +- pystencils/{gpucuda => gpu}/kernelcreation.py | 4 +- pystencils/{gpucuda => gpu}/periodicity.py | 4 +- pystencils/gpucuda/__init__.py | 7 - pystencils/include/__init__.py | 7 +- pystencils/include/cuda_complex.hpp | 1228 ----------------- pystencils/include/gpu_defines.h | 5 + pystencils/include/opencl_stdint.h | 15 - pystencils/kernelcreation.py | 4 +- pystencils_tests/test_boundary.py | 2 +- pystencils_tests/test_buffer_gpu.py | 15 +- pystencils_tests/test_custom_backends.py | 10 +- pystencils_tests/test_datahandling.py | 30 +- .../test_datahandling_parallel.py | 10 +- pystencils_tests/test_fast_approximation.py | 4 +- .../{test_cudagpu.py => test_gpu.py} | 38 +- pystencils_tests/test_indexed_kernels.py | 60 +- pystencils_tests/test_math_functions.py | 4 +- pystencils_tests/test_modulo.py | 2 +- .../test_phasefield_dentritic_3D.ipynb | 270 +++- pystencils_tests/test_print_infinity.py | 2 +- pystencils_tests/test_random.py | 2 +- pystencils_tests/test_simplifications.py | 4 +- setup.py | 2 +- 44 files changed, 1271 insertions(+), 1906 deletions(-) delete mode 100644 pystencils/datahandling/pycuda.py create mode 100644 pystencils/gpu/__init__.py rename pystencils/{gpucuda => gpu}/cudajit.py (72%) create mode 100644 pystencils/gpu/gpu_array_handler.py rename pystencils/{gpucuda => gpu}/indexing.py (91%) rename pystencils/{gpucuda => gpu}/kernelcreation.py (98%) rename pystencils/{gpucuda => gpu}/periodicity.py (95%) delete mode 100644 pystencils/gpucuda/__init__.py delete mode 100644 pystencils/include/cuda_complex.hpp create mode 100644 pystencils/include/gpu_defines.h delete mode 100644 pystencils/include/opencl_stdint.h rename pystencils_tests/{test_cudagpu.py => test_gpu.py} (88%) diff --git a/.gitignore b/.gitignore index d87144f7b..e6e71f76d 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,4 @@ coverage_report/ # macOS **/.DS_Store +*.uuid diff --git a/README.md b/README.md index 5ab85add4..a46fc85be 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ pip install pystencils[interactive] Without `[interactive]` you get a minimal version with very little dependencies. All options: -- `gpu`: use this if an NVIDIA GPU is available and CUDA is installed +- `gpu`: use this if an NVIDIA or AMD GPU is available and CUDA or ROCm is installed - `alltrafos`: pulls in additional dependencies for loop simplification e.g. libisl - `bench_db`: functionality to store benchmark result in object databases - `interactive`: installs dependencies to work in Jupyter including image I/O, plotting etc. @@ -63,7 +63,7 @@ Options can be combined e.g. pip install pystencils[interactive, gpu, doc] ``` -pystencils is also fully compatible with Windows machines. If working with visual studio and pycuda makes sure to run example files first to ensure that pycuda can find the compiler's executable. +pystencils is also fully compatible with Windows machines. If working with visual studio and cupy makes sure to run example files first to ensure that cupy can find the compiler's executable. Documentation ------------- diff --git a/binder/environment.yml b/binder/environment.yml index 5a58aeafe..950158a30 100644 --- a/binder/environment.yml +++ b/binder/environment.yml @@ -7,7 +7,7 @@ # conda env create -f conda_environment_user.yml # . activate pystencils # -# If you have CUDA installed and want to use your GPU, uncomment the last line to install pycuda +# If you have CUDA or ROCm installed and want to use your GPU, uncomment the last line to install cupy # # ---------------------------------------------------------------------------------------------------------------------- @@ -32,4 +32,4 @@ dependencies: - ipy_table # HTML tables for jupyter notebooks - pyevtk # VTK output for serial simulations - blitzdb # file-based No-SQL database to store simulation results - #- pycuda # add this if you have CUDA installed + #- cupy # add this if you have CUDA or ROCm installed diff --git a/conftest.py b/conftest.py index 3c140f19e..c27883d6f 100644 --- a/conftest.py +++ b/conftest.py @@ -46,10 +46,10 @@ add_path_to_ignore('_local_tmp') try: - import pycuda + import cupy except ImportError: - collect_ignore += [os.path.join(SCRIPT_FOLDER, "pystencils_tests/test_cudagpu.py")] - add_path_to_ignore('pystencils/gpucuda') + collect_ignore += [os.path.join(SCRIPT_FOLDER, "pystencils_tests/test_gpu.py")] + add_path_to_ignore('pystencils/gpu') try: import waLBerla diff --git a/doc/notebooks/01_tutorial_getting_started.ipynb b/doc/notebooks/01_tutorial_getting_started.ipynb index bceef66c5..b326e17df 100644 --- a/doc/notebooks/01_tutorial_getting_started.ipynb +++ b/doc/notebooks/01_tutorial_getting_started.ipynb @@ -70,7 +70,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "4.92 ms ± 124 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n" + "4.78 ms ± 9.53 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n" ] } ], @@ -120,7 +120,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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", "text/plain": [ "<Figure size 300x300 with 1 Axes>" ] @@ -179,7 +179,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "1.01 ms ± 24.6 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n" + "987 µs ± 5.12 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each)\n" ] } ], @@ -260,7 +260,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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", "text/latex": [ "$\\displaystyle x^{2} \\left(x + y + 5\\right) + x^{2}$" ], @@ -293,7 +293,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAI0AAAAXCAYAAAA2o8yAAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAABJ0AAASdAHeZh94AAAFBklEQVR4nO2aa4hVVRTHf44WTRmFREhkDyrsg5qVpkmKPSYrCUUrSLImNDKUNDNzylr9yVJTa7AwJCKtvpQivSYzNEJMC6V8ZGVYDRRYJo6iaC+dPqx983rmzuPM3feRzB+Gzex99tr/tc66e6299unU2NhIBzqQBl3ymSxpInA/cEHo2g7MMrO6PHkVFJJqgFFAT+BP4HOgxsy+LimxMkFr9qnIU/4vwAzgSqAf8AnwjqQ+ecotNIYCi4BBwHXAP8BqSd1KSaqMMJQW7NMpdniStBf3ysVRBRcQkroC+4GRZvZ+qfmUG5L2ySs8JQR3Bu4AugLrY8ktEk7Hd929pSbSVkgaDEzBd4NuOPdtQK2ZfRh5uePsk7fTSOoNbABOAQ7g3rgtX7lFRi2wGY/dZQ9JM4GngT3AB8Au4Czgcjy0xHaaWrLsE2On2QH0Bc4ERgOvSxqaNqmUVA28BlxrZp9G4NXWdecBQ4DBZnakSGtW005dJd2OO8xqYJSZHUiMnxSJZkZeE/t0STzwMVAFjDazFVn9nXAl7wHmmtmMzJiZ/QXsDP9uktQf3zbHxyTfGtrDXdIC4C785e1MiETSw8B8YJqZLcgx3hPYCnxhZkMiq9QEkiqAucAhYEzSYQDM7O8c81LbJozntE/y9PQIcBSYFXKUDOYHwa8kBedABR6qio1U3CUt5JhBvmlG5rrQDmxm/EWgMzApH+IpMAi4EA8/DZKGS3pU0mRJV7cwL/V7bck+x+00ZrZF0htB0FhgiaTHgKnA28CEhOA5QB3wM54sjcFj6vDW9Y+LNNwlLcINMhLYK6l7GDpoZgezxH4JHAYGJNcLYaIKWGhmW+NrlBP9Q/tb4NY7wWktcJuZ/Z7d34732qJ9ctVpZgJ/AE9JmgQ8A6wCxprZ0cSz3YE38bxmTVDqZjNb2SYTxEdbuT+AO/kaPInM/E3LFha2+o1AD0nnZPolnQY8D+wGniyYNk1xdmgnAJXADbgevXA9hwDLmpmb5r22aJ+cdRpJs/GiHfjxucrMDqVWsRlIqgfOTzFlqZlVt1F2VO6SngVqyMoHJM0FpgP3mtmSVubXE0lXSc9xLNRcYWZbssYqge+Bc4FBZrYhx/wotmnu9JS9vY2L6TABtfhpKxt9gRHAUqA+MbY5hezY3D8L7QBghaRLgYfwMsPSNsyvJZ6uDaH9MdthAMzssKRVwDjgqsAviSi2aeI0ku7EE6Rf8fAzGd+uosHManOsW40bckl7j9wF4r4eaORYMvwSnvxONLNWy+mRdd0R2n3NjGecqjLHmtFsc1xOI+kW3Pu3A32A74Dx4ddV1igUdzNrAL4F+kkaA1wPLDazr/Kk3B6sxe+BLpF0co7xXqGtz+6MbZv/nEbSNcBy/BLyxpCBP4HvRnPaI7xYKAL3dcCpwGK8CjszgszUMLM9wFvAGSQScElVwDD8juijrP7otqkIgi/Dy9H78eRoVyC5HNgEjAh3HWWHInHP5DVd8cvYUt5RTcWLqY9LWitpvqRlwErgCHCfme2DwtmmQtLF+NGrERhmZj8knqkJ7by0wguNInL/KbQbgVfzlJUXzGw3npS/APQAHsQ/X6jDS/3LoLC2if5pxIkISe/hBcuBZrax1HxKjXw/wjrhEZLfW4GXOxzGEe17mhMJks7Dr0QuAu7GTx3TS0qqjNDhNLlxEzAbr4e8C0wpQIHzf4uOnKYDqfEvcwBygSAVIEgAAAAASUVORK5CYII=\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAI0AAAAXCAYAAAA2o8yAAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAABJ0AAASdAHeZh94AAAFB0lEQVR4nO2ae4hVVRTGfzMaVho9oDAoCyqUKBky85HKpExWEloplGBNaEYpWOKj6fXx0cPMNC0rJohG6q+yoTQrRSOitLDS1Cihx1SC0UsFsadOf+xz5c6ZM3Pn3nvuvZPMB8Nm9j577W+ts+7aa699qlpbW+lBD/JB72Im254F3A6cG3V9ATwsaV2RvEoK2w3A9cBA4C/gI6BB0q6KEusmyGWf6iLl7wEWApcAlwLvAq/bHlyk3FKjFngWGAmMBf4FNto+rZKkuhFq6cQ+VWlvT7Z/J3hlY6qCSwjb/YADwCRJayvNp7shbp+itqeY4F7AFKAfsDktuWXCSYSou6/SRLoK2+OA2cAI4FTgN2AnsELSWykv18Y+RTuN7YuBLcDxwEHgOkk7i5VbZqwAthP06Paw/Tgwn5AerAF+BU4HhhC2lrSdpo190og0u4Ea4GRgMrDKdm2+SaXteuBF4ApJ76XAq6vrLgNGAaMkHS7TmvUUqKvt2wgOswqYKenv2PhxKdHMyGtnn96xBzYAdcBkSa9l9VcRlLwFWCzpnsxYRPrr6N9PbQ8F7gamp0k+FwrhbvtJ4EbCy/s2QeZcYCkwT9LShPGBwA7gY0ljUlapHWz3AR4BfiDBYQAk/ZMwL2/bROOJ9omfnuYDR4CHohwlgyciwc/HBSegGuiT45lSIC/utlcANwFjJX3VgcwPo3Z4B+NPA70IuUU5UEfYhpqBI7Yn2F5oe47tEZ3My/u9dmafNpFG0ue2X4oETQOabN8LzAVeAe6ICX4MWAf8SEiWphL21Am59U8X+XC3/Uz0zCRgn+3+0dBBSQezxH4G/AEMi69newrhJT4laUf6GiViaNT+CWwDLopxep8QTX7J7i/gvXZqn6Q6zQMRKdmeTQiH64Fpko7Enu0PvEzIazZFSl0t6e0umSB9dJX7nQQn3wTszfqbly0sCvVbgbNtn5npt90XWAb8DDxYMm3a44yonQ+0AqMJegwGNgBjgFc7mJvPe+3UPol1GtuLgEy42gzUSTqUt4odwHYLcE4eU1ZJqu+i7FS5234UaABukNQc9S0GFgC3SmrKMb+FlHS13QjMJFRpB0lqyRo7kfDjPQsYKandSTAt23R0esoOb9PTdJgIy4FTYn01wETCqaAlNrY9D9lpc8/kNcOAZtuDCIn+FgLXXFhOerruj9pt2Q4DIOmQ7fWEA8hlJJcPUrFNO6exPZWQIP1E2H7mENvzioWk5Qnr1hMM2VTokbtE3DcTtoJMMrySkPzOkpSznJ6yrrujdn8H45ni5AkJa6ZmmzY5je1rgCZgF2Gf3A3MiI6W3Rql4i5pH/AlMCQy/DigUdK24hgXhE0EB77QdlI+mkmMv8vuTNs2Rxe2PQpYTagyjo8y8PsJ0WhxIcLLhTJw/wDoCzQSqq/3pSAzb0j6HlgLDCBEiqOwfSUwnhCF3snqT9021ZHgGuBNwqVUnaS9EcnVwCfARNujC1mg1CgT90xe049wGVvJO6pZhBLHMtsbbS+xvZpwdXAYmCHpAJTONtW2zyd4ZivBE7+JPdMQtUvyFV5qlJF7JtxvBV4oUlZRkLSHcMe0EriAEHFqCRHo8kzFt5S2Sf3TiGMRttcQCpbDJW2tNJ9Ko9iPsI55RMnvtcBzPQ4TkNr3NMcSbA8gXImcB9xM+Ix1QUVJdSP0OE0yrgIWEU4ibwB3laDA+b9FT07Tg7zxH/RCc51argrkAAAAAElFTkSuQmCC", "text/latex": [ "$\\displaystyle x^{3} + x^{2} y + 6 x^{2}$" ], @@ -318,7 +318,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHsAAAAXCAYAAAAr8TBeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAABJ0AAASdAHeZh94AAAFN0lEQVR4nO2ae7CWUxTGf+cUI9VEbg2K3GKmwRCV0aF0ZDSm3P7QiBDDiJJQLj09htRUOhNqQqP4R1SDErlMVIrJJZEwUUMjYrq45ZLyx95fHe95v3Pqu51M55n5Zn2z19rver693r322nt/Zdu3b6cBewca59PZ9jDgEqAd8CfwLjBM0qcF4NaAAqM8z/7nAhOBs4BuwFbgDdst83xuA4qAskKmcdvNgM1Ab0mzU/RPAxcAbSX9VjDHDagB26cD7wP9JU2BPNN4CpoTssWGFOcdgCuBIQ2Bzh22uwCDCNm0JWGsPwGqJM3N2En6wPYLwAO2p0v6Nd80nkQVsIywdicxEvgZmFRgn3sNbN8LLAAqgFeBccBs4EDCkprEQ0Ar4FYoYBq3PYYwc7tIWpXQnQB8Djwp6YaCOKybTz/gKaCrpLdK4bM25MvH9uXAc8AbwCWSfkno95H0d0q/lcD+wDGNE4rXgErgUkmzqrWXRaJXA6MlDU30G0cIdNdkoCOuBcqA6Vl+SE5+iwHbtwNjCcvNuBR9O2A58J6kimLziT7LgdHA70CfZKAB0gId8SwwAuieTON3ANsIeb5RtfaxhAF/IiXQE9gZ6M+yOOwO/EN6es/JbxGxKMpOWfSPAI2AAaWhA4T1uS0wF9hou6ftu2wPtN25jr7vRFn5n2BL+hh4BjgJ6Atg+25gMCGF3Fjd3vZEoB9wBbDBdqv4aVbNpilwKrAyW2G2u36LjA+BLUDHpCKm0krgMUnLS8jpjCh/IPCbA4wi1EiLbb9t+5AsfZdGWZFWoN0L/AGMsD0AeBCYB/SVtC1hexOhAn8TWFftM6SazRGEmbCujh+0O36LhpgOlwKtbR+eaY8v7cPAemB4qfhEHBrljUATQqZsDrQnjFEF8HxaR0mbCePapsbWS9Ja21XAUELKWkwoCP5KsS3bBaIHRbmxNqPd8ZuE7TXAUVnU820n26ZJ6lfLI98hDGAnIFNDDAeOBK6JA1hKPpmlrQy4LGZCgBW2Lwa+BM6x3VnSkpT+G4DDsu2zf6z2/TpJv9dCpC5siXK/XbDN1W8VcECi7VSgFzANWJPQLavjeZl1riMwy/aJwG3Akvi8UvPJTJSvqwUaAElbbM8DrgPOjByTaAJsqRFs21cQCqPvCXu0gYR0nSvWR3lQbUb5+JVUlfK8foTBnZrDVmcxsJ2dRdqjhNl1s6Q696pF4PNFlJuy6DMvQ5MUv+WEF291eUJxIeHNWwGcTNgb949vdq5YR5ix7bIZFMlvzpC0EVgJdLDdBzgPmCzpo/rgQzhI2Qocb3vfFH37KNek6NoR0v+yHcG2fTYwA1gLnC/pR+A+wpHqqFxZxpmwADjY9nFJfbH8FgCLCIcRk4GfCAVkvUDST4QzihYkikPblUAPwp3EqyndM9lpfnnscAqhnN8MVEpaF53MIBym94pnsrliZpQ9EkSL7TcfZNbtZoRr2xrn/SXGYGAVcI/tBbbH2n4eeIVwhnG9pE0p/c6P+hfL42ybR1ijekj6KmE8LMoxeRCdSdgjXpVpKJHffLA6yqXAlHrisAOS1hMKxvFAa8J5dzfgZcIRdY2tl+0WQG9gjqRvC3rFWRviHx1GAqfV49q3y7D9EtAT6CRpaV32eyJs3wJMACokLSz0rVdtGA98A9xfQp85IRZlFwGT/seBbkLIjjMlLYTC32dnhaQ/bPcFutpuuqfdadtuA/QBjiUsNyuAO+uVVH44GngcmJppKFka39Nh+wZC5b0JeB0YJOm7eiVVYDQEey/CvxiiNb+5640IAAAAAElFTkSuQmCC\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHsAAAAXCAYAAAAr8TBeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAABJ0AAASdAHeZh94AAAFMklEQVR4nO2afazWYxjHP+eUkTIviQxhXsLMmqQOlV6czmiUxkZblF42imhFefv6Mi9Jb0irZTrzT6hGpVWysAo7KJVVf1DUHCtURoV0/HH/nvb4nd9zTj1vJ+t8t2fX89zXfd/X9buv33293PdTUlNTQyOODTTNZbDtcUA/oC3wJ/AZME7Shjzo1og8ozTH8d2A14BrgR7AAWC57dNynLcRBUBJPt247RbAHqCvpIUJ/ErgRuACSX/kTXAjasF2e+ALYKikWZCjG0/ASQRvsStBeAdgADC60dDZw3ZPYARQBpwK/AKsB6ZKWpzqJ+lL2+8Cz9ieI+n3XN14HFOBtcCnCbxngd+A6XmWeczA9ovAcuBqYAEwEXgfaEUIqXE8D7QGHoA8unHbk4A7gM6SvovxLgE2AbMkDcuLwPr1GQi8AXSX9FExZNaFXPWxPRSYCVQCwyT9FeMfJ+nvhHEbgROBC5rGGMuAcuA2SfPS2ksiRe8GxksaGxs3mWDo7nFDR7gHKAHeyvAgWcktBGyPIuyY0ZImJvDbAuuAzyV1LbQ+kczjCZ7xBxIMDZBk6AhzgKeA8rgbHwMcJPj5JmntLxEWfGaCoacCdwI9JG3KIPAG4B9CaZaEI5ZbQKyKaKcM/FeAJoS4WSyUE1z1fOCg7d62H7E90nZZPWNTz/NfY0v6GngTuIyQTGH7UWAU8DZwb3p/29OAQUB/YJft1tGnRVqf5kA7YGOmxOxI5RYYXwH7gI5xhu3bCQs/TdK6IurUIaL7gTXAIuAFYAqw2vbHtltlGFsV0a5JCdoT0aSyPYLgPpYCAyQdjPW9j5CBfwhUp31Gp/U5m7ATqut5oCORWzBE7rAKONf2Wan26KWdBOwAniyWPhHOiOgYoAboQlj3K4FlQFfgnaSBkvYQ1rVNrdJL0jbbU4CxBJe1GuiXIU6UHIaiLSNaqxzLVm4ctrcC52Vgr7Adb6uUNLCOKVcRFrCM4DohGPgcYFC0gMXUJ7UpDwC3SNoa/V5v+1ZgM3C97TJJSZXQr8CZmersnWnfB0vaW4ci9WFfRE84jL7Zyp0CnBJrawf0IWSvW2O8tfXMl4pzHYH5ti8FHiKUlJUNoM/uiK5JMzQAkvbaXgoMBq4huextBuyrZWzb/QmJ0U+EGm0kucXMHRFtWVenXORKmpIw30DC4s7OotRZTXCXqSTtVUIoGi6p3lq1APpsjujuDPyU12yWILeU8OJtKY0xbgJmAxsI8WAzMCQqN7JFNWHHZpyjQHKzhqRdwEagffQS9gRmSFrTEPoQcqIa4PLIeHFcEdEtCby2hLJ37aGBtjsDc4HtQIWkncDjhCPV8dlqGe2ET4DTbV8U5xdKbh6wEmgOzAB+Bh5rKEUkfQ8sBNoQPN4h2O4FVBB2/ZKE4SnvtKI0GtCOkM7vAcolVUdC5hIO0/vY7pKDvqmDkoqYooWWmwtScbsF4dq2zgSzCBgObAMm2V5ue4LtucBiwhnGkAyJY6+I/15ptNuWENxEhaRvY53HRXRCDorOI8Tuu1INRZKbC1IusQp4vYF0OARJ24H2hPzhYsIO70bY8delnzymYPtkoC+wSNK2vF5x1oXojw7PAVc1YOw7bNheAPQGOkmqqq//0Qjb9wMvA10krcz3rVddmEw42326iDKzQpSU3QxM/x8buhnBO86TtBLyf5+dEZL22x4AdLfd/Gi707bdhnDseyEh3HwDPNygSuWG8wm3ZLNTDUVz40c7bA8jZN67gQ+AByX92KBK5RmNxj6G8C8PHDfc7bZAEwAAAABJRU5ErkJggg==", "text/latex": [ "$\\displaystyle x^{2} \\left(x + y + 6\\right)$" ], @@ -343,7 +343,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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", "text/latex": [ "$\\displaystyle x^{2} \\left(x + \\cos{\\left(x \\right)} + 5\\right) + x^{2}$" ], @@ -375,7 +375,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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", "text/latex": [ "$\\displaystyle x^{2} \\left(x + y + 5\\right) + x^{2} = 1$" ], @@ -401,7 +401,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHsAAAAfCAYAAADHorIzAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAABJ0AAASdAHeZh94AAAEpUlEQVR4nO2ba4hVVRiGnzEtukFYSf0QLSxIDK2syPKSNRn2Q7vYXRIssIgUSTCbentLUdFohn72ozErKEWpxrwgXSwmLEkthBK1qSRLB0cJLFKbfqx14ng4c9wzc86eo7Mf2Kx91trrm5f97bXXt9a3p6a9vZ2M3kHf/B+2zwfG5lVtlnQgXUkZALbHAHOA64BLgSmSVibodzkwNPdbUlPuvE/BtYOAFWVRm9FdzgW2A093sf8A4KP8ir5FLjqe/zRk9AyS1gJrAWx3pt8eYI/twYVthSM74zSm2MjuVdgeDcwCRgH9gYPA90C9pI97UFrZ6dXOtl0HvAK0Ak3APuAi4BpgHJA5+3TA9hSCozcC90j6s6C9XxftTgPeBG6V9Fk3ZZaV1JxtewNQC9wraVVefQ3h5jwGLJY0NwUtfYDFwBHg4UJHA0g6WmkdaZPmyJ4DfAvMt/2BpOOxfinB0W+k4ejIKOAyYCXQZvsuYBjwN/C1pK9S0tEhts8DhuRVDbY9Ajgo6Zeu2EwtGpe0HVgOXAVMBbA9D5gNvA/MSEsLcH0s/yA8gE3AIqAeaLb9ue2LU9RTjJHA1ngALInnL3fVYNpzdh3wAPBSfHIXAOuBqZL+TVHHgFjOAH4Cbgc2EzaVXgUmEDaXxqWo6QTifF9TTpuJnG27hXAjkvKOpEcLKyXttV0PzAVeB5oJwdE/aWmInBHLGuC++NYB2GH7bmAnMNb2TaVe6SfR9GmRzZBlkqYlEV8Jko7s3YT5LCm/lWjL32ufLulID2hoi+WePEcDIOkv2+uB6cANQKn5ux64oKBuBDAJWAa0FLRtK2Gr4iRytqTbyvHHbD9ECMh+By4BZgJPpqkh8mMsD3XQnnsYzi5lRFJ9YV1cek0CGnvz0msi4WnfAYwHNgGP226Q9ENaOiKbgGPAFbbPLDKNDItlS1qCbHc71yyp5ByfirNt30JY5uwF7pB0wPYLhCBoETA5DR05JLXafg94BHiREDjmtNYSArTDwLoUNZ00GLM9kLCiGQAcBZy/Z3EyKr70sj2csLQ5DNRK2gcQc7NbgElxfzptZgO7gOdtb7K91PYKQqbpOPCEpEM9oKsUx4CZkoYSNqgabJ+TtHNFnW17CGFp1Q5MkLS74JLnYrmkkjqKIWk/cCPwGjAQeIYwvawBRkuqury+pH25gDLqbyPs5Seioq9xSbsIgVhH7Rsp81qyM0g6SBjhs8tosxFoLJe9jrA9EugH/Jq0T5bPPgWxfSHwFmHpmjiwy5x9imH7LGA1sFBSc2f69toUZzUS065vA1dK+jnWNQATCcmbVsIU8Ymk5Z21n43s6mIl4SuZOgDbzwIPAnfGr3xvJuQWJtveFo+rkxrPRnYVIak9ZgLX2N4NzAPG51Yxkr6kGwM0G9lVhqQNwDfAfOB+SVvKZTtzdpVhezwwnOCb/eW0nTm7ioi7jauAp4APCfn+slFszu5ne1Y8X52LCjMqi+1BhK9Zl0haZnsrsM32aElfdMLOtcAYwmfRJ1A4sncSXiHr4tHaVfEZybHdn3C/myQtAJD0HSE6X9hJcy3R1ruET8D+pyb7L87ew39WYqU0g6OV0QAAAABJRU5ErkJggg==\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAHsAAAAfCAYAAADHorIzAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAABJ0AAASdAHeZh94AAAElUlEQVR4nO2bbYhUVRjHfyuFSH4owaggLbBAERS0YH2prWU1erMXI4oWLTWIiiJcMDH+/C1Js2Kl+tKHWhO/pJKkmUovirFCZrupSBJLppKKvegX20qdPpyzMQw768x65+7o3B8M595z7nnuwzzzPOc855ypy+VyZNQGl+Xf2L4W2ADsBnLAakk7BkKxWsf2bcB8YAJwHfCkpLYS+tUDs+LtROBhSb9AgbGBwVH4FEndCemd0T+GAvuAj+KnJCTtBHYC2M4BQ3raCo2dUSVI2gRsArDdloTMQUkIybg4yDwbsN0IPAfUA1cBvwN7gRXRwy4Jat7Ytt8AWoAjwKfAb8BwwtylgRhKLwVq2ti25xEMvRJ4WtI/Be2X90PmbOBD4A5J2xJQMzFSM7btrUATMFPSurz6OsKXMwtYJmlBSvoMBpYAh+jF0ACS/k1Dl7RI07NbgO+BV22vl3Q21r9JMPT7aRk60kQI163AOdv3AGOBbuDbmMIMGLaHAqPi7SBghO3xwB+SDvVHZmqzcUk/AKuA0UAzgO2FwEvAx8AzaekSuSWW3UAHsBFYSjB+u+3ttoenrFM+E6NeHYRc2fF6cX8Fpj1mvwI8Cij+cpcAW4BmSedS1uXqWLYA+4GpQCdwIyHaTAPWECZpqRPH+7okZZZkbNsHgZFlyF0t6YnCSkmHbbcCC4B3gHbgod7Gy0rpkEdPVDsD3C/pYLzfa/tB4ABwu+36YiH9PDp9bbuwbqWk2SXoXhFK9ewuQrgrlV/7aDuRdz1H0ukB0AHgZCw78gwNgKTTtrcAc4BbicuPvdAKXFlQNx6YQZjhHyxo6zyPThWlJGNLakziZbYfJ4TIY8A1wAuUOFYnpUMeB2J5skj7n7EcUqQdSa2FdTH1mgG0lZN6xXXsC0JSn2E/zdTrbqCNsLjfCOwA5tpulXSgr74V4kvCzt4Y24N6mTOMjeXPaShzPkMlQSqzcdtTgLWEVarpkk4Aiwg/tmVp6FBI3PbbAIwgRJj/sT0NmE7w+s2pK1cE29fb3mZ7v+09th8pp3/FjR1zw43AKaBJ0lEASWuB74AZtqdWWo8iPAscBt62/YXt5bbXEpZIzwJzJZ0aIN164wzwoqQxhGyh1fYVpXauqLFtjyJ4Ro7g0V0Fj7wcy+WV1KMYko4Q1sDfBW4ieHgDweMn56/0VQOSjkrqjNfHCOv4w0rtX5d/LMn2DYQxakh2eKG6sT2BkMqN7eOZHDBa0o9Q4xshFyu2hxFOr8wrp19m7CrC9kxgNXBzz7kx2yuAe4FJko7HDZz1wFJJ7eXIz06qVBfrCIcmFgHYng88BtwVDV1HSF+/krSqXOGZZ1cRknJxc+gz213AQqBR0k/xkcmEvYU9th+Idc2S9pYiPzN2lSFpq+1dwGvAfZJ25bV9wwVE4yyMVxm27wTGEXa8jicpOzN2FWF7HPAJ8DxhEvZ6kvIzY1cJtkcCnwNvSfoAENBkuyGpdxSO2X8T/vrzXkzIV0nantTLMnon5s2bgQ2SFgNI2md7DcG768uQNQl4Kt7uBv7qaavL/thXO2RhvIb4DyfqqX/syaykAAAAAElFTkSuQmCC", "text/latex": [ "$\\displaystyle \\left[ - x - 6 + \\frac{1}{x^{2}}\\right]$" ], @@ -435,7 +435,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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", "text/latex": [ "$\\displaystyle x^{2} \\left(x + y + 5\\right) + x^{2}$" ], @@ -459,11 +459,167 @@ "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "graphviz is not installed. Visualizing the AST is not available\n" - ] + "data": { + "image/svg+xml": [ + "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n", + "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n", + " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n", + "<!-- Generated by graphviz version 2.43.0 (0)\n", + " -->\n", + "<!-- Title: %3 Pages: 1 -->\n", + "<svg width=\"425pt\" height=\"260pt\"\n", + " viewBox=\"0.00 0.00 425.00 260.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n", + "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 256)\">\n", + "<title>%3</title>\n", + "<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-256 421,-256 421,4 -4,4\"/>\n", + "<!-- Add(Pow(Symbol('x'), Integer(2)), Mul(Pow(Symbol('x'), Integer(2)), Add(Integer(5), Symbol('x'), Symbol('y'))))_() -->\n", + "<g id=\"node1\" class=\"node\">\n", + "<title>Add(Pow(Symbol('x'), Integer(2)), Mul(Pow(Symbol('x'), Integer(2)), Add(Integer(5), Symbol('x'), Symbol('y'))))_()</title>\n", + "<ellipse fill=\"none\" stroke=\"black\" cx=\"136\" cy=\"-234\" rx=\"28.7\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"136\" y=\"-230.3\" font-family=\"Times,serif\" font-size=\"14.00\">Add</text>\n", + "</g>\n", + "<!-- Pow(Symbol('x'), Integer(2))_(0,) -->\n", + "<g id=\"node2\" class=\"node\">\n", + "<title>Pow(Symbol('x'), Integer(2))_(0,)</title>\n", + "<ellipse fill=\"none\" stroke=\"black\" cx=\"98\" cy=\"-162\" rx=\"29.8\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"98\" y=\"-158.3\" font-family=\"Times,serif\" font-size=\"14.00\">Pow</text>\n", + "</g>\n", + "<!-- Add(Pow(Symbol('x'), Integer(2)), Mul(Pow(Symbol('x'), Integer(2)), Add(Integer(5), Symbol('x'), Symbol('y'))))_()->Pow(Symbol('x'), Integer(2))_(0,) -->\n", + "<g id=\"edge1\" class=\"edge\">\n", + "<title>Add(Pow(Symbol('x'), Integer(2)), Mul(Pow(Symbol('x'), Integer(2)), Add(Integer(5), Symbol('x'), Symbol('y'))))_()->Pow(Symbol('x'), Integer(2))_(0,)</title>\n", + "<path fill=\"none\" stroke=\"black\" d=\"M127.19,-216.76C122.65,-208.4 117.01,-198.02 111.9,-188.61\"/>\n", + "<polygon fill=\"black\" stroke=\"black\" points=\"114.88,-186.75 107.03,-179.63 108.72,-190.09 114.88,-186.75\"/>\n", + "</g>\n", + "<!-- Mul(Pow(Symbol('x'), Integer(2)), Add(Integer(5), Symbol('x'), Symbol('y')))_(1,) -->\n", + "<g id=\"node5\" class=\"node\">\n", + "<title>Mul(Pow(Symbol('x'), Integer(2)), Add(Integer(5), Symbol('x'), Symbol('y')))_(1,)</title>\n", + "<ellipse fill=\"none\" stroke=\"black\" cx=\"174\" cy=\"-162\" rx=\"28.7\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"174\" y=\"-158.3\" font-family=\"Times,serif\" font-size=\"14.00\">Mul</text>\n", + "</g>\n", + "<!-- Add(Pow(Symbol('x'), Integer(2)), Mul(Pow(Symbol('x'), Integer(2)), Add(Integer(5), Symbol('x'), Symbol('y'))))_()->Mul(Pow(Symbol('x'), Integer(2)), Add(Integer(5), Symbol('x'), Symbol('y')))_(1,) -->\n", + "<g id=\"edge2\" class=\"edge\">\n", + "<title>Add(Pow(Symbol('x'), Integer(2)), Mul(Pow(Symbol('x'), Integer(2)), Add(Integer(5), Symbol('x'), Symbol('y'))))_()->Mul(Pow(Symbol('x'), Integer(2)), Add(Integer(5), Symbol('x'), Symbol('y')))_(1,)</title>\n", + "<path fill=\"none\" stroke=\"black\" d=\"M144.81,-216.76C149.42,-208.28 155.16,-197.71 160.32,-188.2\"/>\n", + "<polygon fill=\"black\" stroke=\"black\" points=\"163.54,-189.61 165.23,-179.15 157.39,-186.27 163.54,-189.61\"/>\n", + "</g>\n", + "<!-- Symbol('x')_(0, 0) -->\n", + "<g id=\"node3\" class=\"node\">\n", + "<title>Symbol('x')_(0, 0)</title>\n", + "<ellipse fill=\"none\" stroke=\"black\" cx=\"27\" cy=\"-90\" rx=\"27\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"27\" y=\"-86.3\" font-family=\"Times,serif\" font-size=\"14.00\">x</text>\n", + "</g>\n", + "<!-- Pow(Symbol('x'), Integer(2))_(0,)->Symbol('x')_(0, 0) -->\n", + "<g id=\"edge3\" class=\"edge\">\n", + "<title>Pow(Symbol('x'), Integer(2))_(0,)->Symbol('x')_(0, 0)</title>\n", + "<path fill=\"none\" stroke=\"black\" d=\"M82.94,-146.15C73.02,-136.37 59.87,-123.4 48.81,-112.5\"/>\n", + "<polygon fill=\"black\" stroke=\"black\" points=\"51.13,-109.87 41.55,-105.35 46.21,-114.86 51.13,-109.87\"/>\n", + "</g>\n", + "<!-- Integer(2)_(0, 1) -->\n", + "<g id=\"node4\" class=\"node\">\n", + "<title>Integer(2)_(0, 1)</title>\n", + "<ellipse fill=\"none\" stroke=\"black\" cx=\"99\" cy=\"-90\" rx=\"27\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"99\" y=\"-86.3\" font-family=\"Times,serif\" font-size=\"14.00\">2</text>\n", + "</g>\n", + "<!-- Pow(Symbol('x'), Integer(2))_(0,)->Integer(2)_(0, 1) -->\n", + "<g id=\"edge4\" class=\"edge\">\n", + "<title>Pow(Symbol('x'), Integer(2))_(0,)->Integer(2)_(0, 1)</title>\n", + "<path fill=\"none\" stroke=\"black\" d=\"M98.25,-143.7C98.36,-135.98 98.49,-126.71 98.61,-118.11\"/>\n", + "<polygon fill=\"black\" stroke=\"black\" points=\"102.11,-118.15 98.76,-108.1 95.11,-118.05 102.11,-118.15\"/>\n", + "</g>\n", + "<!-- Pow(Symbol('x'), Integer(2))_(1, 0) -->\n", + "<g id=\"node6\" class=\"node\">\n", + "<title>Pow(Symbol('x'), Integer(2))_(1, 0)</title>\n", + "<ellipse fill=\"none\" stroke=\"black\" cx=\"174\" cy=\"-90\" rx=\"29.8\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"174\" y=\"-86.3\" font-family=\"Times,serif\" font-size=\"14.00\">Pow</text>\n", + "</g>\n", + "<!-- Mul(Pow(Symbol('x'), Integer(2)), Add(Integer(5), Symbol('x'), Symbol('y')))_(1,)->Pow(Symbol('x'), Integer(2))_(1, 0) -->\n", + "<g id=\"edge5\" class=\"edge\">\n", + "<title>Mul(Pow(Symbol('x'), Integer(2)), Add(Integer(5), Symbol('x'), Symbol('y')))_(1,)->Pow(Symbol('x'), Integer(2))_(1, 0)</title>\n", + "<path fill=\"none\" stroke=\"black\" d=\"M174,-143.7C174,-135.98 174,-126.71 174,-118.11\"/>\n", + "<polygon fill=\"black\" stroke=\"black\" points=\"177.5,-118.1 174,-108.1 170.5,-118.1 177.5,-118.1\"/>\n", + "</g>\n", + "<!-- Add(Integer(5), Symbol('x'), Symbol('y'))_(1, 1) -->\n", + "<g id=\"node9\" class=\"node\">\n", + "<title>Add(Integer(5), Symbol('x'), Symbol('y'))_(1, 1)</title>\n", + "<ellipse fill=\"none\" stroke=\"black\" cx=\"284\" cy=\"-90\" rx=\"28.7\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"284\" y=\"-86.3\" font-family=\"Times,serif\" font-size=\"14.00\">Add</text>\n", + "</g>\n", + "<!-- Mul(Pow(Symbol('x'), Integer(2)), Add(Integer(5), Symbol('x'), Symbol('y')))_(1,)->Add(Integer(5), Symbol('x'), Symbol('y'))_(1, 1) -->\n", + "<g id=\"edge6\" class=\"edge\">\n", + "<title>Mul(Pow(Symbol('x'), Integer(2)), Add(Integer(5), Symbol('x'), Symbol('y')))_(1,)->Add(Integer(5), Symbol('x'), Symbol('y'))_(1, 1)</title>\n", + "<path fill=\"none\" stroke=\"black\" d=\"M193.41,-148.65C210.74,-137.62 236.33,-121.33 255.9,-108.88\"/>\n", + "<polygon fill=\"black\" stroke=\"black\" points=\"257.85,-111.79 264.41,-103.47 254.1,-105.88 257.85,-111.79\"/>\n", + "</g>\n", + "<!-- Symbol('x')_(1, 0, 0) -->\n", + "<g id=\"node7\" class=\"node\">\n", + "<title>Symbol('x')_(1, 0, 0)</title>\n", + "<ellipse fill=\"none\" stroke=\"black\" cx=\"102\" cy=\"-18\" rx=\"27\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"102\" y=\"-14.3\" font-family=\"Times,serif\" font-size=\"14.00\">x</text>\n", + "</g>\n", + "<!-- Pow(Symbol('x'), Integer(2))_(1, 0)->Symbol('x')_(1, 0, 0) -->\n", + "<g id=\"edge7\" class=\"edge\">\n", + "<title>Pow(Symbol('x'), Integer(2))_(1, 0)->Symbol('x')_(1, 0, 0)</title>\n", + "<path fill=\"none\" stroke=\"black\" d=\"M158.73,-74.15C148.67,-64.37 135.33,-51.4 124.11,-40.5\"/>\n", + "<polygon fill=\"black\" stroke=\"black\" points=\"126.36,-37.81 116.75,-33.35 121.49,-42.83 126.36,-37.81\"/>\n", + "</g>\n", + "<!-- Integer(2)_(1, 0, 1) -->\n", + "<g id=\"node8\" class=\"node\">\n", + "<title>Integer(2)_(1, 0, 1)</title>\n", + "<ellipse fill=\"none\" stroke=\"black\" cx=\"174\" cy=\"-18\" rx=\"27\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"174\" y=\"-14.3\" font-family=\"Times,serif\" font-size=\"14.00\">2</text>\n", + "</g>\n", + "<!-- Pow(Symbol('x'), Integer(2))_(1, 0)->Integer(2)_(1, 0, 1) -->\n", + "<g id=\"edge8\" class=\"edge\">\n", + "<title>Pow(Symbol('x'), Integer(2))_(1, 0)->Integer(2)_(1, 0, 1)</title>\n", + "<path fill=\"none\" stroke=\"black\" d=\"M174,-71.7C174,-63.98 174,-54.71 174,-46.11\"/>\n", + "<polygon fill=\"black\" stroke=\"black\" points=\"177.5,-46.1 174,-36.1 170.5,-46.1 177.5,-46.1\"/>\n", + "</g>\n", + "<!-- Integer(5)_(1, 1, 0) -->\n", + "<g id=\"node10\" class=\"node\">\n", + "<title>Integer(5)_(1, 1, 0)</title>\n", + "<ellipse fill=\"none\" stroke=\"black\" cx=\"246\" cy=\"-18\" rx=\"27\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"246\" y=\"-14.3\" font-family=\"Times,serif\" font-size=\"14.00\">5</text>\n", + "</g>\n", + "<!-- Add(Integer(5), Symbol('x'), Symbol('y'))_(1, 1)->Integer(5)_(1, 1, 0) -->\n", + "<g id=\"edge9\" class=\"edge\">\n", + "<title>Add(Integer(5), Symbol('x'), Symbol('y'))_(1, 1)->Integer(5)_(1, 1, 0)</title>\n", + "<path fill=\"none\" stroke=\"black\" d=\"M275.19,-72.76C270.58,-64.28 264.84,-53.71 259.68,-44.2\"/>\n", + "<polygon fill=\"black\" stroke=\"black\" points=\"262.61,-42.27 254.77,-35.15 256.46,-45.61 262.61,-42.27\"/>\n", + "</g>\n", + "<!-- Symbol('x')_(1, 1, 1) -->\n", + "<g id=\"node11\" class=\"node\">\n", + "<title>Symbol('x')_(1, 1, 1)</title>\n", + "<ellipse fill=\"none\" stroke=\"black\" cx=\"318\" cy=\"-18\" rx=\"27\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"318\" y=\"-14.3\" font-family=\"Times,serif\" font-size=\"14.00\">x</text>\n", + "</g>\n", + "<!-- Add(Integer(5), Symbol('x'), Symbol('y'))_(1, 1)->Symbol('x')_(1, 1, 1) -->\n", + "<g id=\"edge10\" class=\"edge\">\n", + "<title>Add(Integer(5), Symbol('x'), Symbol('y'))_(1, 1)->Symbol('x')_(1, 1, 1)</title>\n", + "<path fill=\"none\" stroke=\"black\" d=\"M292.06,-72.41C296.08,-64.13 301.04,-53.92 305.54,-44.66\"/>\n", + "<polygon fill=\"black\" stroke=\"black\" points=\"308.78,-45.99 310,-35.47 302.48,-42.94 308.78,-45.99\"/>\n", + "</g>\n", + "<!-- Symbol('y')_(1, 1, 2) -->\n", + "<g id=\"node12\" class=\"node\">\n", + "<title>Symbol('y')_(1, 1, 2)</title>\n", + "<ellipse fill=\"none\" stroke=\"black\" cx=\"390\" cy=\"-18\" rx=\"27\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"390\" y=\"-14.3\" font-family=\"Times,serif\" font-size=\"14.00\">y</text>\n", + "</g>\n", + "<!-- Add(Integer(5), Symbol('x'), Symbol('y'))_(1, 1)->Symbol('y')_(1, 1, 2) -->\n", + "<g id=\"edge11\" class=\"edge\">\n", + "<title>Add(Integer(5), Symbol('x'), Symbol('y'))_(1, 1)->Symbol('y')_(1, 1, 2)</title>\n", + "<path fill=\"none\" stroke=\"black\" d=\"M302.95,-76.49C319.71,-65.42 344.35,-49.15 363.14,-36.74\"/>\n", + "<polygon fill=\"black\" stroke=\"black\" points=\"365.15,-39.6 371.57,-31.17 361.29,-33.76 365.15,-39.6\"/>\n", + "</g>\n", + "</g>\n", + "</svg>\n" + ], + "text/plain": [ + "<graphviz.sources.Source at 0x7f41d153f050>" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ @@ -505,7 +661,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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", "text/latex": [ "$\\displaystyle \\left( x^{2}, \\ x^{2} \\left(x + y + 5\\right)\\right)$" ], @@ -562,7 +718,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAC0AAAAaCAYAAAAjZdWPAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAABJ0AAASdAHeZh94AAADAklEQVR4nM3YXYgWZRQH8N+bFW1fYEikRGwQUUHfdiPlReRFGhFEFNGFEBGJhQRChXA4UkEIQlQWWlBUF4HdeNG6EiRUYoFtHxSCShSxIS1BeFGItl3MvMvD7OzurO6+9L955vk/5zz858x5zpyZ3uTkpC7IzNXYjNuxHA9FxO5OzguMc+ZhexG+w8ZF0tIZ57aRmXkpXsT9WIHz8FxEbKnXByawDa2i8SHuwyf4AKewZ1Ci5sI00Zl5nUrwaESsG7ykudGW03fX48eDFDIfTEU6Mx9EWQ12ZubO+vr6iDg8UGWzoEyP35HYgKV4qeYncWTAumZFr6zTmbkEJ3A0Im4qDTPzYlxTT8dUNftT/BkRvw5GboXmQbwBQ/imxXYlPivm2+rxPaxfcGWzoCn6tnqcJjoi9qO32IK6oFk9+qLHBi1kPmiL9CS+bRpm5lIcxqqIOLb40sjM3TgQEdtLvix5PdyMIxFxomWPF7C3L3ghGqjM3FDvsRw/YlNEfF6YbMX+zHwnIv7qk2V6XItLtKRGZl6IJ/B2QZ9VA5WZD+NVvIxb8SVGMvOqvk1EfI+f8VjpW6bHjIcQ6/Avvig2HMFILeBMdD+LdyNiVz1/JjPvxVN4vrDbg0fxRp8oIz2b6DtxKCK6Nd9zIDPPV6XVvsbSPqxqcF/hjswc6hNTkY6Izar8asMwxs9WbIFlWILjDf447mlw46rWeAWO0f0j4AL8c+YaZ0TzyfVauL/rcSrSXUVPqPqRhcIETuOKBn+56dG/rB7/6BNdRY+pXvELgog4iUNY01hagwMN7kaMR8TUzcz05dLEKF7JzGURMcG0BgqGM/MW3Ruo7Xg/M79WlbsnVXn7VsNuNfaWRKdIR8QPqlP8SEGvVD2Bfl3fVl9v7Rtk5vrMnMzM4ZY9P8ImbFG9ge/C2oj4pfAfwgPYVfp2jTRVr/1aZr4ZEac7NlBX4yf81rYYETuwYxb/x3EwIg6WZOdfCBExitdxZVcfrMXGiDg1D58SJ/F0k+x1/Vnzf8J/lSTmjUVQzcoAAAAASUVORK5CYII=\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAC0AAAAaCAYAAAAjZdWPAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAABJ0AAASdAHeZh94AAAC/ElEQVR4nM3YT6hVVRQG8N/Vil5YYAaShBVEhET/aSDZIBLCIogGFTQoalCGJJIDJVgsqahBgYNEtOBBNYhq4uCVjooo7IG9oL9UBkVZkgXhoCjlNjjn3jbnHd87z/fepQ8O+55vr7Xvxzprr73O6fX7fV2QmTfjCVyPVXgwIsY7OS8wlszBdhk+w+P4c3HkdMMZbWRmnoencKcqqmdiW0Rsr+fHRyWwDa2i8RruwARexQnsG5Wo2TBNdGZeoRK8PyJuH72k2dGW07fU41ujFDIXDCOdmXfjzWJuT2buqX+viYgvR6psBpTp8TMSG7EcT9d8H1+PWNeM6JV1OjOX4ji+jYirSsPMXIbL6tsP8axqc/4eET+MRm6FZk6vwRg+brG9AVP1NaZ6KlPYsZgC29CsHtfV4zTREfEueostqAuakR6Inhq1kLmgLdJ9fNI0zMzl+AprI+Lw4ksjM9/AwYh4vuTLktfD1fgmIo63rLEdEwPBC9FAZeZGbMWF+BybI+L9wmQH3svMlyLijwFZpsflOFdLamTmOXgYLxf0vBqozLwHO/EMrlVVpLczc/XAJiI+xXe4v/Qt0+OUmxAbVGnzQbHghKo3Od0GagvGI2Jvfb8pM2/Do9hW2O3DfXhxQJSRnkn0OhyKiG7N9yzIzLNUaXWgMXUAaxvcJG7MzLEBMYx0RGxV5VcbLsaReav9DxdgKY42+KO4tcEdUbXGq3CY7i8BY/jr9DXOC4P9Mox0V9HHVP3IQuEYTmJlg1+JXxrc+fX464DoKnpKdcQvCCLibxzC+sbUelUVKXElfoqIYSqd6s2lif14LjNXRMRvTGuglmB1Zl6jewP1Al7JzElVVXpElbe7G3br6v8folOk63o5iXsLetYGKjMfyMx+Zl7Ssubr2IwnVSfwTdgQEd8X/mfjLuwtfbtGWi1qZ2bujoiTHRuoS/EFfmybjIhd2DWD/0P4KCIOlmTnTwgR8Y6qwF/U1Ud1KD0WESfm4FPiH2xqkr2uH2v+T/gXmdDo73n+u0IAAAAASUVORK5CYII=", "text/latex": [ "$\\displaystyle {f}_{(1,0)}^{1}$" ], @@ -632,16 +788,13 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAzUAAAAaCAYAAACO/nKSAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAABJ0AAASdAHeZh94AAAN6UlEQVR4nO2dfdBVRR3HP/gSmKCCjhqViEOaqKOCiWPoPCiiYzWSOamZDWpqQibjaEWZv35oviXKMwbpWAlhzpillZOZA6HjO8ZLavlOYPmWCqKMCopPf+w5cNh7zr33vJ977n5mmAv7cs6e/X532b27Z2+/vr4+mqGq/UVkXdNEJaOq04Djgb2AdcAjwDQRebLUgjlyw2neXTi9Ha1wHnHExXnGUQTOZ61R1Y+JyPoWaVrW4xYtLnAmMCJ9cXOnB5gNHAocAXwIzFfVIWUWypErPTjNu4kenN6O5vTgPOKIRw/OM4786cH5rBX7q+rRLdL00KIe+0Wt1KjqOGCCiEwLiTsfmAGcIiK3JCp+jqjqQGANMFFE7iy7PJ1O1fUGp3nWVF1zp3e5VN0f4DxSRaruG+eZzqfqHgPnsyhUdQYwR0SeaDN9Qz2GrtSo6rbAFcD0iGsd5H3+PVaJi2MQ5tlWl12QmlB1vcFpnjVV19zpXS5V9wc4j1SRqvvGeabzqbrHwPksiunALFVtuossQEM9RmX8LrBQRN6LiP8+sDfwXJs3LppeYBnwcMnlqAtV1xuc5llTdc2d3uVSdX+A80gVqbpvnGc6n6p7DJzPQhGRNcBTwKltZmmox4btZ6o6CHgRGCMiz2ZS0gJR1WuAk4CxIrK87PI48sdp3l04vdOhqpOAm4BxInJvuaXJB+cRR1ycZxxF4HzWHFU9GPgdMKLZwQFR9bhVSNoTgFVRExrvXZu/AVeLyIVW2AzgFuBi4HBgSy/8HBF5VVVHAhcB44H+wP3AZBF5MeQ+A4CpwDeAPYDXgBuAK4G3gBUisp+V51rvIceVaRZVPRKYD1wiIhcHwsdgTmsAGC4iKwJxNwNfA/YWkWcKLG5TwvS2wjPRPIneXr7SNa+T3uDaeB7UySNV9oeXryM9YlMnz0C1fVMXzyShTj5z45XsKdofIrLIewXmi8DtEWWKrMew7WcnAEua3HOU97kkJGxP4AFgA/BLzIrPROBXqvolYBEwEJgLPAt8Afh1SIG3BRYClwPvYpaYFmKMOMe7xhIrTy9wMnCEiDzdpPxF4O/vG2SFfy/w942nNajqUOCrwJ1V6iA8wvQOhqfWPIneXr6qaF4nvcG18Tyok0cq6Q8vXyd7xKZOnoGK+qZmnklCnXzmxivZU4Y/lmLmIg20qsetrMRbAGMxs80omnVMBwOHiMjj3vWmY0wzATgQOEpEHvbiPgY8DxyuqgNE5P3A9W4ADsGY5FIR6fPyzMPMGDe7v6rOwuzBmwisVtVdvai1IrK2ybPkRYMJVHVP4DjgD5hyDg6knwJsDfy0mOLFolUnkYXmsfT24qqkeZ30BtfG86BOHqmcP7y4TveITZ08AxX0TQ09k4Q6+cyNV7KnDH8sAU6xA9upR3ulZg9gO2BFk5uNAtZiZrHBMIBJvlkAROQd71pbAhf6ZvHi1gPPAP2AbQOFPsR7mD+KyCW+Ybw8CzAG9B/aZzKmwhcArwT+XNDkOfIkbGZ7AfAOcJX37yGwcRnzLOBREXmgsBK2T5jefjik1Dyh3lAtzeukN7g2ngd18kgV/QGd7xGbOnkGqumbunkmCXXymRuvZE8Z/lgJDFXVHa3wlvVov1Mz3PtcE3YXb9ltT+ChwOzUD1suIneHZBsGrAJujYh7R0TeDIRN8T5/ElYG4E3g05gTDwAQkX4RactiDfARnglUdRfM3ste4D9eGn+57lRgJ+CctDdV1RWYOm2X34jI15tcr0FvKzwLzWPrDZXTvBS9vXutIGfNXRvPhCr2CQtV1Q6bKyKTmlyvkv6AWnjExvUrrl8pglr4zI1XcqMMf/hzkOGYOgXaq0d7UuMvIb0dkX5/zOrOkpCw+XZiVd3du+btIvKBFTcQGIHZ3xhkAuYhos4Y/wTwnDfDriQi0qeqa9g0sz0PM9vvxcxuYVNdnwe8QOCFKFWdBhwP7AWsw7yMNU1Enmxx6xeA91ukCfJyi/gwvYPhWWje9XoDqOrhmG8bRgNDgdNEZE4bty9Cc9fGU5JBn5DUHzOBHaywAzBbB+bSuCq/rMX1nD8KwvUrzjdFUGLfBNn6zI1XcqCk8aw/B9khbnntSU1/7/PdiPT+Et7SkLDFIelHN4k7EFMxwf2tA4CdgWXBmXYg/rPArsC9Vvhg4GngUBF5IaLsmaOqtwGPiMiMkOjVwCCvYZwD3CIiL3v5NgBDVHUCsA/wbRH5KJC3B5gNPIapo+nAfFUdKSKrosojIkdm8FhBwvQOhqfSPKneXlzhmueoN5iXC5/EvJTY8AJsFAVp3rVtPC45eiSpP2aGlHESZlIzR+If6VxJf3hxHeERG9evuH6lCKrWN0HmPnPjlRRUbDzrz0EGxH0Oe1Lj/9jmwIj0zV70C5u5jm4Sd2DItTZ4fwY3JgfMj4LaeQB+ANwVNEvKbw/8a0wGLsTMvv8JTBWR+wNJpgP3qeovxPxoUJDV3nOcBWzP5i9NvY1ZrpuKmfXfFMwoIkdb5TgVsxz3eeDOOM+QklYv3aXVPKneYGmeVu828+eiN4CI3AXc5ZWl7XLnQMe08bh0skecPzZSWJ+QBa5f2UhVfVN6v5IFrm8COmi8EpcuHM/6c5D3IuIjsQ8K8GdN20WkH4VZKvyXFbYeM1O3aTYLbjCgt/z3DDBMzdnYG1HVKcBpdh5V/TjwTczxfEH8bw/OI0HFqOqJmOW1yzDmfgj4i6ruFijvE8ByIGyPp2+CqRgzB+tsDTAGOAaYLSJRK2M+gzBarW6RLmvC9PbDU2ueRG8vLkzzVHq3k79Avcukk9p4XJxH0lM5f3hxefQJWeA8Y6icbyrUr2SB81lnjVfi0m3jWX8O8maTNKHYKzXLvc/t7YSq2h8YiVl6+9AKe1zCf/lzNLDSepnPZxRGnKes8MuBecCfVfVW4FXMMdOfwSzf7cXmpjkW6AMeDF4kg28Pzsdsz7jR+/e5qnoMZultWiDdnzBnZs+y8vsmGIx5eSrIW5h97e8DP2ujLL2Yve4Pt0iXGWF6W+FZaR5XbwjRPK3eMfIXoXcpdFobj4vzSDoq7A/IoU/Igm73DFTaN5XoV7Kg233WaeOVuHTheNafgyxvkiYUe6VmJWa1ZkRI2n0xZ08vCQlrmOWq6jBgx4i4/sDeGKNtCMaJyM3Ad4CXMJV7MqYCPsem/YzBGd5hwOKwPY5JUXM++WjgHivqHuBQK2wRcLCqbmOF+2V8TETus+L8pb15IvK/FmW5BtNovmLXVc6E6R0Mz0TzBHpDDprHIFe9S6Zr2njO1NUjVfUHdJ5HbOrqGaiubzrdM0moq8/ceCWCDh3PjgCeF5GoQ8si2WylRswpB/exadktGLcY85JP07BA3MomceswRgtFRK4DrguGefvwhmBmykGG0frklbjshDm3/DUr/DVgvBX2MuZZhmJOfQBARM4Gzg67uIj0tFMIVb0WOAkYJyKxZ6xpiNI2D81j6g35aN4uueldNl3WxvOk0h7x9mLPSZCvqv6AzvOITaU9k4YK+6bTPZOEWvrMjVea0onj2VHAwnaua2NvPwP4LXB1koulRVW3BHa0Z3uqOh74OeZM7OutbNvQKFaR+Psb7ZltKlS1FzgRY4Cns7x2VUioN5SreS56dwtZtnFVvRT4YYtbjpP4J3ylxXkkIVXtEwrwmvNMCurQrxR0X+ezhGTZN3Xb/11xxrOqugXmGO4fJ7lX2KTmDuBKVR3tzXKLZCTwmKr+FTNL3BqzV28s8DpwnIistfK8QfRpFEl5A3PKxS5W+C6YPZRB/B8dej2rm6vqLMy+xYnAalXd1YtaG/L8nUwSvSEfzdslc70BdNOZ+GC2he6mqgcAq0TkxciMnUeWbXwmcHOL+5VRd3n0Cc4f5fYJM8nXa65fSUcd+pUi7uv6puRk2TfNpDiPddp49gjgFbJaqRGRdar6I+B0wk+EyJP1mJehxgBHY37F9N/AVcA1IhL2TdxSYFKWhRCR9aq6GDgKuC0QdRTweyv5vsBLEWVLymTvc4EVriScvVaUJHpDDprHIA+9AQ5i80as3p+5lPeseZBZGxeRNzAddtXIwyPOHyX2CQV4zfUr6ej4fqWg+7q+KTmZ9U1FeqwDx7OnA5dK429utUW/vr7Gd5e85Z8FmJd5In/ssQqo6n6YF7V2lsAJFta3Bw8BV2BOdmjr2wPvCLx5GEEeBL4FnAHs4+3F9NPNATaIyBlZPI+jNWGaZ6B3W/md3sUT1cYTXMd5pKbk0SdkVC7nmYpSlX4lC5zPqksWPuuW8ayqfhLzA67jJeHBCvbpZwB4M6SzgYuSF68YxJytvQjzAlKQgzAz5KWY/YHq/X26n0BVJ6lqn6ruHnLdWzFncl+EMeRY4FjLAAOALwM32vkd+RGheSq928zv9C6BJm08Lk01buGPlvm9aziPlEBOfUIWOM9UlKL6FXA+62Yy8lm3jGcvA85MOqGB8HdqABCRZ1X1DlU9QESWJb1BQSjQq6rXi3dMnPeCVejJFgGGY36o6b9hkSIyG5jdJP8ZwKMi8kjsEjvSspnmafVuM7/Tuzwa2nhc2tC4VX/QKj84j5RJpn1CFjjPVJ4i+hVwPut2UvmsG8azqnoYcFMbJ6M1JXSlxkdE7gf+keYGRSAid2N+LOhTMbMeC0yRwI81xeQD4NyEeR0pSKi507tDSdHG45DWH+A8Uhol9QlZ4DxTEgX1K+B81tV0yP9fZfvjgSxOewt9p8bhcDgcDofD4XA4OoX/A1EFgqlLrdzJAAAAAElFTkSuQmCC", "text/latex": [ "$\\displaystyle \\left({img}_{(1,0)}^{2} w_{2} - {img}_{(1,1)}^{2} w_{1} - {img}_{(-1,1)}^{2} w_{1} + {img}_{(1,-1)}^{2} w_{1} - {img}_{(-1,-1)}^{2} w_{1} - {img}_{(-1,0)}^{2} w_{2}\\right)^{2}$" ], "text/plain": [ - " \n", - "(img_E__2â‹…wâ‚‚ - img_NE__2â‹…wâ‚ - img_NW__2â‹…wâ‚ + img_SE__2â‹…wâ‚ - img_SW__2â‹…wâ‚ - img\n", - "\n", - " 2\n", - "_W__2â‹…wâ‚‚) " + " 2\n", + "(img_E__2â‹…wâ‚‚ - img_NE__2â‹…wâ‚ - img_NW__2â‹…wâ‚ + img_SE__2â‹…wâ‚ - img_SW__2â‹…wâ‚ - img_W__2â‹…wâ‚‚) " ] }, "execution_count": 26, @@ -671,16 +824,13 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA04AAAAaCAYAAACAVwz9AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAABJ0AAASdAHeZh94AAAPlklEQVR4nO2dfdAdVX2An4CYWBKV4AjFjxBBEJRBEgoZQHwjEDLUGaPtFL9og1Q+EgUqokaRH7+IH1jBpJSIYzsEQ3GordbSomWSIvIpNAER5UNRwIqiQIhEJVF8/eN3lnff857du3vv7t29955nJnPznrNn9+zuc8/Zc8/HThsfHycPVZ0uIttyN2oYVV0BvAXYF9gG3AqsEJG7G81YZGiJzkUgehDpjuhNpEqiT6NNvP+dUdXnisj2DtsUuo47dNjJu4G9e8tuXxgD1gCHAW8Afg+sV9XZTWYqMtSMEZ2LRA8i3TFG9CZSHWNEn0aZMeL978SBqnpsh23GKHAdp2X1OKnqQmCRiKwIxL0PuBB4h4hcWTr7NaOqM4EtwBIRubrp/ER6o+2+QXSuH0QPIt3SdneiN4ND212C6FOdxPs/uKjqhcBaEfluwe2D1/E5GRvvDHwKa32FONh9/l/RDPeZWVhv2uamMzIMqOpLgZXAYmBX4GfAfwAqIoWvsao+CMzJiH5URHbPiGu7bzAizjXsQvRgQIllSEeiNyWI5VBHok/1Ee//4LISuFpVx0TkDwW2D17HYMMJ+ABwnYj8NiP+Qy4DPyiY2X6zGrgTuKXhfAw8qroXcDPwYuBrwL3AIcAZwGJVPVxEHi+xyy3AqkD41pw0bfcNRsC5FrgQPRhAWuANtN+d6E1BWuBT212C6FOdxPs/oIjIFlW9BzgBuLxAkuB1nNJwUtVZwOnAoTkHf7hMZvuJql4EHAEcISLPNJ2fIWANVkGdLiIXJ4HuOv8d8HHg1BL7e1JEziuTgTb7BiPlXKMuRA+aQVWXApcBC0Xkm13sIpYhOQyrNzUSy6Ecok/1Eu//wPPPwL+p6pfyFovIu46hHqe/BJ4QkfszdrYQ+F/gMyJythd2IXAlcC5wJLCjCz9NRH6uqvsD5wBHA9OBG4BlIRFVdQZwJvDXwCuAR4HPAxcATwIPisgBXprPAm/FKvgfZV2QulHVo4D1wMdE5NxU+KHYKh0Ac0XkwVTcFcDbgf1E5L4+ZjcT98veIuBB4BIvWoCTgRNU9SwR+XVNeWitby5dK5yrm6ZdCHnghVfiQvSgWpr2xuWhtWVI9KYcTfvUr3LI7TP61DJiPVQ9/X5eFpHb3HSkNwJfychT7nXMajhtyjnuPPe5KRC2D3Aj8HWsVbcYWAJMV9XPAV/CJLocmz/158AX8eZSuZNaDywANmLdZbthMu4HzPTzqKqrgePdid6bk/9+kIyHnOWFfzD1/9lY4Y+q7gH8FXB1WxpNjoXu81p/PKiIPKWqN2GV2AJgQ8F9TlfVdwIvB34N3AV8K+eXkVb65tK1ybm6adqFkAfp8J5diB7UQtPeQEvLkOhNVzTtU+3lEESfWkysh6qnieflO7C2zpSGU5Hr+BwvwQ5Y19QFOQfMq4QOARaIyF1ufyuBh7GC7CDgGBG5xcU9F/ghcKSqzhCRp1P7+zwmzbnA+SIy7tKsw4SadHxVvQQbs7gE2KyqyYTOrSKSN+69LqaIoKr7AG/CJrAuAXZJbb8c2An4+/5krzD7us9g7yM2xncRVlgUraR2B9Z5YT9W1RNF5PrA9q3zzcW1zbm6adqFThVWFS5ED6qnaW+ghWVI9KZrmvapH+UQRJ/aSqyHqqeJ5+VNwDv8wKLX0X+P0yuA5+NadhnMwyZN3u+FASxNhAH7Bcjta0fg7EQYF7cduA+YBuycyvgCd0JfE5GPJdK4NBswCZMTT1iGXfQN2Oo6yb/355xHnYRa0O8HngI+7f6eDc92yZ4MfFtEbuxbDovxAve5JSM+CX9hwf1dBhyFVVQ7AwdghcSewNdV9cBAmjb6Bu1zrm6adiHkQRIOPboQPaiNpr2BdpYh0ZvuaNqnWsshiD61nFgPVU8Tz8sPAXuo6q5eeKHr6A/Vm+s+g4WS60LcB7g51QpOwn4kIt8IJJsDPAFclRH3lExeAWe5+/x4KA/A48DLsJUuABCRaRnbNsUW4A84EVR1N2ys6mrgJ26b5IVaJwAvAk7r9aCav7RqiH8RkXf2etyiiIh6QXcDp6rqVuAs4DzgzUlkW31z59I25yYxTC6EPPDCq3BhKD0oSwdvrlP1bxuXi8jSOvOUZljKkGHzJotYDgHRp0ao2r1YD9VGE8/LSRtnLnZNgeLX0W84Jd1hv8rY/kCsl2pTIGy9v7Gq7un2+RUR+Z0XNxPYGxsPmmYRdiJZa+T/KfAD15JvJSIyrqpbmGhBn4H9qrAaa0XDxLU+A3iA1FhLVV0BvAUblrANmyC3QkTu7nDoB4CnO2yT5pEO8YlcL8iIT8KfLHHMEJdildSRXnj0rXuGyYWQB+nwKlwYVg/Ksoqpv9a/Fhs2cTlTRyPc2WF/sQwZHXdCxHIo+tQUVbsX66EaaOh5OWnjvLCbPPsNp+nu8zcZ2yfdkXcEwjYGtp+fE3cQdnHS43RnYMuM3plu0afiX4V1qX/TC98Fe5fDYSLyQEbeK0dVvwzcKiIXBqI3A7Pcl+M04EoRecSlewaYraqLgFcD75HJE13HsCVXb8eu0UpgvaruLyJPZOVHRI6q4LTSJBPv9smIf6X7zBpvXpRfus+dvfBW+ubi+u5cB98mMWQuhDxIh/fkwqB5UJaS3qwKpF+KNZzWSvnlyGMZ0qI6qwpiOVRPOQSj6VNZivpXg3uxHuqBlj0vJ22cGd2ci99wSl54OzNj+7xJtqEW8vycuIMC+3rG/dtl6uaAvZjXTwPwYeCatDCqeiQ2LnE+sAdwooiszdhvEFVdBpyNtfK/B5wpIjekNlkJXK+q/yQi/vDGze48TsZ+BUtPZPsV1vV4JvbrwmXphCJyrJePE7Bf2g4Hri5zDj1ynftcpKo7pGVVe9/X4ZiAt4YSl2CB+/SXfWyrb+A516tvBdPn+VY3TbrQaUJury5U5kFZojcjW4bUUmf1SvTpWZooh6BCn8rQBvdK5KMp/2I9lL+PQXpeTto4v82Iz8VfHCJpnT0/Y/t5WNfn972w7djYYJ+81vYUCV1X5n3AHLW13Z9FVZcDJ/ppVPVPgL/Fln5MM9Pl6Qy6uDiqejzWVfgJTPCbscmiL0/l97tYwRoaF5uIcCYmdPqabcFeMLwYWCMiWT18CbOwe7W5w3aV4r6E12ITZZd70Yr9GrdOvPdlqOpeqvoqVd0pFbafGwuMt+2ewD+6P6/wolvnm4sLOdeTb0XSd/CtVrpxIeSBCy/rQsiDJLxnFyr2oCzRmxErQ+qqsypi6HwalHIIKvepDG1wr1A+GvQv1kMZDODzctLGeTxnm0z8Hqfk15Up44dVdTqwP9aN+Hsv7C4Jv4F3PvCQN/ExYR52g+7xwj+JLQ3636p6FfBzbIn0V2JdkfsyWZzjgHHgpvROROQa4BqXz7WB43fifdjQlC+4v9+rqouxbsQVqe3+E3gbU1/Gl4iwCzahLc2T2LyBp5kooPNYjc0luKXDdnWwDPsS/IP7Mt+DSbwQGw7xkUCaDdikx7lMzIk4HjhLVb+FrWjyFLAX9h6DGdi9+kyygxb7BgHnevWtRPos3/pBWRdCHkAJF0IeeOFVuVCJB2WJ3oxkGVJXndUzQ+rTIJVDUJFPZWiDeyXz0Vf/Yj3UkUF7Xk7aOP4IhUL4PU4PYb1Oewe2fQ22dvqmQNiU1rSqzgF2zYibjr3I6y7xXjInIlcApwM/xS7w27CL8GdMjP9MtyRfB2wMjQntFrX19edjv2yluRY4zAu7DThEVZ/nhSd5vF2mvgsi6aZcJyK/6JCXi7Avzl/416ofuF/4DgbWYpXTWVjlshp7X0HRFvt1wH+5tG/HvmivxyZG/g3wRq/gaatvUINzJcjyrXYaciHkQTq8EhcG0IOyjJo30N4yZJC8yWLUfOpLOeTObxR9Kku//Yv1UAYD+ry8N/BDEclaCC+XST1OYqtbXM9EF2I6biM28So3LBX3UE7cNky2ICJyMXBxOsyNW5yNtcjTzKHzaihleRG27v6jXvijwNFe2CPYueyBrfYBgIicApwS2rmIjBXJhKp+Fngr9gbjrlrGVSAiP2Gim7jI9nsGwq4H/C9E3j7a6hvU41xRgr71izIuhDxw4YVdyLrndbgwYB6UpWtv3Fj3tb0cPJYhkxgkb7KI5VBOuIuLPtVHX/2L9VAug/i8PI+J+ZKl8YfqAfwrqeEO/URVdwR29VuVqno08DlsTfdLvWTPY+oN6yfJeNBKf/lQ1dXYUIKFInJvlfuOGF36Bs06V4tvo0zVHqjq+YSHn6VZKOVXqOuF6E0NtLXO6oOD0acaqNKnpsqhPh136Pyrsh5qaR0ELXheVtUdsCXkz+v2eKGG01eBC1R1vmtN95P9gdtV9X+w1uhO2NjGI7DlQd8kIlu9NI+RvQpJtzyGrW6ymxe+GzbmNE3yYq5fUhGqegk2znMJsFlVd3dRWwPnH+mebnyDepwrSuW+RSr3YBVTFynwebhDfNVEb+qhLXWWzyrqdTD6VA9V+rSKZsqhfhx3GP2rsh5aRf/u/aA9L78B+BlV9jiJyDZV/SjwLsIrgdTJdmyC2qHAsdjbhH8MfBq4SERCv9LdASytMhMisl1VNwLHAF9ORR0D/Lu3+WuAn2bkrVuWuc8NXrjSQys5MoVufIManCtBHb6NOpV6ICKPYZVJm4je1EMr6iyfPjgYfaqHynxqqhzq03GH0b/K6qF+3vsBfF5+F3C+TH4XVCmmjY9PnU/murI2YBOsMl+42gZU9QBs8tyL05NCdeKtzGAr8HwKW9HjCRHp2NJ2yyuuw27KTcCpwEnAq93Y1WS7tcAzInJSFecTaT8h5yrwrVD66Ft7yCp7Su4jejNi1FVnVZS36NOA0YZyqCqif+Vpw/0flOdlVX0J8EXgaOlhMQ1/VT0AXEvsFOCcbnfcL8TWhr8NmxSW5mCsJX4HNp5S3f9XJhuo6lJVHVd7b4O/36uwNeXPwaQ8AjjOk2AG8GbgC376yPCS4VxPvhVMH31rETllTxmiNyNGXXVWRUSfBoyWlENVEf0rSRvu/wA9L38CeHcvjSYIz3ECQETuV9WvquprReTOXg7SBxRYraqXiluC0E16C65okmIu9jKz/w9FisgaYE1O+pOAb4tIr28pjwwek5zr1beC6aNv7WNK2VOG6M3IUkud1SvRp4Gl0XKoKqJ/XdP4/W/787Kqvg64rMCKex0J9jgliMgNwHd6PUjdiMg3sBdqvbRk0uOA5ZJ6oVlJfge8t8u0kQGmS+eib0NGD2VPGaI3Q0aDdVYVRJ9axoCUQ1UR/fMYkPvf9H27sapVBINznCKRSCQSiUQikUgkMsEfAVkOEq5D3Q3VAAAAAElFTkSuQmCC", "text/latex": [ "$\\displaystyle \\left({img}_{(1,0)}^{2} w_{2} - 0.5 {img}_{(1,1)}^{2} - 0.5 {img}_{(-1,1)}^{2} + 0.5 {img}_{(1,-1)}^{2} - 0.5 {img}_{(-1,-1)}^{2} - {img}_{(-1,0)}^{2} w_{2}\\right)^{2}$" ], "text/plain": [ - " \n", - "(img_E__2â‹…wâ‚‚ - 0.5â‹…img_NE__2 - 0.5â‹…img_NW__2 + 0.5â‹…img_SE__2 - 0.5â‹…img_SW__2 -\n", - "\n", - " 2\n", - " img_W__2â‹…wâ‚‚) " + " 2\n", + "(img_E__2â‹…wâ‚‚ - 0.5â‹…img_NE__2 - 0.5â‹…img_NW__2 + 0.5â‹…img_SE__2 - 0.5â‹…img_SW__2 - img_W__2â‹…wâ‚‚) " ] }, "execution_count": 27, @@ -707,16 +857,13 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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", "text/latex": [ "$\\displaystyle {dst}_{(0,0)} \\leftarrow \\left({img}_{(1,0)}^{2} w_{2} - 0.5 {img}_{(1,1)}^{2} - 0.5 {img}_{(-1,1)}^{2} + 0.5 {img}_{(1,-1)}^{2} - 0.5 {img}_{(-1,-1)}^{2} - {img}_{(-1,0)}^{2} w_{2}\\right)^{2}$" ], "text/plain": [ - " \n", - "dst_C := (img_E__2â‹…wâ‚‚ - 0.5â‹…img_NE__2 - 0.5â‹…img_NW__2 + 0.5â‹…img_SE__2 - 0.5â‹…im\n", - "\n", - " 2\n", - "g_SW__2 - img_W__2â‹…wâ‚‚) " + " 2\n", + "dst_C := (img_E__2â‹…wâ‚‚ - 0.5â‹…img_NE__2 - 0.5â‹…img_NW__2 + 0.5â‹…img_SE__2 - 0.5â‹…img_SW__2 - img_W__2â‹…wâ‚‚) " ] }, "execution_count": 28, @@ -763,7 +910,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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t9sNp9MpexEEQRAEQQhMW9DwPI+nnnoKGzZswPLlywEA3d3dMBgMsFqtsrwFBQXo7u4W80jFjHBeOKfGrl27YLFYxFdpael0m00QBEEQxCxEN92CO3bswPnz53H48OFYtkeVp59+Gjt37hSPHQ4HysrKyFJDEARBECmEMG7PINolLNMSNE8++STef/99HDx4ECUlJWK6zWaDx+OB3W6XWWl6enpgs9nEPMePH5fVJ8yCEvIoMRqNMBqN4rHQIWSpIQiCIIjUY2BgABaLJaZ1RiVoGGP43ve+h7fffhv79+9HZWWl7HxNTQ30ej327duHbdu2AQAuX76MtrY21NXVAQDq6urwd3/3d+jt7UV+fj4AYO/evTCbzVi2bFlE7SgqKsLFixexbNkytLe3U2DwDHA6nSgtLaV+jAHUl7GB+jF2UF/GBurH2CF4WITY21gSlaDZsWMHXnvtNfzud79DVlaWGPNisVhgMplgsVjwxBNPYOfOncjOzobZbMb3vvc91NXVYf369QCAe+65B8uWLcPXv/51/MM//AO6u7vxV3/1V9ixY4fMCjMZGo0GxcXFAACz2UxfsBhA/Rg7qC9jA/Vj7KC+jA3Uj7FDo4n9ur5RCZrnn38eAHDnnXfK0l966SV84xvfAAD80z/9EzQaDbZt2wa3243NmzfjX/7lX8S8Wq0W77//Pr773e+irq4OGRkZePzxx/GTn/xkZndCEARBEMScJWqX01SkpaXhueeew3PPPRc2T3l5OT744INoLk0QBEEQBBGWlN3LyWg04plnnonYTUWoQ/0YO6gvYwP1Y+ygvowN1I+xI559OaOVggmCIAiCIG4GUtZCQxAEQRAEIUCChiAIgiCIlIcEDUEQBEEQKQ8JGoIgCIIgUp6UFDTPPfccKioqkJaWhtra2pCtFOY6Bw8exAMPPICioiJwHId33nlHdp4xhh//+McoLCyEyWRCfX09rly5IsszODiI7du3w2w2w2q14oknnoDL5UrgXSSfXbt24dZbb0VWVhby8/Px0EMP4fLly7I84+Pj2LFjB3JycpCZmYlt27aJW3kItLW14b777kN6ejry8/PxZ3/2Z/D5fIm8laTz/PPPY+XKleLCZHV1ddi9e7d4nvpxevz93/89OI7DU089JaZRX0bG3/zN34DjONmrqqpKPE/9GDkdHR342te+hpycHJhM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", "text/plain": [ "<Figure size 640x480 with 1 Axes>" ] @@ -794,7 +941,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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", "text/plain": [ "<Figure size 640x480 with 1 Axes>" ] @@ -825,11 +972,155 @@ "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "graphviz is not installed. Visualizing the AST is not available\n" - ] + "data": { + "image/svg+xml": [ + "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n", + "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n", + " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n", + "<!-- Generated by graphviz version 2.43.0 (0)\n", + " -->\n", + "<!-- Title: %3 Pages: 1 -->\n", + "<svg width=\"684pt\" height=\"391pt\"\n", + " viewBox=\"0.00 0.00 684.00 390.75\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n", + "<g id=\"graph0\" class=\"graph\" transform=\"scale(1.22 1.22) rotate(0) translate(4 472)\">\n", + "<title>%3</title>\n", + "<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-472 829.23,-472 829.23,4 -4,4\"/>\n", + "<!-- 139920670537616 -->\n", + "<g id=\"node1\" class=\"node\">\n", + "<title>139920670537616</title>\n", + "<ellipse fill=\"#a056db\" stroke=\"black\" cx=\"263.84\" cy=\"-450\" rx=\"134.58\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"263.84\" y=\"-446.3\" font-family=\"Times,serif\" font-size=\"14.00\">Func: kernel (dst,img,w_2)</text>\n", + "</g>\n", + "<!-- 139920670664720 -->\n", + "<g id=\"node11\" class=\"node\">\n", + "<title>139920670664720</title>\n", + "<ellipse fill=\"#dbc256\" stroke=\"black\" cx=\"263.84\" cy=\"-378\" rx=\"36.29\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"263.84\" y=\"-374.3\" font-family=\"Times,serif\" font-size=\"14.00\">Block</text>\n", + "</g>\n", + "<!-- 139920670537616->139920670664720 -->\n", + "<g id=\"edge10\" class=\"edge\">\n", + "<title>139920670537616->139920670664720</title>\n", + "<path fill=\"none\" stroke=\"black\" d=\"M263.84,-431.7C263.84,-423.98 263.84,-414.71 263.84,-406.11\"/>\n", + "<polygon fill=\"black\" stroke=\"black\" points=\"267.34,-406.1 263.84,-396.1 260.34,-406.1 267.34,-406.1\"/>\n", + "</g>\n", + "<!-- 139920666169168 -->\n", + "<g id=\"node2\" class=\"node\">\n", + "<title>139920666169168</title>\n", + "<ellipse fill=\"#56db7f\" stroke=\"black\" cx=\"175.84\" cy=\"-306\" rx=\"73.39\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"175.84\" y=\"-302.3\" font-family=\"Times,serif\" font-size=\"14.00\">_data_img_22</text>\n", + "</g>\n", + "<!-- 139920670656400 -->\n", + "<g id=\"node3\" class=\"node\">\n", + "<title>139920670656400</title>\n", + "<ellipse fill=\"#3498db\" stroke=\"black\" cx=\"352.84\" cy=\"-306\" rx=\"85.59\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"352.84\" y=\"-302.3\" font-family=\"Times,serif\" font-size=\"14.00\">Loop over dim 0</text>\n", + "</g>\n", + "<!-- 139920657663504 -->\n", + "<g id=\"node10\" class=\"node\">\n", + "<title>139920657663504</title>\n", + "<ellipse fill=\"#dbc256\" stroke=\"black\" cx=\"352.84\" cy=\"-234\" rx=\"36.29\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"352.84\" y=\"-230.3\" font-family=\"Times,serif\" font-size=\"14.00\">Block</text>\n", + "</g>\n", + "<!-- 139920670656400->139920657663504 -->\n", + "<g id=\"edge7\" class=\"edge\">\n", + "<title>139920670656400->139920657663504</title>\n", + "<path fill=\"none\" stroke=\"black\" d=\"M352.84,-287.7C352.84,-279.98 352.84,-270.71 352.84,-262.11\"/>\n", + "<polygon fill=\"black\" stroke=\"black\" points=\"356.34,-262.1 352.84,-252.1 349.34,-262.1 356.34,-262.1\"/>\n", + "</g>\n", + "<!-- 139920670665808 -->\n", + "<g id=\"node4\" class=\"node\">\n", + "<title>139920670665808</title>\n", + "<ellipse fill=\"#56db7f\" stroke=\"black\" cx=\"70.84\" cy=\"-162\" rx=\"70.69\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"70.84\" y=\"-158.3\" font-family=\"Times,serif\" font-size=\"14.00\">_data_dst_00</text>\n", + "</g>\n", + "<!-- 139920670698640 -->\n", + "<g id=\"node5\" class=\"node\">\n", + "<title>139920670698640</title>\n", + "<ellipse fill=\"#56db7f\" stroke=\"black\" cx=\"249.84\" cy=\"-162\" rx=\"89.88\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"249.84\" y=\"-158.3\" font-family=\"Times,serif\" font-size=\"14.00\">_data_img_22_01</text>\n", + "</g>\n", + "<!-- 139920661915920 -->\n", + "<g id=\"node6\" class=\"node\">\n", + "<title>139920661915920</title>\n", + "<ellipse fill=\"#56db7f\" stroke=\"black\" cx=\"455.84\" cy=\"-162\" rx=\"98.58\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"455.84\" y=\"-158.3\" font-family=\"Times,serif\" font-size=\"14.00\">_data_img_22_0m1</text>\n", + "</g>\n", + "<!-- 139920657676048 -->\n", + "<g id=\"node7\" class=\"node\">\n", + "<title>139920657676048</title>\n", + "<ellipse fill=\"#3498db\" stroke=\"black\" cx=\"658.84\" cy=\"-162\" rx=\"85.59\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"658.84\" y=\"-158.3\" font-family=\"Times,serif\" font-size=\"14.00\">Loop over dim 1</text>\n", + "</g>\n", + "<!-- 139920657567760 -->\n", + "<g id=\"node9\" class=\"node\">\n", + "<title>139920657567760</title>\n", + "<ellipse fill=\"#dbc256\" stroke=\"black\" cx=\"658.84\" cy=\"-90\" rx=\"36.29\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"658.84\" y=\"-86.3\" font-family=\"Times,serif\" font-size=\"14.00\">Block</text>\n", + "</g>\n", + "<!-- 139920657676048->139920657567760 -->\n", + "<g id=\"edge2\" class=\"edge\">\n", + "<title>139920657676048->139920657567760</title>\n", + "<path fill=\"none\" stroke=\"black\" d=\"M658.84,-143.7C658.84,-135.98 658.84,-126.71 658.84,-118.11\"/>\n", + "<polygon fill=\"black\" stroke=\"black\" points=\"662.34,-118.1 658.84,-108.1 655.34,-118.1 662.34,-118.1\"/>\n", + "</g>\n", + "<!-- 139920662243472 -->\n", + "<g id=\"node8\" class=\"node\">\n", + "<title>139920662243472</title>\n", + "<ellipse fill=\"#56db7f\" stroke=\"black\" cx=\"658.84\" cy=\"-18\" rx=\"166.27\" ry=\"18\"/>\n", + "<text text-anchor=\"middle\" x=\"658.84\" y=\"-14.3\" font-family=\"Times,serif\" font-size=\"14.00\">_data_dst_00[_stride_dst_1*ctr_1]</text>\n", + "</g>\n", + "<!-- 139920657567760->139920662243472 -->\n", + "<g id=\"edge1\" class=\"edge\">\n", + "<title>139920657567760->139920662243472</title>\n", + "<path fill=\"none\" stroke=\"black\" d=\"M658.84,-71.7C658.84,-63.98 658.84,-54.71 658.84,-46.11\"/>\n", + "<polygon fill=\"black\" stroke=\"black\" points=\"662.34,-46.1 658.84,-36.1 655.34,-46.1 662.34,-46.1\"/>\n", + "</g>\n", + "<!-- 139920657663504->139920670665808 -->\n", + "<g id=\"edge3\" class=\"edge\">\n", + "<title>139920657663504->139920670665808</title>\n", + "<path fill=\"none\" stroke=\"black\" d=\"M321.04,-225.11C274.68,-213.6 187.72,-192.01 129.54,-177.57\"/>\n", + "<polygon fill=\"black\" stroke=\"black\" points=\"130.29,-174.15 119.74,-175.14 128.61,-180.94 130.29,-174.15\"/>\n", + "</g>\n", + "<!-- 139920657663504->139920670698640 -->\n", + "<g id=\"edge4\" class=\"edge\">\n", + "<title>139920657663504->139920670698640</title>\n", + "<path fill=\"none\" stroke=\"black\" d=\"M332,-218.83C317.82,-209.19 298.75,-196.24 282.56,-185.23\"/>\n", + "<polygon fill=\"black\" stroke=\"black\" points=\"284.15,-182.08 273.91,-179.35 280.21,-187.87 284.15,-182.08\"/>\n", + "</g>\n", + "<!-- 139920657663504->139920661915920 -->\n", + "<g id=\"edge5\" class=\"edge\">\n", + "<title>139920657663504->139920661915920</title>\n", + "<path fill=\"none\" stroke=\"black\" d=\"M373.69,-218.83C387.77,-209.26 406.67,-196.42 422.79,-185.46\"/>\n", + "<polygon fill=\"black\" stroke=\"black\" points=\"425.11,-188.12 431.41,-179.61 421.17,-182.33 425.11,-188.12\"/>\n", + "</g>\n", + "<!-- 139920657663504->139920657676048 -->\n", + "<g id=\"edge6\" class=\"edge\">\n", + "<title>139920657663504->139920657676048</title>\n", + "<path fill=\"none\" stroke=\"black\" d=\"M385.3,-225.58C434.58,-214.3 529.28,-192.64 593.27,-178\"/>\n", + "<polygon fill=\"black\" stroke=\"black\" points=\"594.3,-181.35 603.27,-175.71 592.74,-174.53 594.3,-181.35\"/>\n", + "</g>\n", + "<!-- 139920670664720->139920666169168 -->\n", + "<g id=\"edge8\" class=\"edge\">\n", + "<title>139920670664720->139920666169168</title>\n", + "<path fill=\"none\" stroke=\"black\" d=\"M245.18,-362.15C233.32,-352.72 217.72,-340.31 204.33,-329.66\"/>\n", + "<polygon fill=\"black\" stroke=\"black\" points=\"206.33,-326.78 196.32,-323.29 201.97,-332.25 206.33,-326.78\"/>\n", + "</g>\n", + "<!-- 139920670664720->139920670656400 -->\n", + "<g id=\"edge9\" class=\"edge\">\n", + "<title>139920670664720->139920670656400</title>\n", + "<path fill=\"none\" stroke=\"black\" d=\"M282.72,-362.15C294.63,-352.78 310.27,-340.49 323.75,-329.88\"/>\n", + "<polygon fill=\"black\" stroke=\"black\" points=\"326.12,-332.47 331.82,-323.54 321.79,-326.97 326.12,-332.47\"/>\n", + "</g>\n", + "</g>\n", + "</svg>\n" + ], + "text/plain": [ + "<graphviz.sources.Source at 0x7f4230138790>" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ @@ -936,20 +1227,20 @@ { "data": { "text/html": [ - "<div class=\"highlight\"><pre><span></span><span class=\"n\">FUNC_PREFIX</span><span class=\"w\"> </span><span class=\"kt\">void</span><span class=\"w\"> </span><span class=\"n\">kernel</span><span class=\"p\">(</span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_dst</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_data_img</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_size_dst_0</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_size_dst_1</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_stride_dst_0</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_stride_dst_1</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_stride_img_0</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_stride_img_2</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">w_2</span><span class=\"p\">)</span><span class=\"w\"></span>\n", - "<span class=\"p\">{</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_img_22</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_img</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">2</span><span class=\"o\">*</span><span class=\"n\">_stride_img_2</span><span class=\"p\">;</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\"><</span><span class=\"w\"> </span><span class=\"n\">_size_dst_0</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_dst_00</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_dst</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_dst_0</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"p\">;</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_img_22_01</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_stride_img_0</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_img_0</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_data_img_22</span><span class=\"p\">;</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_img_22_0m1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_stride_img_0</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"n\">_stride_img_0</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_data_img_22</span><span class=\"p\">;</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\"><</span><span class=\"w\"> </span><span class=\"n\">_size_dst_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"n\">_data_dst_00</span><span class=\"p\">[</span><span class=\"n\">_stride_dst_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">w_2</span><span class=\"o\">*</span><span class=\"mf\">-1.0</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">w_2</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_01</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_01</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_01</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">])</span><span class=\"o\">*</span><span class=\"p\">(</span><span class=\"n\">w_2</span><span class=\"o\">*</span><span class=\"mf\">-1.0</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">w_2</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_01</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_01</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_01</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">]);</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"p\">}</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"p\">}</span><span class=\"w\"></span>\n", - "<span class=\"p\">}</span><span class=\"w\"></span>\n", + "<div class=\"highlight\"><pre><span></span><span class=\"n\">FUNC_PREFIX</span><span class=\"w\"> </span><span class=\"kt\">void</span><span class=\"w\"> </span><span class=\"n\">kernel</span><span class=\"p\">(</span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_dst</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_data_img</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_size_dst_0</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_size_dst_1</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_stride_dst_0</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_stride_dst_1</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_stride_img_0</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_stride_img_2</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">w_2</span><span class=\"p\">)</span>\n", + "<span class=\"p\">{</span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_img_22</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_img</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">2</span><span class=\"o\">*</span><span class=\"n\">_stride_img_2</span><span class=\"p\">;</span>\n", + "<span class=\"w\"> </span><span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\"><</span><span class=\"w\"> </span><span class=\"n\">_size_dst_0</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">)</span>\n", + "<span class=\"w\"> </span><span class=\"p\">{</span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_dst_00</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_dst</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_dst_0</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"p\">;</span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_img_22_01</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_stride_img_0</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_img_0</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_data_img_22</span><span class=\"p\">;</span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_img_22_0m1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_stride_img_0</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"n\">_stride_img_0</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_data_img_22</span><span class=\"p\">;</span>\n", + "<span class=\"w\"> </span><span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\"><</span><span class=\"w\"> </span><span class=\"n\">_size_dst_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">)</span>\n", + "<span class=\"w\"> </span><span class=\"p\">{</span>\n", + "<span class=\"w\"> </span><span class=\"n\">_data_dst_00</span><span class=\"p\">[</span><span class=\"n\">_stride_dst_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">w_2</span><span class=\"o\">*</span><span class=\"mf\">-1.0</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">w_2</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_01</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_01</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_01</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">])</span><span class=\"o\">*</span><span class=\"p\">(</span><span class=\"n\">w_2</span><span class=\"o\">*</span><span class=\"mf\">-1.0</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">w_2</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_01</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_01</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_01</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">]);</span>\n", + "<span class=\"w\"> </span><span class=\"p\">}</span>\n", + "<span class=\"w\"> </span><span class=\"p\">}</span>\n", + "<span class=\"p\">}</span>\n", "</pre></div>\n" ], "text/plain": [ @@ -1077,24 +1368,24 @@ { "data": { "text/html": [ - "<div class=\"highlight\"><pre><span></span><span class=\"n\">FUNC_PREFIX</span><span class=\"w\"> </span><span class=\"kt\">void</span><span class=\"w\"> </span><span class=\"n\">kernel</span><span class=\"p\">(</span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_dst</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_data_img</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_size_dst_0</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_size_dst_1</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_stride_dst_0</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_stride_dst_1</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_stride_img_0</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_stride_img_2</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">w_2</span><span class=\"p\">)</span><span class=\"w\"></span>\n", - "<span class=\"p\">{</span><span class=\"w\"></span>\n", + "<div class=\"highlight\"><pre><span></span><span class=\"n\">FUNC_PREFIX</span><span class=\"w\"> </span><span class=\"kt\">void</span><span class=\"w\"> </span><span class=\"n\">kernel</span><span class=\"p\">(</span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_dst</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_data_img</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_size_dst_0</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_size_dst_1</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_stride_dst_0</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_stride_dst_1</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_stride_img_0</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_stride_img_2</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"n\">w_2</span><span class=\"p\">)</span>\n", + "<span class=\"p\">{</span>\n", "<span class=\"w\"> </span><span class=\"cp\">#pragma omp parallel num_threads(2)</span>\n", - "<span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_img_22</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_img</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">2</span><span class=\"o\">*</span><span class=\"n\">_stride_img_2</span><span class=\"p\">;</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"p\">{</span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_img_22</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_img</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">2</span><span class=\"o\">*</span><span class=\"n\">_stride_img_2</span><span class=\"p\">;</span>\n", "<span class=\"w\"> </span><span class=\"cp\">#pragma omp for schedule(static)</span>\n", - "<span class=\"w\"> </span><span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\"><</span><span class=\"w\"> </span><span class=\"n\">_size_dst_0</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_dst_00</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_dst</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_dst_0</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"p\">;</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_img_22_01</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_stride_img_0</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_img_0</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_data_img_22</span><span class=\"p\">;</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_img_22_0m1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_stride_img_0</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"n\">_stride_img_0</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_data_img_22</span><span class=\"p\">;</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\"><</span><span class=\"w\"> </span><span class=\"n\">_size_dst_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"n\">_data_dst_00</span><span class=\"p\">[</span><span class=\"n\">_stride_dst_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">w_2</span><span class=\"o\">*</span><span class=\"mf\">-1.0</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">w_2</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_01</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_01</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_01</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">])</span><span class=\"o\">*</span><span class=\"p\">(</span><span class=\"n\">w_2</span><span class=\"o\">*</span><span class=\"mf\">-1.0</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">w_2</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_01</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_01</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_01</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">]);</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"p\">}</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"p\">}</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"p\">}</span><span class=\"w\"></span>\n", - "<span class=\"p\">}</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\"><</span><span class=\"w\"> </span><span class=\"n\">_size_dst_0</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">)</span>\n", + "<span class=\"w\"> </span><span class=\"p\">{</span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_dst_00</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_dst</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_dst_0</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"p\">;</span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_img_22_01</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_stride_img_0</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_img_0</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_data_img_22</span><span class=\"p\">;</span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_img_22_0m1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_stride_img_0</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"n\">_stride_img_0</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_data_img_22</span><span class=\"p\">;</span>\n", + "<span class=\"w\"> </span><span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\"><</span><span class=\"w\"> </span><span class=\"n\">_size_dst_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">)</span>\n", + "<span class=\"w\"> </span><span class=\"p\">{</span>\n", + "<span class=\"w\"> </span><span class=\"n\">_data_dst_00</span><span class=\"p\">[</span><span class=\"n\">_stride_dst_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">w_2</span><span class=\"o\">*</span><span class=\"mf\">-1.0</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">w_2</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_01</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_01</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_01</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">])</span><span class=\"o\">*</span><span class=\"p\">(</span><span class=\"n\">w_2</span><span class=\"o\">*</span><span class=\"mf\">-1.0</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">w_2</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_01</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_01</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mf\">0.5</span><span class=\"o\">*</span><span class=\"n\">_data_img_22_01</span><span class=\"p\">[</span><span class=\"n\">_stride_img_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"n\">_stride_img_1</span><span class=\"p\">]);</span>\n", + "<span class=\"w\"> </span><span class=\"p\">}</span>\n", + "<span class=\"w\"> </span><span class=\"p\">}</span>\n", + "<span class=\"w\"> </span><span class=\"p\">}</span>\n", + "<span class=\"p\">}</span>\n", "</pre></div>\n" ], "text/plain": [ @@ -1231,20 +1522,20 @@ { "data": { "text/html": [ - "<div class=\"highlight\"><pre><span></span><span class=\"n\">FUNC_PREFIX</span><span class=\"w\"> </span><span class=\"kt\">void</span><span class=\"w\"> </span><span class=\"n\">kernel</span><span class=\"p\">(</span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_data_I</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_dst</span><span class=\"p\">)</span><span class=\"w\"></span>\n", - "<span class=\"p\">{</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_I_21</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_I</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\"><</span><span class=\"w\"> </span><span class=\"mi\">202</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_dst_00</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_dst</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">601</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"p\">;</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_I_21_01</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_I_21</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">2404</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">2404</span><span class=\"p\">;</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_I_21_0m1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_I_21</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">2404</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">2404</span><span class=\"p\">;</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\"><</span><span class=\"w\"> </span><span class=\"mi\">600</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"n\">_data_dst_00</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mf\">-1.0</span><span class=\"o\">*</span><span class=\"n\">_data_I_21_01</span><span class=\"p\">[</span><span class=\"mi\">4</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">4</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">1.0</span><span class=\"o\">*</span><span class=\"n\">_data_I_21_0m1</span><span class=\"p\">[</span><span class=\"mi\">4</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">4</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">1.0</span><span class=\"o\">*</span><span class=\"n\">_data_I_21_0m1</span><span class=\"p\">[</span><span class=\"mi\">4</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">4</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">2.0</span><span class=\"o\">*</span><span class=\"n\">_data_I_21_0m1</span><span class=\"p\">[</span><span class=\"mi\">4</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mf\">2.0</span><span class=\"o\">*</span><span class=\"n\">_data_I_21_01</span><span class=\"p\">[</span><span class=\"mi\">4</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_data_I_21_01</span><span class=\"p\">[</span><span class=\"mi\">4</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">4</span><span class=\"p\">];</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"p\">}</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"p\">}</span><span class=\"w\"></span>\n", - "<span class=\"p\">}</span><span class=\"w\"></span>\n", + "<div class=\"highlight\"><pre><span></span><span class=\"n\">FUNC_PREFIX</span><span class=\"w\"> </span><span class=\"kt\">void</span><span class=\"w\"> </span><span class=\"n\">kernel</span><span class=\"p\">(</span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_data_I</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_dst</span><span class=\"p\">)</span>\n", + "<span class=\"p\">{</span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_I_21</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_I</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span>\n", + "<span class=\"w\"> </span><span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\"><</span><span class=\"w\"> </span><span class=\"mi\">202</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">)</span>\n", + "<span class=\"w\"> </span><span class=\"p\">{</span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_dst_00</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_dst</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">601</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"p\">;</span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_I_21_01</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_I_21</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">2404</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">2404</span><span class=\"p\">;</span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_I_21_0m1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_I_21</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">2404</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">2404</span><span class=\"p\">;</span>\n", + "<span class=\"w\"> </span><span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\"><</span><span class=\"w\"> </span><span class=\"mi\">600</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">)</span>\n", + "<span class=\"w\"> </span><span class=\"p\">{</span>\n", + "<span class=\"w\"> </span><span class=\"n\">_data_dst_00</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mf\">-1.0</span><span class=\"o\">*</span><span class=\"n\">_data_I_21_01</span><span class=\"p\">[</span><span class=\"mi\">4</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">4</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">1.0</span><span class=\"o\">*</span><span class=\"n\">_data_I_21_0m1</span><span class=\"p\">[</span><span class=\"mi\">4</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">4</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">1.0</span><span class=\"o\">*</span><span class=\"n\">_data_I_21_0m1</span><span class=\"p\">[</span><span class=\"mi\">4</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">4</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">2.0</span><span class=\"o\">*</span><span class=\"n\">_data_I_21_0m1</span><span class=\"p\">[</span><span class=\"mi\">4</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mf\">2.0</span><span class=\"o\">*</span><span class=\"n\">_data_I_21_01</span><span class=\"p\">[</span><span class=\"mi\">4</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_data_I_21_01</span><span class=\"p\">[</span><span class=\"mi\">4</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">4</span><span class=\"p\">];</span>\n", + "<span class=\"w\"> </span><span class=\"p\">}</span>\n", + "<span class=\"w\"> </span><span class=\"p\">}</span>\n", + "<span class=\"p\">}</span>\n", "</pre></div>\n" ], "text/plain": [ @@ -1292,7 +1583,7 @@ "source": [ "### Running on GPU\n", "\n", - "If you have a CUDA enabled graphics card and [pycuda](https://mathema.tician.de/software/pycuda/) installed, *pystencils* can run your kernel on the GPU as well. You can find more details about this in the GPU tutorial." + "If you have a GPU and [cupy](https://cupy.dev/) installed, *pystencils* can run your kernel on the GPU as well. You can find more details about this in the GPU tutorial." ] }, { @@ -1388,19 +1679,19 @@ { "data": { "text/html": [ - "<div class=\"highlight\"><pre><span></span><span class=\"n\">FUNC_PREFIX</span><span class=\"w\"> </span><span class=\"nf\">__launch_bounds__</span><span class=\"p\">(</span><span class=\"mi\">256</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"kt\">void</span><span class=\"w\"> </span><span class=\"n\">kernel</span><span class=\"p\">(</span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_data_I</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_dst</span><span class=\"p\">)</span><span class=\"w\"></span>\n", - "<span class=\"p\">{</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">blockDim</span><span class=\"p\">.</span><span class=\"n\">x</span><span class=\"o\">*</span><span class=\"n\">blockIdx</span><span class=\"p\">.</span><span class=\"n\">x</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">threadIdx</span><span class=\"p\">.</span><span class=\"n\">x</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"w\"> </span><span class=\"o\"><</span><span class=\"w\"> </span><span class=\"mi\">202</span><span class=\"w\"> </span><span class=\"o\">&&</span><span class=\"w\"> </span><span class=\"n\">blockDim</span><span class=\"p\">.</span><span class=\"n\">y</span><span class=\"o\">*</span><span class=\"n\">blockIdx</span><span class=\"p\">.</span><span class=\"n\">y</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">threadIdx</span><span class=\"p\">.</span><span class=\"n\">y</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"w\"> </span><span class=\"o\"><</span><span class=\"w\"> </span><span class=\"mi\">600</span><span class=\"p\">)</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">blockDim</span><span class=\"p\">.</span><span class=\"n\">x</span><span class=\"o\">*</span><span class=\"n\">blockIdx</span><span class=\"p\">.</span><span class=\"n\">x</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">threadIdx</span><span class=\"p\">.</span><span class=\"n\">x</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">blockDim</span><span class=\"p\">.</span><span class=\"n\">y</span><span class=\"o\">*</span><span class=\"n\">blockIdx</span><span class=\"p\">.</span><span class=\"n\">y</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">threadIdx</span><span class=\"p\">.</span><span class=\"n\">y</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_dst_10</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_dst</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"p\">;</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_I_11_21</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_I</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">4</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">5</span><span class=\"p\">;</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_I_1m1_21</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_I</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">4</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">3</span><span class=\"p\">;</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_I_10_21</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_I</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">4</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"n\">_data_dst_10</span><span class=\"p\">[</span><span class=\"mi\">601</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mf\">-1.0</span><span class=\"o\">*</span><span class=\"n\">_data_I_11_21</span><span class=\"p\">[</span><span class=\"mi\">2404</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">2404</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">1.0</span><span class=\"o\">*</span><span class=\"n\">_data_I_11_21</span><span class=\"p\">[</span><span class=\"mi\">2404</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">2404</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">1.0</span><span class=\"o\">*</span><span class=\"n\">_data_I_1m1_21</span><span class=\"p\">[</span><span class=\"mi\">2404</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">2404</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">2.0</span><span class=\"o\">*</span><span class=\"n\">_data_I_10_21</span><span class=\"p\">[</span><span class=\"mi\">2404</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">2404</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mf\">2.0</span><span class=\"o\">*</span><span class=\"n\">_data_I_10_21</span><span class=\"p\">[</span><span class=\"mi\">2404</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">2404</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_data_I_1m1_21</span><span class=\"p\">[</span><span class=\"mi\">2404</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">2404</span><span class=\"p\">];</span><span class=\"w\"></span>\n", + "<div class=\"highlight\"><pre><span></span><span class=\"n\">FUNC_PREFIX</span><span class=\"w\"> </span><span class=\"nf\">__launch_bounds__</span><span class=\"p\">(</span><span class=\"mi\">256</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"kt\">void</span><span class=\"w\"> </span><span class=\"n\">kernel</span><span class=\"p\">(</span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_data_I</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_dst</span><span class=\"p\">)</span>\n", + "<span class=\"p\">{</span>\n", + "<span class=\"w\"> </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">blockDim</span><span class=\"p\">.</span><span class=\"n\">x</span><span class=\"o\">*</span><span class=\"n\">blockIdx</span><span class=\"p\">.</span><span class=\"n\">x</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">threadIdx</span><span class=\"p\">.</span><span class=\"n\">x</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"w\"> </span><span class=\"o\"><</span><span class=\"w\"> </span><span class=\"mi\">202</span><span class=\"w\"> </span><span class=\"o\">&&</span><span class=\"w\"> </span><span class=\"n\">blockDim</span><span class=\"p\">.</span><span class=\"n\">y</span><span class=\"o\">*</span><span class=\"n\">blockIdx</span><span class=\"p\">.</span><span class=\"n\">y</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">threadIdx</span><span class=\"p\">.</span><span class=\"n\">y</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"w\"> </span><span class=\"o\"><</span><span class=\"w\"> </span><span class=\"mi\">600</span><span class=\"p\">)</span>\n", + "<span class=\"w\"> </span><span class=\"p\">{</span>\n", + "<span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">blockDim</span><span class=\"p\">.</span><span class=\"n\">x</span><span class=\"o\">*</span><span class=\"n\">blockIdx</span><span class=\"p\">.</span><span class=\"n\">x</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">threadIdx</span><span class=\"p\">.</span><span class=\"n\">x</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span>\n", + "<span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">blockDim</span><span class=\"p\">.</span><span class=\"n\">y</span><span class=\"o\">*</span><span class=\"n\">blockIdx</span><span class=\"p\">.</span><span class=\"n\">y</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">threadIdx</span><span class=\"p\">.</span><span class=\"n\">y</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_dst_10</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_dst</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"p\">;</span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_I_11_21</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_I</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">4</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">5</span><span class=\"p\">;</span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_I_1m1_21</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_I</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">4</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">3</span><span class=\"p\">;</span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_I_10_21</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_I</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">4</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span>\n", + "<span class=\"w\"> </span><span class=\"n\">_data_dst_10</span><span class=\"p\">[</span><span class=\"mi\">601</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mf\">-1.0</span><span class=\"o\">*</span><span class=\"n\">_data_I_11_21</span><span class=\"p\">[</span><span class=\"mi\">2404</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">2404</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">1.0</span><span class=\"o\">*</span><span class=\"n\">_data_I_11_21</span><span class=\"p\">[</span><span class=\"mi\">2404</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">2404</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">1.0</span><span class=\"o\">*</span><span class=\"n\">_data_I_1m1_21</span><span class=\"p\">[</span><span class=\"mi\">2404</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">2404</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mf\">2.0</span><span class=\"o\">*</span><span class=\"n\">_data_I_10_21</span><span class=\"p\">[</span><span class=\"mi\">2404</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">2404</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mf\">2.0</span><span class=\"o\">*</span><span class=\"n\">_data_I_10_21</span><span class=\"p\">[</span><span class=\"mi\">2404</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">2404</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_data_I_1m1_21</span><span class=\"p\">[</span><span class=\"mi\">2404</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">2404</span><span class=\"p\">];</span>\n", "<span class=\"w\"> </span><span class=\"p\">}</span><span class=\"w\"> </span>\n", - "<span class=\"p\">}</span><span class=\"w\"></span>\n", + "<span class=\"p\">}</span>\n", "</pre></div>\n" ], "text/plain": [ @@ -1425,8 +1716,8 @@ ], "source": [ "try:\n", - " import pycuda\n", - " from pystencils.gpucuda import BlockIndexing\n", + " import cupy\n", + " from pystencils.gpu import BlockIndexing\n", "\n", " gpu_ast = create_kernel(update_rule, target=ps.Target.GPU,\n", " gpu_indexing=BlockIndexing,\n", @@ -1434,7 +1725,7 @@ "\n", " ps.show_code(gpu_ast)\n", "except ImportError:\n", - " print(\"Please install pycuda for GPU support\")" + " print(\"Please install cupy for GPU support\")" ] } ], @@ -1455,7 +1746,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.6" + "version": "3.11.0rc1" } }, "nbformat": 4, diff --git a/doc/notebooks/03_tutorial_datahandling.ipynb b/doc/notebooks/03_tutorial_datahandling.ipynb index da0162392..05b489133 100644 --- a/doc/notebooks/03_tutorial_datahandling.ipynb +++ b/doc/notebooks/03_tutorial_datahandling.ipynb @@ -21,33 +21,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Test to see if pycuda is installed which is needed to run calculations on the GPU" + "Test to see if cupy is installed which is needed to run calculations on the GPU" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "No pycuda installed\n" - ] - } - ], + "outputs": [], "source": [ "try:\n", - " import pycuda\n", + " import cupy\n", " gpu = True\n", "except ImportError:\n", " gpu = False\n", - " pycuda = None\n", - " print('No pycuda installed')\n", - " \n", - "if pycuda:\n", - " import pycuda.gpuarray as gpuarray" + " cupy = None\n", + " print('No cupy installed')" ] }, { @@ -138,22 +127,22 @@ "span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }\n", ".highlight .hll { background-color: #ffffcc }\n", ".highlight { background: #f8f8f8; }\n", - ".highlight .c { color: #408080; font-style: italic } /* Comment */\n", + ".highlight .c { color: #3D7B7B; font-style: italic } /* Comment */\n", ".highlight .err { border: 1px solid #FF0000 } /* Error */\n", ".highlight .k { color: #008000; font-weight: bold } /* Keyword */\n", ".highlight .o { color: #666666 } /* Operator */\n", - ".highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */\n", - ".highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */\n", - ".highlight .cp { color: #BC7A00 } /* Comment.Preproc */\n", - ".highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */\n", - ".highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */\n", - ".highlight .cs { color: #408080; font-style: italic } /* Comment.Special */\n", + ".highlight .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */\n", + ".highlight .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */\n", + ".highlight .cp { color: #9C6500 } /* Comment.Preproc */\n", + ".highlight .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */\n", + ".highlight .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */\n", + ".highlight .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */\n", ".highlight .gd { color: #A00000 } /* Generic.Deleted */\n", ".highlight .ge { font-style: italic } /* Generic.Emph */\n", - ".highlight .gr { color: #FF0000 } /* Generic.Error */\n", + ".highlight .gr { color: #E40000 } /* Generic.Error */\n", ".highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */\n", - ".highlight .gi { color: #00A000 } /* Generic.Inserted */\n", - ".highlight .go { color: #888888 } /* Generic.Output */\n", + ".highlight .gi { color: #008400 } /* Generic.Inserted */\n", + ".highlight .go { color: #717171 } /* Generic.Output */\n", ".highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */\n", ".highlight .gs { font-weight: bold } /* Generic.Strong */\n", ".highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\n", @@ -166,15 +155,15 @@ ".highlight .kt { color: #B00040 } /* Keyword.Type */\n", ".highlight .m { color: #666666 } /* Literal.Number */\n", ".highlight .s { color: #BA2121 } /* Literal.String */\n", - ".highlight .na { color: #7D9029 } /* Name.Attribute */\n", + ".highlight .na { color: #687822 } /* Name.Attribute */\n", ".highlight .nb { color: #008000 } /* Name.Builtin */\n", ".highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */\n", ".highlight .no { color: #880000 } /* Name.Constant */\n", ".highlight .nd { color: #AA22FF } /* Name.Decorator */\n", - ".highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */\n", - ".highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */\n", + ".highlight .ni { color: #717171; font-weight: bold } /* Name.Entity */\n", + ".highlight .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */\n", ".highlight .nf { color: #0000FF } /* Name.Function */\n", - ".highlight .nl { color: #A0A000 } /* Name.Label */\n", + ".highlight .nl { color: #767600 } /* Name.Label */\n", ".highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */\n", ".highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */\n", ".highlight .nv { color: #19177C } /* Name.Variable */\n", @@ -191,11 +180,11 @@ ".highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */\n", ".highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */\n", ".highlight .s2 { color: #BA2121 } /* Literal.String.Double */\n", - ".highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */\n", + ".highlight .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */\n", ".highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */\n", - ".highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */\n", + ".highlight .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */\n", ".highlight .sx { color: #008000 } /* Literal.String.Other */\n", - ".highlight .sr { color: #BB6688 } /* Literal.String.Regex */\n", + ".highlight .sr { color: #A45A77 } /* Literal.String.Regex */\n", ".highlight .s1 { color: #BA2121 } /* Literal.String.Single */\n", ".highlight .ss { color: #19177C } /* Literal.String.Symbol */\n", ".highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */\n", @@ -216,28 +205,28 @@ { "data": { "text/html": [ - "<div class=\"highlight\"><pre><span></span><span class=\"n\">FUNC_PREFIX</span><span class=\"w\"> </span><span class=\"kt\">void</span><span class=\"w\"> </span><span class=\"n\">kernel</span><span class=\"p\">(</span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_dst</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_data_src</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_size_dst_0</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_size_dst_1</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_stride_dst_0</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_stride_dst_1</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_stride_src_0</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_stride_src_1</span><span class=\"p\">)</span><span class=\"w\"></span>\n", - "<span class=\"p\">{</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\"><</span><span class=\"w\"> </span><span class=\"n\">_size_dst_0</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_dst_00</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_dst</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_dst_0</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"p\">;</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_src_01</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_src</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_src_0</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_src_0</span><span class=\"p\">;</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_src_00</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_src</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_src_0</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"p\">;</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_src_0m1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_src</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_src_0</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"n\">_stride_src_0</span><span class=\"p\">;</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\"><</span><span class=\"w\"> </span><span class=\"n\">_size_dst_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"n\">_data_dst_00</span><span class=\"p\">[</span><span class=\"n\">_stride_dst_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mf\">0.25</span><span class=\"o\">*</span><span class=\"n\">_data_src_00</span><span class=\"p\">[</span><span class=\"n\">_stride_src_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_src_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mf\">0.25</span><span class=\"o\">*</span><span class=\"n\">_data_src_00</span><span class=\"p\">[</span><span class=\"n\">_stride_src_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"n\">_stride_src_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mf\">0.25</span><span class=\"o\">*</span><span class=\"n\">_data_src_01</span><span class=\"p\">[</span><span class=\"n\">_stride_src_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mf\">0.25</span><span class=\"o\">*</span><span class=\"n\">_data_src_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_src_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">];</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"p\">}</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"p\">}</span><span class=\"w\"></span>\n", - "<span class=\"p\">}</span><span class=\"w\"></span>\n", + "<div class=\"highlight\"><pre><span></span><span class=\"n\">FUNC_PREFIX</span><span class=\"w\"> </span><span class=\"kt\">void</span><span class=\"w\"> </span><span class=\"n\">kernel</span><span class=\"p\">(</span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_dst</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_data_src</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_size_dst_0</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_size_dst_1</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_stride_dst_0</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_stride_dst_1</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_stride_src_0</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_stride_src_1</span><span class=\"p\">)</span>\n", + "<span class=\"p\">{</span>\n", + "<span class=\"w\"> </span><span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\"><</span><span class=\"w\"> </span><span class=\"n\">_size_dst_0</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">)</span>\n", + "<span class=\"w\"> </span><span class=\"p\">{</span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_dst_00</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_dst</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_dst_0</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"p\">;</span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_src_01</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_src</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_src_0</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_src_0</span><span class=\"p\">;</span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_src_00</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_src</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_src_0</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"p\">;</span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_src_0m1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_src</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_src_0</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"n\">_stride_src_0</span><span class=\"p\">;</span>\n", + "<span class=\"w\"> </span><span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\"><</span><span class=\"w\"> </span><span class=\"n\">_size_dst_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">)</span>\n", + "<span class=\"w\"> </span><span class=\"p\">{</span>\n", + "<span class=\"w\"> </span><span class=\"n\">_data_dst_00</span><span class=\"p\">[</span><span class=\"n\">_stride_dst_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mf\">0.25</span><span class=\"o\">*</span><span class=\"n\">_data_src_00</span><span class=\"p\">[</span><span class=\"n\">_stride_src_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">_stride_src_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mf\">0.25</span><span class=\"o\">*</span><span class=\"n\">_data_src_00</span><span class=\"p\">[</span><span class=\"n\">_stride_src_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"n\">_stride_src_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mf\">0.25</span><span class=\"o\">*</span><span class=\"n\">_data_src_01</span><span class=\"p\">[</span><span class=\"n\">_stride_src_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mf\">0.25</span><span class=\"o\">*</span><span class=\"n\">_data_src_0m1</span><span class=\"p\">[</span><span class=\"n\">_stride_src_1</span><span class=\"o\">*</span><span class=\"n\">ctr_1</span><span class=\"p\">];</span>\n", + "<span class=\"w\"> </span><span class=\"p\">}</span>\n", + "<span class=\"w\"> </span><span class=\"p\">}</span>\n", + "<span class=\"p\">}</span>\n", "</pre></div>\n" ], "text/plain": [ - "FUNC_PREFIX void kernel(double * RESTRICT _data_dst, double * RESTRICT const _data_src, int64_t const _size_dst_0, int64_t const _size_dst_1, int64_t const _stride_dst_0, int64_t const _stride_dst_1, int64_t const _stride_src_0, int64_t const _stride_src_1)\n", + "FUNC_PREFIX void kernel(double * RESTRICT _data_dst, double * RESTRICT const _data_src, int64_t const _size_dst_0, int64_t const _size_dst_1, int64_t const _stride_dst_0, int64_t const _stride_dst_1, int64_t const _stride_src_0, int64_t const _stride_src_1)\n", "{\n", " for (int64_t ctr_0 = 1; ctr_0 < _size_dst_0 - 1; ctr_0 += 1)\n", " {\n", - " double * RESTRICT _data_dst_00 = _data_dst + _stride_dst_0*ctr_0;\n", + " double * RESTRICT _data_dst_00 = _data_dst + _stride_dst_0*ctr_0;\n", " double * RESTRICT _data_src_01 = _data_src + _stride_src_0*ctr_0 + _stride_src_0;\n", " double * RESTRICT _data_src_00 = _data_src + _stride_src_0*ctr_0;\n", " double * RESTRICT _data_src_0m1 = _data_src + _stride_src_0*ctr_0 - _stride_src_0;\n", @@ -321,22 +310,22 @@ "span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }\n", ".highlight .hll { background-color: #ffffcc }\n", ".highlight { background: #f8f8f8; }\n", - ".highlight .c { color: #408080; font-style: italic } /* Comment */\n", + ".highlight .c { color: #3D7B7B; font-style: italic } /* Comment */\n", ".highlight .err { border: 1px solid #FF0000 } /* Error */\n", ".highlight .k { color: #008000; font-weight: bold } /* Keyword */\n", ".highlight .o { color: #666666 } /* Operator */\n", - ".highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */\n", - ".highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */\n", - ".highlight .cp { color: #BC7A00 } /* Comment.Preproc */\n", - ".highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */\n", - ".highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */\n", - ".highlight .cs { color: #408080; font-style: italic } /* Comment.Special */\n", + ".highlight .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */\n", + ".highlight .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */\n", + ".highlight .cp { color: #9C6500 } /* Comment.Preproc */\n", + ".highlight .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */\n", + ".highlight .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */\n", + ".highlight .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */\n", ".highlight .gd { color: #A00000 } /* Generic.Deleted */\n", ".highlight .ge { font-style: italic } /* Generic.Emph */\n", - ".highlight .gr { color: #FF0000 } /* Generic.Error */\n", + ".highlight .gr { color: #E40000 } /* Generic.Error */\n", ".highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */\n", - ".highlight .gi { color: #00A000 } /* Generic.Inserted */\n", - ".highlight .go { color: #888888 } /* Generic.Output */\n", + ".highlight .gi { color: #008400 } /* Generic.Inserted */\n", + ".highlight .go { color: #717171 } /* Generic.Output */\n", ".highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */\n", ".highlight .gs { font-weight: bold } /* Generic.Strong */\n", ".highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\n", @@ -349,15 +338,15 @@ ".highlight .kt { color: #B00040 } /* Keyword.Type */\n", ".highlight .m { color: #666666 } /* Literal.Number */\n", ".highlight .s { color: #BA2121 } /* Literal.String */\n", - ".highlight .na { color: #7D9029 } /* Name.Attribute */\n", + ".highlight .na { color: #687822 } /* Name.Attribute */\n", ".highlight .nb { color: #008000 } /* Name.Builtin */\n", ".highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */\n", ".highlight .no { color: #880000 } /* Name.Constant */\n", ".highlight .nd { color: #AA22FF } /* Name.Decorator */\n", - ".highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */\n", - ".highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */\n", + ".highlight .ni { color: #717171; font-weight: bold } /* Name.Entity */\n", + ".highlight .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */\n", ".highlight .nf { color: #0000FF } /* Name.Function */\n", - ".highlight .nl { color: #A0A000 } /* Name.Label */\n", + ".highlight .nl { color: #767600 } /* Name.Label */\n", ".highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */\n", ".highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */\n", ".highlight .nv { color: #19177C } /* Name.Variable */\n", @@ -374,11 +363,11 @@ ".highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */\n", ".highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */\n", ".highlight .s2 { color: #BA2121 } /* Literal.String.Double */\n", - ".highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */\n", + ".highlight .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */\n", ".highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */\n", - ".highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */\n", + ".highlight .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */\n", ".highlight .sx { color: #008000 } /* Literal.String.Other */\n", - ".highlight .sr { color: #BB6688 } /* Literal.String.Regex */\n", + ".highlight .sr { color: #A45A77 } /* Literal.String.Regex */\n", ".highlight .s1 { color: #BA2121 } /* Literal.String.Single */\n", ".highlight .ss { color: #19177C } /* Literal.String.Symbol */\n", ".highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */\n", @@ -399,28 +388,28 @@ { "data": { "text/html": [ - "<div class=\"highlight\"><pre><span></span><span class=\"n\">FUNC_PREFIX</span><span class=\"w\"> </span><span class=\"kt\">void</span><span class=\"w\"> </span><span class=\"n\">kernel</span><span class=\"p\">(</span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_dst</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_data_src</span><span class=\"p\">)</span><span class=\"w\"></span>\n", - "<span class=\"p\">{</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\"><</span><span class=\"w\"> </span><span class=\"mi\">29</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_dst_00</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_dst</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">30</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"p\">;</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_src_01</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_src</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">30</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">30</span><span class=\"p\">;</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_src_00</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_src</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">30</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"p\">;</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_src_0m1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_src</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">30</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">30</span><span class=\"p\">;</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\"><</span><span class=\"w\"> </span><span class=\"mi\">29</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"n\">_data_dst_00</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mf\">0.25</span><span class=\"o\">*</span><span class=\"n\">_data_src_00</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mf\">0.25</span><span class=\"o\">*</span><span class=\"n\">_data_src_00</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mf\">0.25</span><span class=\"o\">*</span><span class=\"n\">_data_src_01</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mf\">0.25</span><span class=\"o\">*</span><span class=\"n\">_data_src_0m1</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"p\">];</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"p\">}</span><span class=\"w\"></span>\n", - "<span class=\"w\"> </span><span class=\"p\">}</span><span class=\"w\"></span>\n", - "<span class=\"p\">}</span><span class=\"w\"></span>\n", + "<div class=\"highlight\"><pre><span></span><span class=\"n\">FUNC_PREFIX</span><span class=\"w\"> </span><span class=\"kt\">void</span><span class=\"w\"> </span><span class=\"n\">kernel</span><span class=\"p\">(</span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_dst</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_data_src</span><span class=\"p\">)</span>\n", + "<span class=\"p\">{</span>\n", + "<span class=\"w\"> </span><span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\"><</span><span class=\"w\"> </span><span class=\"mi\">29</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">)</span>\n", + "<span class=\"w\"> </span><span class=\"p\">{</span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_dst_00</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_dst</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">30</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"p\">;</span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_src_01</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_src</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">30</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">30</span><span class=\"p\">;</span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_src_00</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_src</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">30</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"p\">;</span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_src_0m1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_src</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">30</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">30</span><span class=\"p\">;</span>\n", + "<span class=\"w\"> </span><span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\"><</span><span class=\"w\"> </span><span class=\"mi\">29</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">)</span>\n", + "<span class=\"w\"> </span><span class=\"p\">{</span>\n", + "<span class=\"w\"> </span><span class=\"n\">_data_dst_00</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mf\">0.25</span><span class=\"o\">*</span><span class=\"n\">_data_src_00</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mf\">0.25</span><span class=\"o\">*</span><span class=\"n\">_data_src_00</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mf\">0.25</span><span class=\"o\">*</span><span class=\"n\">_data_src_01</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mf\">0.25</span><span class=\"o\">*</span><span class=\"n\">_data_src_0m1</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"p\">];</span>\n", + "<span class=\"w\"> </span><span class=\"p\">}</span>\n", + "<span class=\"w\"> </span><span class=\"p\">}</span>\n", + "<span class=\"p\">}</span>\n", "</pre></div>\n" ], "text/plain": [ - "FUNC_PREFIX void kernel(double * RESTRICT _data_dst, double * RESTRICT const _data_src)\n", + "FUNC_PREFIX void kernel(double * RESTRICT _data_dst, double * RESTRICT const _data_src)\n", "{\n", " for (int64_t ctr_0 = 1; ctr_0 < 29; ctr_0 += 1)\n", " {\n", - " double * RESTRICT _data_dst_00 = _data_dst + 30*ctr_0;\n", + " double * RESTRICT _data_dst_00 = _data_dst + 30*ctr_0;\n", " double * RESTRICT _data_src_01 = _data_src + 30*ctr_0 + 30;\n", " double * RESTRICT _data_src_00 = _data_src + 30*ctr_0;\n", " double * RESTRICT _data_src_0m1 = _data_src + 30*ctr_0 - 30;\n", @@ -477,7 +466,7 @@ "### 1.2. GPU simulations\n", "\n", "Let's now jump to a seemingly unrelated topic: running kernels on the GPU. \n", - "When creating the kernel, an additional parameter `target=ps.Target.GPU` has to be passed. Also, the compiled kernel cannot be called with numpy arrays directly, but has to be called with `pycuda.gpuarray`s instead. That means, we have to transfer our numpy array to GPU first. From this step we obtain a gpuarray, then we can run the kernel, hopefully multiple times so that the data transfer was worth the time. Finally we transfer the finished result back to CPU:" + "When creating the kernel, an additional parameter `target=ps.Target.GPU` has to be passed. Also, the compiled kernel cannot be called with numpy arrays directly, but has to be called with `cupy.array`s instead. That means, we have to transfer our numpy array to GPU first. From this step we obtain a gpuarray, then we can run the kernel, hopefully multiple times so that the data transfer was worth the time. Finally we transfer the finished result back to CPU:" ] }, { @@ -486,18 +475,18 @@ "metadata": {}, "outputs": [], "source": [ - "if pycuda:\n", + "if cupy:\n", " config = ps.CreateKernelConfig(target=ps.Target.GPU)\n", " kernel_function_gpu = ps.create_kernel(update_rule, config=config).compile()\n", " # transfer to GPU\n", - " src_arr_gpu = pycuda.gpuarray.to_gpu(src_arr)\n", - " dst_arr_gpu = pycuda.gpuarray.to_gpu(dst_arr)\n", + " src_arr_gpu = cupy.asarray(src_arr)\n", + " dst_arr_gpu = cupy.asarray(dst_arr)\n", " \n", " # run kernel on GPU, this is done many times in real setups\n", " kernel_function_gpu(src=src_arr_gpu, dst=dst_arr_gpu)\n", " \n", " # transfer result back to CPU\n", - " dst_arr_gpu.get(dst_arr)" + " dst_arr = dst_arr_gpu.get()" ] }, { @@ -516,7 +505,7 @@ "\n", "- symbolic pystencils field\n", "- numpy array on CPU \n", - "- for GPU run also a pycuda.gpuarray to mirror the data on the GPU\n", + "- for GPU use also cupy to mirror the data on the GPU\n", "\n", "Managing these three objects manually is tedious and error-prone. We'll see in the next section how the data handling object takes care of this problem." ] @@ -768,14 +757,12 @@ "outputs": [ { "data": { - "image/png": "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J1c9GABwfHYzAJtqmUtkH5TkLVV15/Gv7e53rnQqAOBk7GYANtIpA7O7P5Pk4nMwCwCwBLsZgE3l25QAAAAwQmACAAAwQmACAAAwQmACAAAwQmACAAAwQmACAAAwQmACAAAwQmACAAAwQmACAAAwQmACAAAwQmACAAAwQmACAAAwQmACAAAwQmACAAAwQmACAAAwQmACAAAwQmACAAAwQmACAAAwQmACAAAwQmACAAAwQmACAAAwQmACAAAw4sC6B2DGu265dt0jwM572kMuWfcIsJPsMIDd4RlMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARiwdmFV1XlX9YVW9bZUDAQDLsZsB2DSn8wzmC5Ncv6pBAIDTZjcDsFGWCsyqujDJ05O8YrXjAADLsJsB2ETLPoP5siQvTvKNEx1QVVdU1eGqOnz06NGJ2QCAE3tZ7GYANswpA7OqnpHk1u4+crLjuvvK7j7U3Yf29vbGBgQAvpndDMCmWuYZzEuTPLOqbkzy+iSXVdXvrnQqAOBk7GYANtIpA7O7f6m7L+zug0mem+S93f3jK58MADguuxmATeX7YAIAADDiwOkc3N3XJLlmJZMAAKfNbgZgk3gGEwAAgBECEwAAgBECEwAAgBECEwAAgBECEwAAgBECEwAAgBECEwAAgBECEwAAgBECEwAAgBECEwAAgBECEwAAgBECEwAAgBECEwAAgBECEwAAgBECEwAAgBECEwAAgBECEwAAgBECEwAAgBECEwAAgBECEwAAgBECEwAAgBECEwAAgBECEwAAgBECEwAAgBECEwAAgBECEwAAgBECEwAAgBECEwAAgBECEwAAgBECEwAAgBECEwAAgBECEwAAgBECEwAAgBECEwAAgBECEwAAgBECEwAAgBECEwAAgBECEwAAgBECEwAAgBECEwAAgBECEwAAgBECEwAAgBECEwAAgBECEwAAgBECEwAAgBGnDMyquldVfaSqPl5V11XVL5+LwQCA47ObAdhUB5Y45mtJLuvur1bV+Uk+UFX/ubs/tOLZAIDjs5sB2EinDMzu7iRfXXx4/uKtVzkUAHBidjMAm2qp12BW1XlVdW2SW5Nc3d0fXulUAMBJ2c0AbKKlArO77+juS5JcmOQJVfU9dz2mqq6oqsNVdfjo0aPDYwIAx7KbAdhEp3UX2e6+Lck1SS4/zs9d2d2HuvvQ3t7ezHQAwEnZzQBskmXuIrtXVfdfvH/vJE9O8qkVzwUAnIDdDMCmWuYusg9O8uqqOi/7QfqG7n7bascCAE7CbgZgIy1zF9lPJHncOZgFAFiC3QzApjqt12ACAADAiQhMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARghMAAAARpwyMKvqoVX1vqq6vqquq6oXnovBAIDjs5sB2FQHljjm9iQv6u6PVdX9khypqqu7+49WPBsAcHx2MwAb6ZTPYHb3n3X3xxbvfyXJ9UkuWPVgAMDx2c0AbKrTeg1mVR1M8rgkH17JNADAabGbAdgkSwdmVd03yZuS/Hx3f/k4P39FVR2uqsNHjx6dnBEAOA67GYBNs1RgVtX52V9gr+nuNx/vmO6+srsPdfehvb29yRkBgLuwmwHYRMvcRbaS/HaS67v7pasfCQA4GbsZgE21zDOYlyZ5fpLLquraxdsPrXguAODE7GYANtIpv01Jd38gSZ2DWQCAJdjNAGyq07qLLAAAAJyIwAQAAGCEwAQAAGCEwAQAAGCEwAQAAGCEwAQAAGCEwAQAAGCEwAQAAGCEwAQAAGCEwAQAAGCEwAQAAGCEwAQAAGCEwAQAAGCEwAQAAGCEwAQAAGCEwAQAAGCEwAQAAGCEwAQAAGCEwAQAAGCEwAQAAGCEwAQAAGCEwAQAAGCEwAQAAGCEwAQAAGCEwAQAAGCEwAQAAGCEwAQAAGCEwAQAAGCEwAQAAGCE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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAABP4AAAIQCAYAAAARnqAIAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAqsUlEQVR4nO3de3DV9Zn48SfhElBJACUgEkC8oSJoQSmiq1SUoepWO16G0RbZ6rAWrBbdKp2pyDo1dnbq6LQsgnaJ7cZFacXa7ipSFeyuWgSXXbXVQpdWqghqaxLSNmpyfn/sz7NNuZ1vSHKSD6/XzJnxfHMuT77j1KfvnEtJLpfLBQAAAACQlNJiDwAAAAAAtD/hDwAAAAASJPwBAAAAQIKEPwAAAABIkPAHAAAAAAkS/gAAAAAgQcIfAAAAACRI+AMAAACABAl/AAAAAJAg4Q9Iwj/8wz/EqFGjokePHnHyyScXexwAABL3ve99L0aPHh29evWK/v37F3scgN0S/oBOVVNTEyUlJa0ulZWVMWXKlHj88cfb9JhPPvlkfOUrX4nJkyfHsmXL4o477mjnqQEAOND84z/+Y5SUlMTEiRN3+dlrr70WV111VRx11FFx3333xdKlS+MPf/hD3HbbbbFmzZrOHxZgD3oWewDgwPT3f//3ceSRR0Yul4vt27dHTU1NfPrTn44f/ehHccEFF2R6rKeffjpKS0vjO9/5TvTu3buDJgYA4EBSW1sbI0eOjHXr1sXmzZvj6KOPzv9szZo10dLSEvfcc0/++LvvvhsLFy6MiIizzz67GCMD7MIr/oCimD59elx55ZXxuc99Lm666ab46U9/Gr169Yp/+Zd/yfxYO3bsiL59+7Zb9MvlcvHHP/6xXR4LAIDuZ8uWLfHcc8/FXXfdFYMGDYra2tpWP9+xY0dERKe8xbexsbHDnwNIl/AHdAn9+/ePvn37Rs+e//dC5JaWlrj77rvjxBNPjD59+sTgwYNj9uzZ8fvf/z5/m5KSkli2bFk0Njbm3zpcU1MTEREfffRR3H777XHUUUdFWVlZjBw5Mr761a9GU1NTq+ceOXJkXHDBBbFq1aqYMGFC9O3bN5YsWRIREe+//37ccMMNUVVVFWVlZXH00UfHN77xjWhpaen4kwIAQFHU1tbGgAED4vzzz49LLrmkVfgbOXJkLFiwICIiBg0aFCUlJXHVVVfFoEGDIiJi4cKF+b30tttuy9/vtddei0suuSQGDhwYffr0iQkTJsRjjz3W6nk//lictWvXxhe/+MWorKyMYcOGdfwvDCTLW32Boqirq4t33303crlc7NixI771rW/Fzp0748orr8zfZvbs2VFTUxOzZs2KL33pS7Fly5b49re/Hf/5n/8Z//Ef/xG9evWK733ve7F06dJYt25d3H///RERcfrpp0dExNVXXx0PPPBAXHLJJXHjjTfGz372s6iuro5f/OIXsXLlylbzvP766zFjxoyYPXt2XHPNNXHcccfFH/7whzjrrLPizTffjNmzZ8fw4cPjueeei/nz58e2bdvi7rvv7rTzBQBA56mtrY3Pfvaz0bt375gxY0YsXrw4XnzxxTj11FPj7rvvju9+97uxcuXKWLx4cRxyyCFx0kknxSc/+cm49tpr4+KLL47PfvazERExduzYiIh49dVXY/LkyXHEEUfELbfcEgcffHA8/PDDcdFFF8UPfvCDuPjii1s9/xe/+MUYNGhQ3HrrrV7xB+yfHEAnWrZsWS4idrmUlZXlampq8rf76U9/mouIXG1tbav7P/HEE7scnzlzZu7ggw9udbuNGzfmIiJ39dVXtzp+00035SIi9/TTT+ePjRgxIhcRuSeeeKLVbW+//fbcwQcfnPvlL3/Z6vgtt9yS69GjR+6NN95o20kAAKDLWr9+fS4icqtXr87lcrlcS0tLbtiwYbnrr78+f5sFCxbkIiL3zjvv5I+98847uYjILViwYJfHPOecc3InnXRS7k9/+lP+WEtLS+7000/PHXPMMfljH+/KZ5xxRu6jjz5q/18OOOB4qy9QFIsWLYrVq1fH6tWr45//+Z9jypQpcfXVV8cjjzwSERErVqyIioqKOPfcc+Pdd9/NX8aPHx+HHHJIPPPMM3t9/H/7t3+LiIh58+a1On7jjTdGRMS//uu/tjp+5JFHxrRp01odW7FiRZx55pkxYMCAVjNMnTo1mpub49lnn92vcwAAQNdTW1sbgwcPjilTpkTE/360zOWXXx7Lly+P5ubmzI/3u9/9Lp5++um47LLLoqGhIb9TvvfeezFt2rTYtGlTvPnmm63uc80110SPHj3a5fcBDmze6gsUxWmnnRYTJkzIX58xY0accsopMXfu3Ljgggti06ZNUVdXF5WVlbu9/8cfqLwnv/nNb6K0tLTVt69FRAwZMiT69+8fv/nNb1odP/LII3d5jE2bNsV///d/5z+vJesMAAB0L83NzbF8+fKYMmVKbNmyJX984sSJ8c1vfjOeeuqpOO+88zI95ubNmyOXy8XXvva1+NrXvrbb2+zYsSOOOOKI/PXd7aYAbSH8AV1CaWlpTJkyJe65557YtGlTtLS0RGVl5S7foPaxPcW4v1RSUlLQ7fr27bvLsZaWljj33HPjK1/5ym7vc+yxxxb02AAAdA9PP/10bNu2LZYvXx7Lly/f5ee1tbWZw9/HXwp300037fIOk4/95R+rd7ebArSF8Ad0GR999FFEROzcuTOOOuqo+MlPfhKTJ09u0+IzYsSIaGlpiU2bNsXxxx+fP759+/Z4//33Y8SIEft8jKOOOip27twZU6dOzfz8AAB0P7W1tVFZWRmLFi3a5WePPPJIrFy5Mu69997d3ndPf3AeNWpURET06tXLXgl0Op/xB3QJH374YTz55JPRu3fvOP744+Oyyy6L5ubmuP3223e57UcffRTvv//+Xh/v05/+dETELt+8e9ddd0VExPnnn7/PmS677LJ4/vnnY9WqVbv87P3338+HSgAAur8//vGP8cgjj8QFF1wQl1xyyS6XuXPnRkNDQzz22GO7vf9BBx0UEbHLnlpZWRlnn312LFmyJLZt27bL/d555512/10APuYVf0BRPP744/Haa69FxP9+psmDDz4YmzZtiltuuSXKy8vjrLPOitmzZ0d1dXVs3LgxzjvvvOjVq1ds2rQpVqxYEffcc09ccskle3z8cePGxcyZM2Pp0qXx/vvvx1lnnRXr1q2LBx54IC666KL8hzXvzd/93d/FY489FhdccEFcddVVMX78+GhsbIyXX345vv/978evf/3rOOyww9rtnAAAUDyPPfZYNDQ0xF//9V/v9uef/OQnY9CgQVFbWxuf+MQndvl5375944QTToiHHnoojj322Bg4cGCMGTMmxowZE4sWLYozzjgjTjrppLjmmmti1KhRsX379nj++efjt7/9bfzXf/1XR/96wAFK+AOK4tZbb83/c58+fWL06NGxePHimD17dv74vffeG+PHj48lS5bEV7/61ejZs2eMHDkyrrzyypg8efI+n+P++++PUaNGRU1NTaxcuTKGDBkS8+fPjwULFhQ040EHHRRr166NO+64I1asWBHf/e53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", "text/plain": [ - "<Figure size 1152x432 with 2 Axes>" + "<Figure size 1600x600 with 2 Axes>" ] }, - "metadata": { - "needs_background": "light" - }, + "metadata": {}, "output_type": "display_data" } ], @@ -826,7 +813,61 @@ "name": "stdout", "output_type": "stream", "text": [ - "(-1, -1) (32, 32)\n" + "(-1, -1) (32, 32)\n", + "[0][PROGRESS]------(0.000 sec) Initializing SetupBlockForest:\n", + "[0] - AABB: [ <0,0,0>, <30,30,1> ]\n", + "[0] - forest size (root blocks / blocks on the initial grid): 1 x 1 x 1\n", + "[0] - periodicity: false x false x false\n", + "[0][PROGRESS]------(0.000 sec) Initializing SetupBlockForest: Allocating root blocks ...\n", + "[0][PROGRESS]------(0.000 sec) Initializing SetupBlockForest: Setting up neighborhood information for each block (with respect to periodicity) ...\n", + "[0][PROGRESS]------(0.000 sec) Initializing SetupBlockForest: Assigning workload, memory requirements, and SUIDs to blocks ...\n", + "[0][PROGRESS]------(0.000 sec) Initializing SetupBlockForest: finished!\n", + "[0] The following block structure has been created:\n", + "[0] - AABB: [ <0,0,0>, <30,30,1> ]\n", + "[0] - initial decomposition: 1 x 1 x 1 (= forest size)\n", + "[0] - periodicity: false x false x false\n", + "[0] - number of blocks discarded from the initial grid: 0 (= 0 %)\n", + "[0] - number of levels: 1\n", + "[0] - tree ID digits: 1 (-> block ID bytes = 1)\n", + "[0] - total number of blocks: 1\n", + "[0] - blocks have not yet been distributed to processes\n", + "[0][PROGRESS]------(0.000 sec) Balancing SetupBlockForest: Creating a process distribution for 1 process(es) ...\n", + "[0][PROGRESS]------(0.000 sec) Balancing SetupBlockForest: process distribution to 1 process(es) finished!\n", + "[0] - number of worker processes: 1\n", + "[0] - number of empty buffer processes: 0\n", + "[0] - buffer processes are inserted into the process network: no\n", + "[0] The resulting block structure looks like as follows:\n", + "[0] - AABB: [ <0,0,0>, <30,30,1> ]\n", + "[0] - initial decomposition: 1 x 1 x 1 (= forest size)\n", + "[0] - periodicity: false x false x false\n", + "[0] - number of blocks discarded from the initial grid: 0 (= 0 %)\n", + "[0] - number of levels: 1\n", + "[0] - tree ID digits: 1 (-> block ID bytes = 1)\n", + "[0] - total number of blocks: 1\n", + "[0] - number of processes: 1 (1 worker process(es) / 0 empty buffer process(es))\n", + "[0] - buffer processes are inserted into the process network: no\n", + "[0] - process ID bytes: 0\n", + "[0] - blocks/memory/workload per process:\n", + "[0] + blocks:\n", + "[0] - min = 1\n", + "[0] - max = 1\n", + "[0] - avg = 1\n", + "[0] - stdDev = 0\n", + "[0] - relStdDev = 0\n", + "[0] + memory:\n", + "[0] - min = 1\n", + "[0] - max = 1\n", + "[0] - avg = 1\n", + "[0] - stdDev = 0\n", + "[0] - relStdDev = 0\n", + "[0] + workload:\n", + "[0] - min = 1\n", + "[0] - max = 1\n", + "[0] - avg = 1\n", + "[0] - stdDev = 0\n", + "[0] - relStdDev = 0\n", + "[0][PROGRESS]------(0.000 sec) Adding block data (\"cell bounding box\")\n", + "[0][PROGRESS]------(0.000 sec) Adding block data (\"field\")\n" ] } ], @@ -858,10 +899,64 @@ "name": "stdout", "output_type": "stream", "text": [ - "(-1, -1, -1) (22, 12, 22)\n", + "(-1, -1, -1)[0][PROGRESS]------(0.025 sec) Initializing SetupBlockForest:\n", + "[0] - AABB: [ <0,0,0>, <40,10,40> ]\n", + "[0] - forest size (root blocks / blocks on the initial grid): 2 x 1 x 2\n", + "[0] - periodicity: true x false x false\n", + " (22, 12, 22)\n", "(19, -1, -1) (22, 12, 22)\n", "(-1, -1, 19) (22, 12, 22)\n", - "(19, -1, 19) (22, 12, 22)\n" + "(19, -1, 19) (22, 12, 22)\n", + "[0][PROGRESS]------(0.025 sec) Initializing SetupBlockForest: Allocating root blocks ...\n", + "[0][PROGRESS]------(0.025 sec) Initializing SetupBlockForest: Setting up neighborhood information for each block (with respect to periodicity) ...\n", + "[0][PROGRESS]------(0.025 sec) Initializing SetupBlockForest: Assigning workload, memory requirements, and SUIDs to blocks ...\n", + "[0][PROGRESS]------(0.025 sec) Initializing SetupBlockForest: finished!\n", + "[0] The following block structure has been created:\n", + "[0] - AABB: [ <0,0,0>, <40,10,40> ]\n", + "[0] - initial decomposition: 2 x 1 x 2 (= forest size)\n", + "[0] - periodicity: true x false x false\n", + "[0] - number of blocks discarded from the initial grid: 0 (= 0 %)\n", + "[0] - number of levels: 1\n", + "[0] - tree ID digits: 3 (-> block ID bytes = 1)\n", + "[0] - total number of blocks: 4\n", + "[0] - blocks have not yet been distributed to processes\n", + "[0][PROGRESS]------(0.025 sec) Balancing SetupBlockForest: Creating a process distribution for 1 process(es) ...\n", + "[0][PROGRESS]------(0.025 sec) Balancing SetupBlockForest: process distribution to 1 process(es) finished!\n", + "[0] - number of worker processes: 1\n", + "[0] - number of empty buffer processes: 0\n", + "[0] - buffer processes are inserted into the process network: no\n", + "[0] The resulting block structure looks like as follows:\n", + "[0] - AABB: [ <0,0,0>, <40,10,40> ]\n", + "[0] - initial decomposition: 2 x 1 x 2 (= forest size)\n", + "[0] - periodicity: true x false x false\n", + "[0] - number of blocks discarded from the initial grid: 0 (= 0 %)\n", + "[0] - number of levels: 1\n", + "[0] - tree ID digits: 3 (-> block ID bytes = 1)\n", + "[0] - total number of blocks: 4\n", + "[0] - number of processes: 1 (1 worker process(es) / 0 empty buffer process(es))\n", + "[0] - buffer processes are inserted into the process network: no\n", + "[0] - process ID bytes: 0\n", + "[0] - blocks/memory/workload per process:\n", + "[0] + blocks:\n", + "[0] - min = 4\n", + "[0] - max = 4\n", + "[0] - avg = 4\n", + "[0] - stdDev = 0\n", + "[0] - relStdDev = 0\n", + "[0] + memory:\n", + "[0] - min = 4\n", + "[0] - max = 4\n", + "[0] - avg = 4\n", + "[0] - stdDev = 0\n", + "[0] - relStdDev = 0\n", + "[0] + workload:\n", + "[0] - min = 4\n", + "[0] - max = 4\n", + "[0] - avg = 4\n", + "[0] - stdDev = 0\n", + "[0] - relStdDev = 0\n", + "[0][PROGRESS]------(0.025 sec) Adding block data (\"cell bounding box\")\n", + "[0][PROGRESS]------(0.026 sec) Adding block data (\"field\")\n" ] } ], @@ -892,7 +987,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAGoAAAAVCAYAAACuVXuDAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADhUlEQVRoBe2Z7W3bMBCGHaMDGO0G6gZJs0GygeNO0HiDFv1l/yvSDdpOUCQbJBsE9Qb2BnW8gfs+jE5lJUo2bIoS0BxwOvL4dXqPR1LUYLvdDnyezWaZn39J/4tPCjxCPhgOPJrP5x+VPfVUL8luEMhyXxSjnzBDIBWMJc4lPzlFzUPlOHIqOS1Xke4m1/2WfCu+kW5Vrhcrn9tyq/7OlN6E+k1tk9mQ23YwTmpP0Gwkv9OniyhlRkp/lmx0Eg1EAPPapbyH2v5S9pE+xF+Vpq97pTOv2tFJ9TcS34q/qbMf4tr+VSeJTTUvdRROsh0McTS+eXaUJJHAizeSGuHlCkl/LSUA3lmh0sxw8jv7tTb7SPoVX4mJ6J91bVSezKayDRo7Fk5g51Yp26Mm6tyFWHlQy6ucJQ/w4TJdSbEoK5V/FF+orZsVgfI2VZ3YFBOn3Cf4ZjTUg71pn33kfd4wBO6FlOtAgfVLeWrqyqbYOIHhhIi6FD80oSgHEcrBJQxvN7XNyyp72h5tDq7SlU0t4YRvLnHUO/GyDhUNnqmMfcGio1zVnBBaEq3uPs60ujFkcptaxAnfZDgKEEPLlgHGyaNx/7KKDfJNQ1lXRbFtagsnfOMcxewLRoMcxMkpuOR56DY52WY231UpKalNLePESjYiooKUhzJH7rolz7VTuTk5tLyZrrGPoAFHKFPalAAnF0ivhAezzwD14WFv4qaCDzefTpXhigP9SpIPWzY86pfJIqrxsFJuFCmfyqa2ccI3axzFbK+ALAfwohWApX9CL8l3ihFOs+sj0yHPxAvV3ZhSaaK0yJu+BZnEJr1LKzh5eDDZV0M9FuJzr2BXEg/DBclYDhtrSb7JHClNnYn4w7PG3Seie1IZVzsxyA4EFrlFnx3aZDYcjJN1kEs32U90pc5Sxt0Zl6i1pHIOFUSefbxyPcTdHndSA0kMI6o2Yg4POP+L9EyEgpS3T4Hai9Sick1CfdhyjC2MyxisDNwtFidUpZPZpLEdacwoOHn9gdfU/YuSs5Y4LMW/FsbQWGPxKNV4+4zTU5sy2bXEfpY+iEio/LZwJe08OKQQeX2iPtrEQe3vpWy+XHCSqxwqYiOpMViOUn9XNb5GT23CF/jELeUWUbwIp7hdH7fUO5auNbjb147tKGL7PtqEL4pVrvjDy0sLQLw47iGQmPffkPDnEvxOsrgo+AP8ixo954XzTQAAAABJRU5ErkJggg==\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAH4AAAAUCAYAAABLTIm0AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAABJ0AAASdAHeZh94AAAEGUlEQVR4nO2aW4hVVRjHf2M+aGYzYITQBdIc8UGaytAIjcys3gYUfDFNUSSrsUgiL/nvE7o8pKLdsXAshAoGDerFF0E0Lxn2pnmnCKGyMu+UTg9rrZk9e/Y+5+x9Zs526PzhsNjf3mut3/7W9Vv7NHR2dlLX/0+DigaoqxgNTjKa2WbgSeAuSRdqi1RXX8nM7gcOAAslfRy91xCf6s3sAWAfsFTS2hKFzgY+85e9Co48dzuwGngCGAGcBrYBJunPPC9USmY2E3gYaAHuAYYDWyTNLpOvppwpDGV9mpXTzLYCk4Axks4He9JU/zrwN/BBCcA7gHeB82nP+OdGA98D84D9wDrgBLAE2GNmI0rlz6mVwHO4hv+lkgwFccYZyvo0J+ebwEigLWrs0fBm1gxMA76UdCml8gZgE3AG+LDM+7wP3Aq0SWqV9IqkqR54LK6T9bVeBJqBm4FnKsxTBGeXMvg0M6ek/cBhYJGZdbV3fMTPBxqAL0pU3gZMxfW61PXf987pwCngvTiPz/uUmQ0rUVdmSdoh6aikisKVojhjKuvTKjk/B+4EHguGeMNPA64Ce1MqHwe8BayXtLP0u/CIT7dLutaDUjoH7AZuxK0/RapQzgw+rYZzt097N7zvKS3AoaSdvJkNxm08fgKWl3kfcFMPwJGU+0d92lxBWf2pwjgz+rQazu98OiUYoiP+NuAG3C4xSauAe4Gn09b/mBp9ejblfrA3VVBWf6pIziw+zc0p6SxwGTfdAz0bPuwIk0KCibgeuUbSnjKAdVWgAnz6B3BLuIg2fOhxQ6JP++noU9wU82qGikIPbEy5H+x/ZSizP1Rzzpw+rZZzKN1t3OPk7lefxmPBm+heNy6bWVKhG81sI26D8oK3/ejTtLVxjE/T1qxaqQjOPD7NzenDuCbgZLBFR/xp4De6NxFBV4BPUn4H/TO7/HV0ytrh0+nR+NGDDAceAi6SEkHUUEVw5vFpNZxjcWH6D8HQNeIldZrZTmCGmd0t6Zi3XwIWJNGb2Wu4zcnm+PGipONmth0Xez4LvBPNCgwDPopHEGbWDswF5klqT6q3L1UEZx6f5uX0CiFe6Dy9PtJ0ADOAx4FjWV4mRYuBb4ENZvYocAiYiItJjwArEvKE3vxvngrNrBVo9ZcjffqgbyiA3yUtLZozp/JwgussV4GvgiF+gNOBW+vn9AWlpOPABKDdA74EjAbWA5MknUnINh44B3yTs9oW3Eici+vAAKMitpnXCWdm5eE0s0bcQPha0s/BnvR1bhnwBnCfpIPUUGbWhDuvXiPp5VrWnUUDhRPAzJ4HNgCTJe0K9qSvc+twJ0mra8QW1WTgHyD1c/B1ogHBaWZDgWVAR7TRIWHE+wxTcOvG2/U/Ygxc+e8As4B2Saei9/4DBmP8sRNok9wAAAAASUVORK5CYII=", "text/latex": [ "$\\displaystyle \\left( 40, \\ 10, \\ 40\\right)$" ], @@ -922,7 +1017,69 @@ "cell_type": "code", "execution_count": 23, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[0][PROGRESS]------(0.119 sec) Initializing SetupBlockForest:\n", + "[0] - AABB: [ <0,0,0>, <40,40,1> ]\n", + "[0] - forest size (root blocks / blocks on the initial grid): 2 x 4 x 1\n", + "[0] - periodicity: true x true x false\n", + "[0][PROGRESS]------(0.119 sec) Initializing SetupBlockForest: Allocating root blocks ...\n", + "[0][PROGRESS]------(0.119 sec) Initializing SetupBlockForest: Setting up neighborhood information for each block (with respect to periodicity) ...\n", + "[0][PROGRESS]------(0.119 sec) Initializing SetupBlockForest: Assigning workload, memory requirements, and SUIDs to blocks ...\n", + "[0][PROGRESS]------(0.119 sec) Initializing SetupBlockForest: finished!\n", + "[0] The following block structure has been created:\n", + "[0] - AABB: [ <0,0,0>, <40,40,1> ]\n", + "[0] - initial decomposition: 2 x 4 x 1 (= forest size)\n", + "[0] - periodicity: true x true x false\n", + "[0] - number of blocks discarded from the initial grid: 0 (= 0 %)\n", + "[0] - number of levels: 1\n", + "[0] - tree ID digits: 4 (-> block ID bytes = 1)\n", + "[0] - total number of blocks: 8\n", + "[0] - blocks have not yet been distributed to processes\n", + "[0][PROGRESS]------(0.119 sec) Balancing SetupBlockForest: Creating a process distribution for 1 process(es) ...\n", + "[0][PROGRESS]------(0.119 sec) Balancing SetupBlockForest: process distribution to 1 process(es) finished!\n", + "[0] - number of worker processes: 1\n", + "[0] - number of empty buffer processes: 0\n", + "[0] - buffer processes are inserted into the process network: no\n", + "[0] The resulting block structure looks like as follows:\n", + "[0] - AABB: [ <0,0,0>, <40,40,1> ]\n", + "[0] - initial decomposition: 2 x 4 x 1 (= forest size)\n", + "[0] - periodicity: true x true x false\n", + "[0] - number of blocks discarded from the initial grid: 0 (= 0 %)\n", + "[0] - number of levels: 1\n", + "[0] - tree ID digits: 4 (-> block ID bytes = 1)\n", + "[0] - total number of blocks: 8\n", + "[0] - number of processes: 1 (1 worker process(es) / 0 empty buffer process(es))\n", + "[0] - buffer processes are inserted into the process network: no\n", + "[0] - process ID bytes: 0\n", + "[0] - blocks/memory/workload per process:\n", + "[0] + blocks:\n", + "[0] - min = 8\n", + "[0] - max = 8\n", + "[0] - avg = 8\n", + "[0] - stdDev = 0\n", + "[0] - relStdDev = 0\n", + "[0] + memory:\n", + "[0] - min = 8\n", + "[0] - max = 8\n", + "[0] - avg = 8\n", + "[0] - stdDev = 0\n", + "[0] - relStdDev = 0\n", + "[0] + workload:\n", + "[0] - min = 8\n", + "[0] - max = 8\n", + "[0] - avg = 8\n", + "[0] - stdDev = 0\n", + "[0] - relStdDev = 0\n", + "[0][PROGRESS]------(0.119 sec) Adding block data (\"cell bounding box\")\n", + "[0][PROGRESS]------(0.119 sec) Adding block data (\"src\")\n", + "[0][PROGRESS]------(0.120 sec) Adding block data (\"dst\")\n" + ] + } + ], "source": [ "blocks = createUniformBlockGrid(blocks=(2,4,1), cellsPerBlock=(20, 10, 1), \n", " oneBlockPerProcess=False, periodic=(1, 1, 0))\n", @@ -952,14 +1109,12 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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xEEAAAAASJQ4CMfw85//PGbNmhWjRo2Kfv36xfnnnx/3339/HD58uMu67du3xxe+8IXo27dv1NbWxsMPP1ymiSEty5Yti0996lPRt2/fmDhxYrz88svlHgmS0djYGBMmTIgBAwbEkCFDYvr06bFjx44uaw4dOhQNDQ0xaNCg6N+/f8yYMSNaW1vLNDGk6aGHHoqKioqYP39+fp9rE8rj7bffjj/5kz+JQYMGRb9+/eIzn/lMvPrqq/njuVwuFi9eHMOGDYt+/frFlClT4s033yzjxKRGHIRj+NnPfhadnZ3x2GOPxU9+8pNYsmRJLF++PP7iL/4ivyabzcbUqVNj5MiRsXXr1vjOd74T3/jGN+IHP/hBGSeHT74f/ehHsXDhwrj//vvjtddei0svvTTq6+tj//795R4NktDc3BwNDQ2xefPmWL9+fRw5ciSmTp0a7e3t+TULFiyIZ599Np566qlobm6Offv2xU033VTGqSEtr7zySjz22GMxduzYLvtdm3Dq/epXv4orr7wyzjzzzHj++efjpz/9afzt3/5t/N7v/V5+zcMPPxzf+973Yvny5bFly5Y4++yzo76+Pg4dOlTGyUlJRS6Xy5V7CDgdfOc734mmpqZ46623IiKiqakp/vIv/zJaWlqiT58+ERFx7733xtNPPx0/+9nPyjkqfKJNnDgxJkyYEN///vcjIqKzszNqa2tj3rx5ce+995Z5OkjPu+++G0OGDInm5uaYNGlStLW1xbnnnhurVq2KP/qjP4qI//2PbhdffHFs2rQprrjiijJPDJ9s77//flx22WXx6KOPxoMPPhjjxo2LpUuXujahTO699974z//8z/j3f//3Yx7P5XJRU1MTX/3qV+NrX/taRES0tbXF0KFDY+XKlfGlL33pVI5Lotw5CCeora0tBg4cmH+9adOmmDRpUj4MRkTU19fHjh074le/+lU5RoRPvMOHD8fWrVtjypQp+X29evWKKVOmxKZNm8o4GaSrra0tIiL/d+TWrVvjyJEjXa7T0aNHx4gRI1yncAo0NDTEH/zBH3S5BiNcm1Au//qv/xqXX3553HzzzTFkyJD47Gc/G3//93+fP7579+5oaWnpcm1mMpmYOHGia5NTRhyEE7Bz5874u7/7u/jTP/3T/L6WlpYYOnRol3UfvG5paTml80EqfvnLX8bRo0ePee257uDU6+zsjPnz58eVV14ZY8aMiYjI31F/zjnndFnrOoXSW716dbz22mvR2Nj4kWOuTSiPt956K5qamuLCCy+MdevWxV133RV/9md/Fk888URE/OZ7R///lnISB0nKvffeGxUVFcfdfvtHgt9+++24/vrr4+abb47Zs2eXaXIA6HkaGhrijTfeiNWrV5d7FEje3r1748///M/jySefjL59+5Z7HOD/dHZ2xmWXXRbf/va347Of/WzMmTMnZs+eHcuXLy/3aJDXu9wDwKn01a9+NW6//fbjrjnvvPPyv963b19cffXV8fnPf/4jHzRSXV39kU93++B1dXV1cQYGuhg8eHCcccYZx7z2XHdwas2dOzeee+652LhxYwwfPjy/v7q6Og4fPhwHDhzocoeS6xRKa+vWrbF///647LLL8vuOHj0aGzdujO9///uxbt061yaUwbBhw+KSSy7psu/iiy+Of/mXf4mI33zv2NraGsOGDcuvaW1tjXHjxp2yOUmbOwdJyrnnnhujR48+7vbBMwTffvvtmDx5cowfPz5WrFgRvXp1vVzq6upi48aNceTIkfy+9evXx0UXXdTlk6eA4unTp0+MHz8+NmzYkN/X2dkZGzZsiLq6ujJOBunI5XIxd+7cWLNmTbz44osxatSoLsfHjx8fZ555ZpfrdMeOHbFnzx7XKZTQtddeG6+//nps27Ytv11++eVx22235X/t2oRT78orr4wdO3Z02fc///M/MXLkyIiIGDVqVFRXV3e5NrPZbGzZssW1ySnjzkE4hg/C4MiRI+Nv/uZv4t13380f++C/7Nx6663xwAMPxKxZs+Kee+6JN954Ix555JFYsmRJucaGJCxcuDBmzpwZl19+eXzuc5+LpUuXRnt7e9xxxx3lHg2S0NDQEKtWrYpnnnkmBgwYkH8eUiaTiX79+kUmk4lZs2bFwoULY+DAgVFVVRXz5s2Luro6n4YKJTRgwID8sz8/cPbZZ8egQYPy+12bcOotWLAgPv/5z8e3v/3t+OM//uN4+eWX4wc/+EH+J9MqKipi/vz58eCDD8aFF14Yo0aNiq9//etRU1MT06dPL+/wJEMchGNYv3597Ny5M3bu3NnlR6Ui/veOiYj//Sbo3/7t36KhoSHGjx8fgwcPjsWLF8ecOXPKMTIk45Zbbol33303Fi9eHC0tLTFu3LhYu3btRx7iDJRGU1NTRERMnjy5y/4VK1bkH92xZMmS6NWrV8yYMSM6Ojqivr4+Hn300VM8KfDbXJtw6k2YMCHWrFkTixYtim9+85sxatSoWLp0adx22235NXfffXe0t7fHnDlz4sCBA3HVVVfF2rVrPT+UU6Yi90HpAAAAAACS4pmDAAAAAJAocRAAAAAAEiUOAgAAAECixEEAAAAASJQ4CAAAAACJEgcBAAAAIFHiIAAAAAAkShwEAAAAgESJgwAAAACQKHEQAAAAABIlDgIAAABAov4/4ztPmQSEup8AAAAASUVORK5CYII=", "text/plain": [ - "<Figure size 1152x432 with 1 Axes>" + "<Figure size 1600x600 with 1 Axes>" ] }, - "metadata": { - "needs_background": "light" - }, + "metadata": {}, "output_type": "display_data" } ], @@ -999,14 +1154,12 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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cBAAAAAAako4CAAAAAA1JRwEAAAAgJoSDgIAAABATQkHAQAAAKCmBvo9AAD0S9ktU/VFkagvc70jM0unk+s9W72+MT2bat2Yrv5UYuDxbqp3cyr3Gubg/qJybWdRM9X7wPiiyrV7m8n9Eyurz9FppTo/NDhSuXZJs53qnZWZ/ZGZxaneuyefU7l274Elqd6Zfd94LHdcZY7Z5lTunJJZb43p3NrMnicy56D0+S1z7uzheTn79wQAjiSuHAQAAACAmhIOAgAAAEBNpcLBrVu3xhlnnBFLly6NE044Ic4///zYtWvXvJqpqanYtGlTLF++PJYsWRIbN26MvXv3LujQAAAAAMDhS4WDO3bsiE2bNsUdd9wRN998c8zMzMS5554bk5OTczWXX355fOELX4jPfvazsWPHjnjggQfiTW9604IPDgAAAAAcntQHktx4443zvr7uuuvihBNOiJ07d8bZZ58d4+Pj8clPfjK2b98er3nNayIi4tprr41TTz017rjjjnjlK1+5cJMDAAAAAIflsN5zcHx8PCIili1bFhERO3fujJmZmVi/fv1czSmnnBInnXRS3H777Qft0W63Y2JiYt4NAAAAAOi9Qw4Hu91uXHbZZXHWWWfFaaedFhERe/bsiaGhoTj22GPn1a5YsSL27Nlz0D5bt26N0dHRudvY2NihjgQAAAAAJBxyOLhp06b41re+Fddff/1hDbBly5YYHx+fu+3evfuw+gEAAAAA1aTec/AJl1xySXzxi1+M2267LU488cS5+1euXBnT09Oxb9++eVcP7t27N1auXHnQXq1WK1qt1qGMAQAAAAAchtSVg2VZxiWXXBI33HBDfOUrX4k1a9bM+/7atWtjcHAwbrnllrn7du3aFffff3+sW7duYSYGAAAAABZE6srBTZs2xfbt2+Pzn/98LF26dO59BEdHR2PRokUxOjoaF154YWzevDmWLVsWIyMjcemll8a6det8UjEAAAAAHGFS4eC2bdsiIuKcc86Zd/+1114b73znOyMi4sorr4xGoxEbN26MdrsdGzZsiI9//OMLMiwANVSWufqi6M0cERFlt3ptN1EbEdHpJMbI9S5mZqvXtqvPEREx8Fj13p1FzVTvof25fd8Zrr7vh/bl3na53RysXPtoLEn1nulU3y4T7eFU72OHH69cO9ycSfXOmupU34b7phalek9M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", "text/plain": [ - "<Figure size 1152x432 with 1 Axes>" + "<Figure size 1600x600 with 1 Axes>" ] }, - "metadata": { - "needs_background": "light" - }, + "metadata": {}, "output_type": "display_data" } ], @@ -1031,7 +1184,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.7" + "version": "3.11.0rc1" } }, "nbformat": 4, diff --git a/doc/notebooks/06_tutorial_phasefield_dentritic_growth.ipynb b/doc/notebooks/06_tutorial_phasefield_dentritic_growth.ipynb index dcfc7487b..9999bff04 100644 --- a/doc/notebooks/06_tutorial_phasefield_dentritic_growth.ipynb +++ b/doc/notebooks/06_tutorial_phasefield_dentritic_growth.ipynb @@ -602,7 +602,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.9" + "version": "3.9.5" } }, "nbformat": 4, diff --git a/doc/notebooks/demo_wave_equation.ipynb b/doc/notebooks/demo_wave_equation.ipynb index 9a5016e12..70e130c22 100644 --- a/doc/notebooks/demo_wave_equation.ipynb +++ b/doc/notebooks/demo_wave_equation.ipynb @@ -69,15 +69,15 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/latex": [ - "$$\\frac{{{u^{(0)}}_{(0,0)}} - 2 {{u^{(1)}}_{(0,0)}} + {{u^{(2)}}_{(0,0)}}}{dt^{2}} = \\frac{{{u^{(1)}}_{(-1,0)}} + {{u^{(1)}}_{(0,-1)}} - 4 {{u^{(1)}}_{(0,0)}} + {{u^{(1)}}_{(0,1)}} + {{u^{(1)}}_{(1,0)}}}{dx^{2}}$$" + "$\\displaystyle \\frac{{u^{(0)}}_{(0,0)} - 2 {u^{(1)}}_{(0,0)} + {u^{(2)}}_{(0,0)}}{dt^{2}} = \\frac{- 4 {u^{(1)}}_{(0,0)} + {u^{(1)}}_{(1,0)} + {u^{(1)}}_{(0,1)} + {u^{(1)}}_{(0,-1)} + {u^{(1)}}_{(-1,0)}}{dx^{2}}$" ], "text/plain": [ - "u_0_C - 2â‹…u_1_C + u_2_C u_1_W + u_1_S - 4â‹…u_1_C + u_1_N + u_1_E\n", - "─────────────────────── = ───────────────────────────────────────\n", - " 2 2 \n", - " dt dx " + "u_0_C - 2â‹…u_1_C + u_2_C -4â‹…u_1_C + u_1_E + u_1_N + u_1_S + u_1_W\n", + "─────────────────────── = ────────────────────────────────────────\n", + " 2 2 \n", + " dt dx " ] }, "execution_count": 3, @@ -114,22 +114,16 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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\n", "text/latex": [ - "$${{u^{(2)}}_{(0,0)}} \\leftarrow \\frac{{{u^{(1)}}_{(-1,0)}} dt^{2} + {{u^{(1)}}_{(0,-1)}} dt^{2} - 4 {{u^{(1)}}_{(0,0)}} dt^{2} + {{u^{(1)}}_{(0,1)}} dt^{2} + {{u^{(1)}}_{(1,0)}} dt^{2} + dx^{2} \\left(- {{u^{(0)}}_{(0,0)}} + 2 {{u^{(1)}}_{(0,0)}}\\right)}{dx^{2}}$$" + "$\\displaystyle {u^{(2)}}_{(0,0)} \\leftarrow \\frac{- 4 {u^{(1)}}_{(0,0)} dt^{2} + {u^{(1)}}_{(1,0)} dt^{2} + {u^{(1)}}_{(0,1)} dt^{2} + {u^{(1)}}_{(0,-1)} dt^{2} + {u^{(1)}}_{(-1,0)} dt^{2} + dx^{2} \\left(- {u^{(0)}}_{(0,0)} + 2 {u^{(1)}}_{(0,0)}\\right)}{dx^{2}}$" ], "text/plain": [ - " 2 2 2 2 2 2 \n", - " u_1_Wâ‹…dt + u_1_Sâ‹…dt - 4â‹…u_1_Câ‹…dt + u_1_Nâ‹…dt + u_1_Eâ‹…dt + dx â‹…(-u\n", - "u_2_C := ─────────────────────────────────────────────────────────────────────\n", - " 2 \n", - " dx \n", - "\n", - " \n", - "_0_C + 2â‹…u_1_C)\n", - "───────────────\n", - " \n", - " " + " 2 2 2 2 2 2 \n", + " - 4â‹…u_1_Câ‹…dt + u_1_Eâ‹…dt + u_1_Nâ‹…dt + u_1_Sâ‹…dt + u_1_Wâ‹…dt + dx â‹…(-u_0_C + 2â‹…u_1_C)\n", + "u_2_C := ──────────────────────────────────────────────────────────────────────────────────────\n", + " 2 \n", + " dx " ] }, "execution_count": 4, @@ -159,24 +153,29 @@ { "data": { "text/html": [ - "<style>.highlight .hll { background-color: #ffffcc }\n", - ".highlight { background: #f8f8f8; }\n", - ".highlight .c { color: #408080; font-style: italic } /* Comment */\n", + "<style>pre { line-height: 125%; }\n", + "td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }\n", + "span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }\n", + "td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }\n", + "span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }\n", + ".highlight .hll { background-color: #ffffcc }\n", + ".highlight { background: #f8f8f8; }\n", + ".highlight .c { color: #3D7B7B; font-style: italic } /* Comment */\n", ".highlight .err { border: 1px solid #FF0000 } /* Error */\n", ".highlight .k { color: #008000; font-weight: bold } /* Keyword */\n", ".highlight .o { color: #666666 } /* Operator */\n", - ".highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */\n", - ".highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */\n", - ".highlight .cp { color: #BC7A00 } /* Comment.Preproc */\n", - ".highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */\n", - ".highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */\n", - ".highlight .cs { color: #408080; font-style: italic } /* Comment.Special */\n", + ".highlight .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */\n", + ".highlight .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */\n", + ".highlight .cp { color: #9C6500 } /* Comment.Preproc */\n", + ".highlight .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */\n", + ".highlight .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */\n", + ".highlight .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */\n", ".highlight .gd { color: #A00000 } /* Generic.Deleted */\n", ".highlight .ge { font-style: italic } /* Generic.Emph */\n", - ".highlight .gr { color: #FF0000 } /* Generic.Error */\n", + ".highlight .gr { color: #E40000 } /* Generic.Error */\n", ".highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */\n", - ".highlight .gi { color: #00A000 } /* Generic.Inserted */\n", - ".highlight .go { color: #888888 } /* Generic.Output */\n", + ".highlight .gi { color: #008400 } /* Generic.Inserted */\n", + ".highlight .go { color: #717171 } /* Generic.Output */\n", ".highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */\n", ".highlight .gs { font-weight: bold } /* Generic.Strong */\n", ".highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\n", @@ -189,15 +188,15 @@ ".highlight .kt { color: #B00040 } /* Keyword.Type */\n", ".highlight .m { color: #666666 } /* Literal.Number */\n", ".highlight .s { color: #BA2121 } /* Literal.String */\n", - ".highlight .na { color: #7D9029 } /* Name.Attribute */\n", + ".highlight .na { color: #687822 } /* Name.Attribute */\n", ".highlight .nb { color: #008000 } /* Name.Builtin */\n", ".highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */\n", ".highlight .no { color: #880000 } /* Name.Constant */\n", ".highlight .nd { color: #AA22FF } /* Name.Decorator */\n", - ".highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */\n", - ".highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */\n", + ".highlight .ni { color: #717171; font-weight: bold } /* Name.Entity */\n", + ".highlight .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */\n", ".highlight .nf { color: #0000FF } /* Name.Function */\n", - ".highlight .nl { color: #A0A000 } /* Name.Label */\n", + ".highlight .nl { color: #767600 } /* Name.Label */\n", ".highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */\n", ".highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */\n", ".highlight .nv { color: #19177C } /* Name.Variable */\n", @@ -214,11 +213,11 @@ ".highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */\n", ".highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */\n", ".highlight .s2 { color: #BA2121 } /* Literal.String.Double */\n", - ".highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */\n", + ".highlight .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */\n", ".highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */\n", - ".highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */\n", + ".highlight .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */\n", ".highlight .sx { color: #008000 } /* Literal.String.Other */\n", - ".highlight .sr { color: #BB6688 } /* Literal.String.Regex */\n", + ".highlight .sr { color: #A45A77 } /* Literal.String.Regex */\n", ".highlight .s1 { color: #BA2121 } /* Literal.String.Single */\n", ".highlight .ss { color: #19177C } /* Literal.String.Symbol */\n", ".highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */\n", @@ -239,45 +238,43 @@ { "data": { "text/html": [ - "<div class=\"highlight\"><pre><span></span><span class=\"n\">FUNC_PREFIX</span> <span class=\"kt\">void</span> <span class=\"nf\">kernel</span><span class=\"p\">(</span><span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">RESTRICT</span> <span class=\"k\">const</span> <span class=\"n\">_data_u0</span><span class=\"p\">,</span> <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">RESTRICT</span> <span class=\"k\">const</span> <span class=\"n\">_data_u1</span><span class=\"p\">,</span> <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">RESTRICT</span> <span class=\"n\">_data_u2</span><span class=\"p\">)</span>\n", - "<span class=\"p\">{</span>\n", - " <span class=\"k\">for</span> <span class=\"p\">(</span><span class=\"kt\">int</span> <span class=\"n\">ctr_0</span> <span class=\"o\">=</span> <span class=\"mi\">1</span><span class=\"p\">;</span> <span class=\"n\">ctr_0</span> <span class=\"o\"><</span> <span class=\"mi\">59</span><span class=\"p\">;</span> <span class=\"n\">ctr_0</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n", - " <span class=\"p\">{</span>\n", - " <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">RESTRICT</span> <span class=\"n\">_data_u2_00</span> <span class=\"o\">=</span> <span class=\"n\">_data_u2</span> <span class=\"o\">+</span> <span class=\"mi\">70</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"p\">;</span>\n", - " <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">RESTRICT</span> <span class=\"k\">const</span> <span class=\"n\">_data_u1_00</span> <span class=\"o\">=</span> <span class=\"n\">_data_u1</span> <span class=\"o\">+</span> <span class=\"mi\">70</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"p\">;</span>\n", - " <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">RESTRICT</span> <span class=\"k\">const</span> <span class=\"n\">_data_u0_00</span> <span class=\"o\">=</span> <span class=\"n\">_data_u0</span> <span class=\"o\">+</span> <span class=\"mi\">70</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"p\">;</span>\n", - " <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">RESTRICT</span> <span class=\"k\">const</span> <span class=\"n\">_data_u1_01</span> <span class=\"o\">=</span> <span class=\"n\">_data_u1</span> <span class=\"o\">+</span> <span class=\"mi\">70</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span> <span class=\"o\">+</span> <span class=\"mi\">70</span><span class=\"p\">;</span>\n", - " <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">RESTRICT</span> <span class=\"k\">const</span> <span class=\"n\">_data_u1_0m1</span> <span class=\"o\">=</span> <span class=\"n\">_data_u1</span> <span class=\"o\">+</span> <span class=\"mi\">70</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span> <span class=\"o\">-</span> <span class=\"mi\">70</span><span class=\"p\">;</span>\n", - " <span class=\"k\">for</span> <span class=\"p\">(</span><span class=\"kt\">int</span> <span class=\"n\">ctr_1</span> <span class=\"o\">=</span> <span class=\"mi\">1</span><span class=\"p\">;</span> <span class=\"n\">ctr_1</span> <span class=\"o\"><</span> <span class=\"mi\">69</span><span class=\"p\">;</span> <span class=\"n\">ctr_1</span> <span class=\"o\">+=</span> <span class=\"mi\">1</span><span class=\"p\">)</span>\n", - " <span class=\"p\">{</span>\n", - " <span class=\"n\">_data_u2_00</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"mf\">0.25</span><span class=\"o\">*</span><span class=\"n\">_data_u1_00</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"mf\">0.25</span><span class=\"o\">*</span><span class=\"n\">_data_u1_00</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span> <span class=\"o\">-</span> <span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"mf\">0.25</span><span class=\"o\">*</span><span class=\"n\">_data_u1_01</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"mf\">0.25</span><span class=\"o\">*</span><span class=\"n\">_data_u1_0m1</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"mf\">1.0</span><span class=\"o\">*</span><span class=\"n\">_data_u0_00</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"mf\">1.0</span><span class=\"o\">*</span><span class=\"n\">_data_u1_00</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"p\">];</span>\n", - " <span class=\"p\">}</span>\n", - " <span class=\"p\">}</span>\n", - "<span class=\"p\">}</span>\n", + "<div class=\"highlight\"><pre><span></span><span class=\"n\">FUNC_PREFIX</span><span class=\"w\"> </span><span class=\"kt\">void</span><span class=\"w\"> </span><span class=\"n\">kernel</span><span class=\"p\">(</span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_data_u0</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_data_u1</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_u2</span><span class=\"p\">)</span><span class=\"w\"></span>\n", + "<span class=\"p\">{</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\"><</span><span class=\"w\"> </span><span class=\"mi\">59</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_u2_00</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_u2</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">70</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"p\">;</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_u1_01</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_u1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">70</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">70</span><span class=\"p\">;</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_u1_00</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_u1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">70</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"p\">;</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_u1_0m1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_u1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">70</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">70</span><span class=\"p\">;</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_u0_00</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_u0</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">70</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"p\">;</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"k\">for</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\"><</span><span class=\"w\"> </span><span class=\"mi\">69</span><span class=\"p\">;</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+=</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">)</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"n\">_data_u2_00</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mf\">-1.0</span><span class=\"o\">*</span><span class=\"n\">_data_u0_00</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mf\">0.25</span><span class=\"o\">*</span><span class=\"n\">_data_u1_00</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mf\">0.25</span><span class=\"o\">*</span><span class=\"n\">_data_u1_00</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mf\">0.25</span><span class=\"o\">*</span><span class=\"n\">_data_u1_01</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mf\">0.25</span><span class=\"o\">*</span><span class=\"n\">_data_u1_0m1</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mf\">1.0</span><span class=\"o\">*</span><span class=\"n\">_data_u1_00</span><span class=\"p\">[</span><span class=\"n\">ctr_1</span><span class=\"p\">];</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"p\">}</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"p\">}</span><span class=\"w\"></span>\n", + "<span class=\"p\">}</span><span class=\"w\"></span>\n", "</pre></div>\n" ], "text/plain": [ - "\n", - "FUNC_PREFIX void kernel(double * RESTRICT const _data_u0, double * RESTRICT const _data_u1, double * RESTRICT _data_u2)\n", + "FUNC_PREFIX void kernel(double * RESTRICT const _data_u0, double * RESTRICT const _data_u1, double * RESTRICT _data_u2)\n", "{\n", - " for (int ctr_0 = 1; ctr_0 < 59; ctr_0 += 1)\n", + " for (int64_t ctr_0 = 1; ctr_0 < 59; ctr_0 += 1)\n", " {\n", - " double * RESTRICT _data_u2_00 = _data_u2 + 70*ctr_0;\n", - " double * RESTRICT const _data_u1_00 = _data_u1 + 70*ctr_0;\n", - " double * RESTRICT const _data_u0_00 = _data_u0 + 70*ctr_0;\n", - " double * RESTRICT const _data_u1_01 = _data_u1 + 70*ctr_0 + 70;\n", - " double * RESTRICT const _data_u1_0m1 = _data_u1 + 70*ctr_0 - 70;\n", - " for (int ctr_1 = 1; ctr_1 < 69; ctr_1 += 1)\n", + " double * RESTRICT _data_u2_00 = _data_u2 + 70*ctr_0;\n", + " double * RESTRICT _data_u1_01 = _data_u1 + 70*ctr_0 + 70;\n", + " double * RESTRICT _data_u1_00 = _data_u1 + 70*ctr_0;\n", + " double * RESTRICT _data_u1_0m1 = _data_u1 + 70*ctr_0 - 70;\n", + " double * RESTRICT _data_u0_00 = _data_u0 + 70*ctr_0;\n", + " for (int64_t ctr_1 = 1; ctr_1 < 69; ctr_1 += 1)\n", " {\n", - " _data_u2_00[ctr_1] = 0.25*_data_u1_00[ctr_1 + 1] + 0.25*_data_u1_00[ctr_1 - 1] + 0.25*_data_u1_01[ctr_1] + 0.25*_data_u1_0m1[ctr_1] - 1.0*_data_u0_00[ctr_1] + 1.0*_data_u1_00[ctr_1];\n", + " _data_u2_00[ctr_1] = -1.0*_data_u0_00[ctr_1] + 0.25*_data_u1_00[ctr_1 + 1] + 0.25*_data_u1_00[ctr_1 - 1] + 0.25*_data_u1_01[ctr_1] + 0.25*_data_u1_0m1[ctr_1] + 1.0*_data_u1_00[ctr_1];\n", " }\n", " }\n", "}" ] }, - "execution_count": 5, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" } ], "source": [ @@ -316,7 +313,7 @@ { "data": { "text/plain": [ - "{u0, u1, u2}" + "{u0: double[60,70], u1: double[60,70], u2: double[60,70]}" ] }, "execution_count": 7, @@ -384,20 +381,11 @@ "metadata": {}, "outputs": [ { - "data": { - "text/html": [ - "<video controls width=\"80%\">\n", - " <source src=\"data:video/x-m4v;base64,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EI/8wklE2oMP/5QaWApxRqxPY+eISBWbaxEPkbqob7useH4Sg2DAzJjx6Ur33iI/Bj1tYgzftwFylKVSvyun02sfQwtpi8q/eZL0wvDkNGOPi340MzM3+pe1/+EvPlQECLsVgb6w9QVpkpnnYA1zQtyum33wOJSvFmSIrv/aRIUWJoU8Xvrv//wlmAADBwsTi3L/+OMDmKaWXG+vz4NSfgOwAARvC1apkZYw4VPZ39yH/ztBPnjnGOnQfwAENRUpVpUGGBGe1FbEB5IuFVYm793hILyV4Vc8E545vrCnqCVPZRL8oZ4QYIf8JBboeML5CEbA0pF/6/7BcCC421jwlHXhNfsGBtmRjpG0I5/v4fqF/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXwgaf/CQW8MgEFbPCM0rWqrX0PRBNEhxWUAq+pd//hsgAiNAdNK9QDL/94ahcNdd9dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddeAAAAErEGaOBfgFB5Qlh4y2BJ4osB1pJkHFyTIOLkmQcXJME83OSAdcpYCA3UmA5epb+5nqXytcX5MwHeUsR2p5Hkzc2doeyxi43SBYqwhAkfks8fbSZqhF/j5dZObwRvTMuTDWV9xG6cpII2o5muL8mYDrlLG+nw64l4Cu5/o9YqLDGW+HGWSMtWNRiRjw80cv+FuUKssGbxY75ROHssDrlLEkycojAGt61Hv9kAIXm5/6FNO6T/L/9lACVpU9q8/4JXY1iwhlIjz8Gy/NC56sujhu6rHFFwfPPKRxSnyaX6LVWkvSi2WDf78v+zh4SU+IjxgX5gnh/HGZrm4eyzy5OQ6uqtKCGzQhaej4n0gQhaG9o/Wg6JrfPxEo3DLJmuxYD/Usjy3+bD1MvXXYgCkb767z/h8v9+Q868BV6Si7hvK+RYnl+xa8SFDjE5KGayRPnLH/RWU1EU3nzvp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\" type=\"video/mp4\">\n", - " Your browser does not support the video tag.\n", - "</video>" - ], - "text/plain": [ - "<IPython.core.display.HTML object>" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "No ffmpeg installed\n" + ] } ], "source": [ @@ -423,35 +411,40 @@ "source": [ "__Runing on GPU__\n", "\n", - "We can also run the same kernel on the GPU, by using the ``pycuda`` package." + "We can also run the same kernel on the GPU, by using the ``cupy`` package." ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/html": [ - "<style>.highlight .hll { background-color: #ffffcc }\n", - ".highlight { background: #f8f8f8; }\n", - ".highlight .c { color: #408080; font-style: italic } /* Comment */\n", + "<style>pre { line-height: 125%; }\n", + "td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }\n", + "span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }\n", + "td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }\n", + "span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }\n", + ".highlight .hll { background-color: #ffffcc }\n", + ".highlight { background: #f8f8f8; }\n", + ".highlight .c { color: #3D7B7B; font-style: italic } /* Comment */\n", ".highlight .err { border: 1px solid #FF0000 } /* Error */\n", ".highlight .k { color: #008000; font-weight: bold } /* Keyword */\n", ".highlight .o { color: #666666 } /* Operator */\n", - ".highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */\n", - ".highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */\n", - ".highlight .cp { color: #BC7A00 } /* Comment.Preproc */\n", - ".highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */\n", - ".highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */\n", - ".highlight .cs { color: #408080; font-style: italic } /* Comment.Special */\n", + ".highlight .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */\n", + ".highlight .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */\n", + ".highlight .cp { color: #9C6500 } /* Comment.Preproc */\n", + ".highlight .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */\n", + ".highlight .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */\n", + ".highlight .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */\n", ".highlight .gd { color: #A00000 } /* Generic.Deleted */\n", ".highlight .ge { font-style: italic } /* Generic.Emph */\n", - ".highlight .gr { color: #FF0000 } /* Generic.Error */\n", + ".highlight .gr { color: #E40000 } /* Generic.Error */\n", ".highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */\n", - ".highlight .gi { color: #00A000 } /* Generic.Inserted */\n", - ".highlight .go { color: #888888 } /* Generic.Output */\n", + ".highlight .gi { color: #008400 } /* Generic.Inserted */\n", + ".highlight .go { color: #717171 } /* Generic.Output */\n", ".highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */\n", ".highlight .gs { font-weight: bold } /* Generic.Strong */\n", ".highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\n", @@ -464,15 +457,15 @@ ".highlight .kt { color: #B00040 } /* Keyword.Type */\n", ".highlight .m { color: #666666 } /* Literal.Number */\n", ".highlight .s { color: #BA2121 } /* Literal.String */\n", - ".highlight .na { color: #7D9029 } /* Name.Attribute */\n", + ".highlight .na { color: #687822 } /* Name.Attribute */\n", ".highlight .nb { color: #008000 } /* Name.Builtin */\n", ".highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */\n", ".highlight .no { color: #880000 } /* Name.Constant */\n", ".highlight .nd { color: #AA22FF } /* Name.Decorator */\n", - ".highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */\n", - ".highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */\n", + ".highlight .ni { color: #717171; font-weight: bold } /* Name.Entity */\n", + ".highlight .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */\n", ".highlight .nf { color: #0000FF } /* Name.Function */\n", - ".highlight .nl { color: #A0A000 } /* Name.Label */\n", + ".highlight .nl { color: #767600 } /* Name.Label */\n", ".highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */\n", ".highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */\n", ".highlight .nv { color: #19177C } /* Name.Variable */\n", @@ -489,11 +482,11 @@ ".highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */\n", ".highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */\n", ".highlight .s2 { color: #BA2121 } /* Literal.String.Double */\n", - ".highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */\n", + ".highlight .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */\n", ".highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */\n", - ".highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */\n", + ".highlight .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */\n", ".highlight .sx { color: #008000 } /* Literal.String.Other */\n", - ".highlight .sr { color: #BB6688 } /* Literal.String.Regex */\n", + ".highlight .sr { color: #A45A77 } /* Literal.String.Regex */\n", ".highlight .s1 { color: #BA2121 } /* Literal.String.Single */\n", ".highlight .ss { color: #19177C } /* Literal.String.Symbol */\n", ".highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */\n", @@ -514,55 +507,53 @@ { "data": { "text/html": [ - "<div class=\"highlight\"><pre><span></span><span class=\"n\">FUNC_PREFIX</span> <span class=\"nf\">__launch_bounds__</span><span class=\"p\">(</span><span class=\"mi\">256</span><span class=\"p\">)</span> <span class=\"kt\">void</span> <span class=\"n\">kernel</span><span class=\"p\">(</span><span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">RESTRICT</span> <span class=\"k\">const</span> <span class=\"n\">_data_u0</span><span class=\"p\">,</span> <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">RESTRICT</span> <span class=\"k\">const</span> <span class=\"n\">_data_u1</span><span class=\"p\">,</span> <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">RESTRICT</span> <span class=\"n\">_data_u2</span><span class=\"p\">)</span>\n", - "<span class=\"p\">{</span>\n", - " <span class=\"k\">if</span> <span class=\"p\">(</span><span class=\"n\">blockDim</span><span class=\"p\">.</span><span class=\"n\">x</span><span class=\"o\">*</span><span class=\"n\">blockIdx</span><span class=\"p\">.</span><span class=\"n\">x</span> <span class=\"o\">+</span> <span class=\"n\">threadIdx</span><span class=\"p\">.</span><span class=\"n\">x</span> <span class=\"o\">+</span> <span class=\"mi\">1</span> <span class=\"o\"><</span> <span class=\"mi\">59</span> <span class=\"o\">&&</span> <span class=\"n\">blockDim</span><span class=\"p\">.</span><span class=\"n\">y</span><span class=\"o\">*</span><span class=\"n\">blockIdx</span><span class=\"p\">.</span><span class=\"n\">y</span> <span class=\"o\">+</span> <span class=\"n\">threadIdx</span><span class=\"p\">.</span><span class=\"n\">y</span> <span class=\"o\">+</span> <span class=\"mi\">1</span> <span class=\"o\"><</span> <span class=\"mi\">69</span><span class=\"p\">)</span>\n", - " <span class=\"p\">{</span>\n", - " <span class=\"k\">const</span> <span class=\"kt\">int64_t</span> <span class=\"n\">ctr_0</span> <span class=\"o\">=</span> <span class=\"n\">blockDim</span><span class=\"p\">.</span><span class=\"n\">x</span><span class=\"o\">*</span><span class=\"n\">blockIdx</span><span class=\"p\">.</span><span class=\"n\">x</span> <span class=\"o\">+</span> <span class=\"n\">threadIdx</span><span class=\"p\">.</span><span class=\"n\">x</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">;</span>\n", - " <span class=\"k\">const</span> <span class=\"kt\">int64_t</span> <span class=\"n\">ctr_1</span> <span class=\"o\">=</span> <span class=\"n\">blockDim</span><span class=\"p\">.</span><span class=\"n\">y</span><span class=\"o\">*</span><span class=\"n\">blockIdx</span><span class=\"p\">.</span><span class=\"n\">y</span> <span class=\"o\">+</span> <span class=\"n\">threadIdx</span><span class=\"p\">.</span><span class=\"n\">y</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">;</span>\n", - " <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">RESTRICT</span> <span class=\"n\">_data_u2_10</span> <span class=\"o\">=</span> <span class=\"n\">_data_u2</span> <span class=\"o\">+</span> <span class=\"n\">ctr_1</span><span class=\"p\">;</span>\n", - " <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">RESTRICT</span> <span class=\"k\">const</span> <span class=\"n\">_data_u1_10</span> <span class=\"o\">=</span> <span class=\"n\">_data_u1</span> <span class=\"o\">+</span> <span class=\"n\">ctr_1</span><span class=\"p\">;</span>\n", - " <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">RESTRICT</span> <span class=\"k\">const</span> <span class=\"n\">_data_u0_10</span> <span class=\"o\">=</span> <span class=\"n\">_data_u0</span> <span class=\"o\">+</span> <span class=\"n\">ctr_1</span><span class=\"p\">;</span>\n", - " <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">RESTRICT</span> <span class=\"k\">const</span> <span class=\"n\">_data_u1_11</span> <span class=\"o\">=</span> <span class=\"n\">_data_u1</span> <span class=\"o\">+</span> <span class=\"n\">ctr_1</span> <span class=\"o\">+</span> <span class=\"mi\">1</span><span class=\"p\">;</span>\n", - " <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">RESTRICT</span> <span class=\"k\">const</span> <span class=\"n\">_data_u1_1m1</span> <span class=\"o\">=</span> <span class=\"n\">_data_u1</span> <span class=\"o\">+</span> <span class=\"n\">ctr_1</span> <span class=\"o\">-</span> <span class=\"mi\">1</span><span class=\"p\">;</span>\n", - " <span class=\"n\">_data_u2_10</span><span class=\"p\">[</span><span class=\"mi\">70</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"mf\">0.25</span><span class=\"o\">*</span><span class=\"n\">_data_u1_10</span><span class=\"p\">[</span><span class=\"mi\">70</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span> <span class=\"o\">+</span> <span class=\"mi\">70</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"mf\">0.25</span><span class=\"o\">*</span><span class=\"n\">_data_u1_10</span><span class=\"p\">[</span><span class=\"mi\">70</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span> <span class=\"o\">-</span> <span class=\"mi\">70</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"mf\">0.25</span><span class=\"o\">*</span><span class=\"n\">_data_u1_11</span><span class=\"p\">[</span><span class=\"mi\">70</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"mf\">0.25</span><span class=\"o\">*</span><span class=\"n\">_data_u1_1m1</span><span class=\"p\">[</span><span class=\"mi\">70</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"p\">]</span> <span class=\"o\">-</span> <span class=\"mf\">1.0</span><span class=\"o\">*</span><span class=\"n\">_data_u0_10</span><span class=\"p\">[</span><span class=\"mi\">70</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"p\">]</span> <span class=\"o\">+</span> <span class=\"mf\">1.0</span><span class=\"o\">*</span><span class=\"n\">_data_u1_10</span><span class=\"p\">[</span><span class=\"mi\">70</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"p\">];</span>\n", - " <span class=\"p\">}</span> \n", - "<span class=\"p\">}</span>\n", + "<div class=\"highlight\"><pre><span></span><span class=\"n\">FUNC_PREFIX</span><span class=\"w\"> </span><span class=\"nf\">__launch_bounds__</span><span class=\"p\">(</span><span class=\"mi\">256</span><span class=\"p\">)</span><span class=\"w\"> </span><span class=\"kt\">void</span><span class=\"w\"> </span><span class=\"n\">kernel</span><span class=\"p\">(</span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_data_u0</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"n\">_data_u1</span><span class=\"p\">,</span><span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_u2</span><span class=\"p\">)</span><span class=\"w\"></span>\n", + "<span class=\"p\">{</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"k\">if</span><span class=\"w\"> </span><span class=\"p\">(</span><span class=\"n\">blockDim</span><span class=\"p\">.</span><span class=\"n\">x</span><span class=\"o\">*</span><span class=\"n\">blockIdx</span><span class=\"p\">.</span><span class=\"n\">x</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">threadIdx</span><span class=\"p\">.</span><span class=\"n\">x</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"w\"> </span><span class=\"o\"><</span><span class=\"w\"> </span><span class=\"mi\">59</span><span class=\"w\"> </span><span class=\"o\">&&</span><span class=\"w\"> </span><span class=\"n\">blockDim</span><span class=\"p\">.</span><span class=\"n\">y</span><span class=\"o\">*</span><span class=\"n\">blockIdx</span><span class=\"p\">.</span><span class=\"n\">y</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">threadIdx</span><span class=\"p\">.</span><span class=\"n\">y</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"w\"> </span><span class=\"o\"><</span><span class=\"w\"> </span><span class=\"mi\">69</span><span class=\"p\">)</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"p\">{</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">blockDim</span><span class=\"p\">.</span><span class=\"n\">x</span><span class=\"o\">*</span><span class=\"n\">blockIdx</span><span class=\"p\">.</span><span class=\"n\">x</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">threadIdx</span><span class=\"p\">.</span><span class=\"n\">x</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"k\">const</span><span class=\"w\"> </span><span class=\"kt\">int64_t</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">blockDim</span><span class=\"p\">.</span><span class=\"n\">y</span><span class=\"o\">*</span><span class=\"n\">blockIdx</span><span class=\"p\">.</span><span class=\"n\">y</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">threadIdx</span><span class=\"p\">.</span><span class=\"n\">y</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_u2_10</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_u2</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"p\">;</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_u1_10</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_u1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"p\">;</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_u1_11</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_u1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_u1_1m1</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_u1</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">1</span><span class=\"p\">;</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"kt\">double</span><span class=\"w\"> </span><span class=\"o\">*</span><span class=\"w\"> </span><span class=\"n\">RESTRICT</span><span class=\"w\"> </span><span class=\"n\">_data_u0_10</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"n\">_data_u0</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"n\">ctr_1</span><span class=\"p\">;</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"n\">_data_u2_10</span><span class=\"p\">[</span><span class=\"mi\">70</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">=</span><span class=\"w\"> </span><span class=\"mf\">-1.0</span><span class=\"o\">*</span><span class=\"n\">_data_u0_10</span><span class=\"p\">[</span><span class=\"mi\">70</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mf\">0.25</span><span class=\"o\">*</span><span class=\"n\">_data_u1_10</span><span class=\"p\">[</span><span class=\"mi\">70</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mi\">70</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mf\">0.25</span><span class=\"o\">*</span><span class=\"n\">_data_u1_10</span><span class=\"p\">[</span><span class=\"mi\">70</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"w\"> </span><span class=\"o\">-</span><span class=\"w\"> </span><span class=\"mi\">70</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mf\">0.25</span><span class=\"o\">*</span><span class=\"n\">_data_u1_11</span><span class=\"p\">[</span><span class=\"mi\">70</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mf\">0.25</span><span class=\"o\">*</span><span class=\"n\">_data_u1_1m1</span><span class=\"p\">[</span><span class=\"mi\">70</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"p\">]</span><span class=\"w\"> </span><span class=\"o\">+</span><span class=\"w\"> </span><span class=\"mf\">1.0</span><span class=\"o\">*</span><span class=\"n\">_data_u1_10</span><span class=\"p\">[</span><span class=\"mi\">70</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span><span class=\"p\">];</span><span class=\"w\"></span>\n", + "<span class=\"w\"> </span><span class=\"p\">}</span><span class=\"w\"> </span>\n", + "<span class=\"p\">}</span><span class=\"w\"></span>\n", "</pre></div>\n" ], "text/plain": [ - "\n", - "FUNC_PREFIX __launch_bounds__(256) void kernel(double * RESTRICT const _data_u0, double * RESTRICT const _data_u1, double * RESTRICT _data_u2)\n", + "FUNC_PREFIX __launch_bounds__(256) void kernel(double * RESTRICT const _data_u0, double * RESTRICT const _data_u1, double * RESTRICT _data_u2)\n", "{\n", " if (blockDim.x*blockIdx.x + threadIdx.x + 1 < 59 && blockDim.y*blockIdx.y + threadIdx.y + 1 < 69)\n", " {\n", " const int64_t ctr_0 = blockDim.x*blockIdx.x + threadIdx.x + 1;\n", " const int64_t ctr_1 = blockDim.y*blockIdx.y + threadIdx.y + 1;\n", - " double * RESTRICT _data_u2_10 = _data_u2 + ctr_1;\n", - " double * RESTRICT const _data_u1_10 = _data_u1 + ctr_1;\n", - " double * RESTRICT const _data_u0_10 = _data_u0 + ctr_1;\n", - " double * RESTRICT const _data_u1_11 = _data_u1 + ctr_1 + 1;\n", - " double * RESTRICT const _data_u1_1m1 = _data_u1 + ctr_1 - 1;\n", - " _data_u2_10[70*ctr_0] = 0.25*_data_u1_10[70*ctr_0 + 70] + 0.25*_data_u1_10[70*ctr_0 - 70] + 0.25*_data_u1_11[70*ctr_0] + 0.25*_data_u1_1m1[70*ctr_0] - 1.0*_data_u0_10[70*ctr_0] + 1.0*_data_u1_10[70*ctr_0];\n", + " double * RESTRICT _data_u2_10 = _data_u2 + ctr_1;\n", + " double * RESTRICT _data_u1_10 = _data_u1 + ctr_1;\n", + " double * RESTRICT _data_u1_11 = _data_u1 + ctr_1 + 1;\n", + " double * RESTRICT _data_u1_1m1 = _data_u1 + ctr_1 - 1;\n", + " double * RESTRICT _data_u0_10 = _data_u0 + ctr_1;\n", + " _data_u2_10[70*ctr_0] = -1.0*_data_u0_10[70*ctr_0] + 0.25*_data_u1_10[70*ctr_0 + 70] + 0.25*_data_u1_10[70*ctr_0 - 70] + 0.25*_data_u1_11[70*ctr_0] + 0.25*_data_u1_1m1[70*ctr_0] + 1.0*_data_u1_10[70*ctr_0];\n", " } \n", "}" ] }, - "execution_count": 13, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" } ], "source": [ "try:\n", - " import pycuda\n", + " import cupy\n", "except ImportError:\n", - " pycuda=None\n", - " print('No pycuda installed')\n", + " cupy=None\n", + " print('No cupy installed')\n", "\n", "\n", "res = None\n", - "if pycuda:\n", + "if cupy:\n", " gpu_ast = ps.create_kernel(update_rule, target=ps.Target.GPU)\n", " gpu_kernel = gpu_ast.compile()\n", " res = ps.show_code(gpu_ast)\n", @@ -578,16 +569,14 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ - "if pycuda:\n", - " import pycuda.gpuarray as gpuarray\n", - "\n", + "if cupy:\n", " def run_on_gpu(timesteps=1):\n", " # Transfer arrays to GPU\n", - " gpuArrs = [gpuarray.to_gpu(a) for a in u_arrays]\n", + " gpuArrs = [cupy.asarray(cpu_array) for cpu_array in u_arrays]\n", "\n", " for t in range(timesteps):\n", " gpu_kernel(u0=gpuArrs[0], u1=gpuArrs[1], u2=gpuArrs[2])\n", @@ -595,17 +584,17 @@ "\n", " # Transfer arrays to CPU\n", " for gpuArr, cpuArr in zip(gpuArrs, u_arrays):\n", - " gpuArr.get(cpuArr)\n", + " cpuArr[:] = gpuArr.get()\n", "assert np.isfinite(np.max(u_arrays[2])) " ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 14, "metadata": {}, "outputs": [], "source": [ - "if pycuda:\n", + "if cupy:\n", " run_on_gpu(400)" ] } @@ -627,7 +616,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.7" + "version": "3.9.5" } }, "nbformat": 4, diff --git a/doc/sphinx/kernel_compile_and_call.rst b/doc/sphinx/kernel_compile_and_call.rst index 2ceab6123..54342616e 100644 --- a/doc/sphinx/kernel_compile_and_call.rst +++ b/doc/sphinx/kernel_compile_and_call.rst @@ -27,11 +27,11 @@ Code printing GPU Indexing ------------- -.. autoclass:: pystencils.gpucuda.AbstractIndexing +.. autoclass:: pystencils.gpu.AbstractIndexing :members: -.. autoclass:: pystencils.gpucuda.BlockIndexing +.. autoclass:: pystencils.gpu.BlockIndexing :members: -.. autoclass:: pystencils.gpucuda.LineIndexing +.. autoclass:: pystencils.gpu.LineIndexing :members: diff --git a/pystencils/__init__.py b/pystencils/__init__.py index 70ad39e1a..3c3ef8f29 100644 --- a/pystencils/__init__.py +++ b/pystencils/__init__.py @@ -3,8 +3,7 @@ from .enums import Backend, Target from . import fd from . import stencil as stencil from .assignment import Assignment, assignment_from_stencil -from pystencils.typing.typed_sympy import TypedSymbol -from .datahandling import create_data_handling +from .typing.typed_sympy import TypedSymbol from .display_utils import get_code_obj, get_code_str, show_code, to_dot from .field import Field, FieldType, fields from .config import CreateKernelConfig @@ -15,6 +14,7 @@ from .simp import AssignmentCollection from .slicing import make_slice from .spatial_coordinates import x_, x_staggered, x_staggered_vector, x_vector, y_, y_staggered, z_, z_staggered from .sympyextensions import SymbolCreator +from .datahandling import create_data_handling __all__ = ['Field', 'FieldType', 'fields', 'TypedSymbol', @@ -40,3 +40,12 @@ from ._version import get_versions __version__ = get_versions()['version'] del get_versions + +# setting the default GPU to the one with maximal memory. GPU_DEVICE is safe to overwrite for different needs +try: + import cupy + if cupy.cuda.runtime.getDeviceCount() > 0: + GPU_DEVICE = sorted(range(cupy.cuda.runtime.getDeviceCount()), + key=lambda i: cupy.cuda.Device(i).mem_info[1], reverse=True)[0] +except ImportError: + pass diff --git a/pystencils/boundaries/boundaryhandling.py b/pystencils/boundaries/boundaryhandling.py index 2be86510e..0d76da0bb 100644 --- a/pystencils/boundaries/boundaryhandling.py +++ b/pystencils/boundaries/boundaryhandling.py @@ -9,7 +9,7 @@ from pystencils.backends.cbackend import CustomCodeNode from pystencils.boundaries.createindexlist import ( create_boundary_index_array, numpy_data_type_for_boundary_object) from pystencils.typing import TypedSymbol, create_type -from pystencils.datahandling.pycuda import PyCudaArrayHandler +from pystencils.gpu.gpu_array_handler import GPUArrayHandler from pystencils.field import Field from pystencils.typing.typed_sympy import FieldPointerSymbol @@ -100,7 +100,7 @@ class BoundaryHandling: self.flag_interface = fi if fi is not None else FlagInterface(data_handling, name + "Flags") if ParallelDataHandling and isinstance(self.data_handling, ParallelDataHandling): - array_handler = PyCudaArrayHandler() + array_handler = GPUArrayHandler() else: array_handler = self.data_handling.array_handler @@ -116,7 +116,8 @@ class BoundaryHandling: for obj, cpu_arr in cpu_version.items(): if obj not in gpu_version or gpu_version[obj].shape != cpu_arr.shape: - gpu_version[obj] = array_handler.to_gpu(cpu_arr) + gpu_version[obj] = array_handler.empty(cpu_arr.shape, cpu_arr.dtype) + array_handler.upload(gpu_version[obj], cpu_arr) else: array_handler.upload(gpu_version[obj], cpu_arr) diff --git a/pystencils/config.py b/pystencils/config.py index 23570d625..3c03c0d33 100644 --- a/pystencils/config.py +++ b/pystencils/config.py @@ -80,7 +80,7 @@ class CreateKernelConfig: """ gpu_indexing: str = 'block' """ - Either 'block' or 'line' , or custom indexing class, see `pystencils.gpucuda.AbstractIndexing` + Either 'block' or 'line' , or custom indexing class, see `pystencils.gpu.AbstractIndexing` """ gpu_indexing_params: MappingProxyType = field(default_factory=lambda: MappingProxyType({})) """ diff --git a/pystencils/datahandling/blockiteration.py b/pystencils/datahandling/blockiteration.py index bd981dc31..24c428212 100644 --- a/pystencils/datahandling/blockiteration.py +++ b/pystencils/datahandling/blockiteration.py @@ -115,7 +115,7 @@ class ParallelBlock(Block): result = wlb.field.toArray(result, with_ghost_layers=self._gls) result = self._normalize_array_shape(result) elif 'GpuField' in type_name: - result = wlb.cuda.toGpuArray(result, with_ghost_layers=self._gls) + result = wlb.gpu.toGpuArray(result, with_ghost_layers=self._gls) result = self._normalize_array_shape(result) return result diff --git a/pystencils/datahandling/datahandling_interface.py b/pystencils/datahandling/datahandling_interface.py index d6dc7b4ea..d7a49bab0 100644 --- a/pystencils/datahandling/datahandling_interface.py +++ b/pystencils/datahandling/datahandling_interface.py @@ -331,6 +331,7 @@ class DataHandling(ABC): b[array_name][(Ellipsis, *value_idx)].fill(val) else: b[array_name].fill(val) + self.to_gpu(array_name) def min(self, array_name, slice_obj=None, ghost_layers=False, inner_ghost_layers=False, reduce=True): """Returns the minimum value inside the domain or slice of the domain. diff --git a/pystencils/datahandling/parallel_datahandling.py b/pystencils/datahandling/parallel_datahandling.py index 9d1e898d7..d9d91cd6c 100644 --- a/pystencils/datahandling/parallel_datahandling.py +++ b/pystencils/datahandling/parallel_datahandling.py @@ -151,8 +151,8 @@ class ParallelDataHandling(DataHandling): if gpu: if alignment != 0: raise ValueError("Alignment for walberla GPU fields not yet supported") - wlb.cuda.addGpuFieldToStorage(self.blocks, self.GPU_DATA_PREFIX + name, dtype, fSize=values_per_cell, - usePitchedMem=False, ghostLayers=ghost_layers, layout=layout_map[layout]) + wlb.gpu.addGpuFieldToStorage(self.blocks, self.GPU_DATA_PREFIX + name, dtype, fSize=values_per_cell, + usePitchedMem=False, ghostLayers=ghost_layers, layout=layout_map[layout]) if cpu and gpu: self._cpu_gpu_pairs.append((name, self.GPU_DATA_PREFIX + name)) @@ -255,7 +255,7 @@ class ParallelDataHandling(DataHandling): def get_kernel_kwargs(self, kernel_function, **kwargs): if kernel_function.ast.backend == Backend.CUDA: name_map = self._field_name_to_gpu_data_name - to_array = wlb.cuda.toGpuArray + to_array = wlb.gpu.toGpuArray else: name_map = self._field_name_to_cpu_data_name to_array = wlb.field.toArray @@ -280,7 +280,8 @@ class ParallelDataHandling(DataHandling): for block in self.blocks: transfer_func(block[self.GPU_DATA_PREFIX + name], block[name]) else: - wlb.cuda.copyFieldToCpu(self.blocks, self.GPU_DATA_PREFIX + name, name) + if self.is_on_gpu(name): + wlb.gpu.copyFieldToCpu(self.blocks, self.GPU_DATA_PREFIX + name, name) def to_gpu(self, name): if name in self._custom_data_transfer_functions: @@ -288,20 +289,21 @@ class ParallelDataHandling(DataHandling): for block in self.blocks: transfer_func(block[self.GPU_DATA_PREFIX + name], block[name]) else: - wlb.cuda.copyFieldToGpu(self.blocks, self.GPU_DATA_PREFIX + name, name) + if self.is_on_gpu(name): + wlb.gpu.copyFieldToGpu(self.blocks, self.GPU_DATA_PREFIX + name, name) def is_on_gpu(self, name): return (name, self.GPU_DATA_PREFIX + name) in self._cpu_gpu_pairs def all_to_cpu(self): for cpu_name, gpu_name in self._cpu_gpu_pairs: - wlb.cuda.copyFieldToCpu(self.blocks, gpu_name, cpu_name) + wlb.gpu.copyFieldToCpu(self.blocks, gpu_name, cpu_name) for name in self._custom_data_transfer_functions.keys(): self.to_cpu(name) def all_to_gpu(self): for cpu_name, gpu_name in self._cpu_gpu_pairs: - wlb.cuda.copyFieldToGpu(self.blocks, gpu_name, cpu_name) + wlb.gpu.copyFieldToGpu(self.blocks, gpu_name, cpu_name) for name in self._custom_data_transfer_functions.keys(): self.to_gpu(name) @@ -328,7 +330,7 @@ class ParallelDataHandling(DataHandling): create_packing = wlb.field.createStencilRestrictedPackInfo else: assert target == Target.GPU - create_packing = wlb.cuda.createPackInfo if buffered else wlb.cuda.createMPIDatatypeInfo + create_packing = wlb.gpu.createPackInfo if buffered else wlb.gpu.createMPIDatatypeInfo names = [self.GPU_DATA_PREFIX + name for name in names] sync_function = create_scheme(self.blocks, stencil) diff --git a/pystencils/datahandling/pycuda.py b/pystencils/datahandling/pycuda.py deleted file mode 100644 index 1c65a1e9b..000000000 --- a/pystencils/datahandling/pycuda.py +++ /dev/null @@ -1,52 +0,0 @@ -try: - import pycuda.gpuarray as gpuarray -except ImportError: - gpuarray = None -import numpy as np - -import pystencils - - -class PyCudaArrayHandler: - - def __init__(self): - import pycuda.autoinit # NOQA - - def zeros(self, shape, dtype=np.float64, order='C'): - cpu_array = np.zeros(shape=shape, dtype=dtype, order=order) - return self.to_gpu(cpu_array) - - def ones(self, shape, dtype=np.float64, order='C'): - cpu_array = np.ones(shape=shape, dtype=dtype, order=order) - return self.to_gpu(cpu_array) - - def empty(self, shape, dtype=np.float64, layout=None): - if layout: - cpu_array = pystencils.field.create_numpy_array_with_layout(shape=shape, dtype=dtype, layout=layout) - return self.to_gpu(cpu_array) - else: - return gpuarray.empty(shape, dtype) - - @staticmethod - def to_gpu(array): - return gpuarray.to_gpu(array) - - @staticmethod - def upload(array, numpy_array): - array.set(numpy_array) - - @staticmethod - def download(array, numpy_array): - array.get(numpy_array) - - def randn(self, shape, dtype=np.float64): - cpu_array = np.random.randn(*shape).astype(dtype) - return self.to_gpu(cpu_array) - - from_numpy = to_gpu - - -class PyCudaNotAvailableHandler: - def __getattribute__(self, name): - raise NotImplementedError("Unable to initiaize PyCuda! " - "Try to run `import pycuda.autoinit` to check whether PyCuda is working correctly!") diff --git a/pystencils/datahandling/serial_datahandling.py b/pystencils/datahandling/serial_datahandling.py index 319411fef..eb352202d 100644 --- a/pystencils/datahandling/serial_datahandling.py +++ b/pystencils/datahandling/serial_datahandling.py @@ -6,11 +6,10 @@ import numpy as np from pystencils.datahandling.blockiteration import SerialBlock from pystencils.datahandling.datahandling_interface import DataHandling -from pystencils.datahandling.pycuda import PyCudaArrayHandler, PyCudaNotAvailableHandler from pystencils.enums import Target -from pystencils.field import ( - Field, FieldType, create_numpy_array_with_layout, layout_string_to_tuple, - spatial_layout_string_to_tuple) +from pystencils.field import (Field, FieldType, create_numpy_array_with_layout, + layout_string_to_tuple, spatial_layout_string_to_tuple) +from pystencils.gpu.gpu_array_handler import GPUArrayHandler, GPUNotAvailableHandler from pystencils.slicing import normalize_slice, remove_ghost_layers from pystencils.utils import DotDict @@ -48,9 +47,9 @@ class SerialDataHandling(DataHandling): if not array_handler: try: - self.array_handler = PyCudaArrayHandler() + self.array_handler = GPUArrayHandler() except Exception: - self.array_handler = PyCudaNotAvailableHandler() + self.array_handler = GPUNotAvailableHandler() else: self.array_handler = array_handler @@ -126,7 +125,7 @@ class SerialDataHandling(DataHandling): else: layout_tuple = spatial_layout_string_to_tuple(layout, self.dim) - # cpu_arr is always created - since there is no create_pycuda_array_with_layout() + # cpu_arr is always created - since there is no create_gpu_array_with_layout() byte_offset = ghost_layers * np.dtype(dtype).itemsize cpu_arr = create_numpy_array_with_layout(layout=layout_tuple, alignment=alignment, byte_offset=byte_offset, **kwargs) @@ -251,14 +250,16 @@ class SerialDataHandling(DataHandling): transfer_func = self._custom_data_transfer_functions[name][1] transfer_func(self.custom_data_gpu[name], self.custom_data_cpu[name]) else: - self.array_handler.download(self.gpu_arrays[name], self.cpu_arrays[name]) + if name in self.cpu_arrays.keys() & self.gpu_arrays.keys(): + self.array_handler.download(self.gpu_arrays[name], self.cpu_arrays[name]) def to_gpu(self, name): if name in self._custom_data_transfer_functions: transfer_func = self._custom_data_transfer_functions[name][0] transfer_func(self.custom_data_gpu[name], self.custom_data_cpu[name]) else: - self.array_handler.upload(self.gpu_arrays[name], self.cpu_arrays[name]) + if name in self.cpu_arrays.keys() & self.gpu_arrays.keys(): + self.array_handler.upload(self.gpu_arrays[name], self.cpu_arrays[name]) def is_on_gpu(self, name): return name in self.gpu_arrays @@ -313,7 +314,7 @@ class SerialDataHandling(DataHandling): result.append(functor(filtered_stencil, ghost_layers=gls)) else: if functor is None: - from pystencils.gpucuda.periodicity import get_periodic_boundary_functor as functor + from pystencils.gpu.periodicity import get_periodic_boundary_functor as functor target = Target.GPU result.append(functor(filtered_stencil, self._domainSize, index_dimensions=self.fields[name].index_dimensions, @@ -419,13 +420,19 @@ class SerialDataHandling(DataHandling): def world_rank(self): return 0 - def save_all(self, file): - np.savez_compressed(file, **self.cpu_arrays) + def save_all(self, filename, compressed=True, synchronise_data=True): + if synchronise_data: + for name in (self.cpu_arrays.keys() & self.gpu_arrays.keys()): + self.to_cpu(name) + if compressed: + np.savez_compressed(filename, **self.cpu_arrays) + else: + np.savez(filename, **self.cpu_arrays) - def load_all(self, file): - if '.npz' not in file: - file += '.npz' - file_contents = np.load(file) + def load_all(self, filename, synchronise_data=True): + if '.npz' not in filename: + filename += '.npz' + file_contents = np.load(filename) for arr_name, arr_contents in self.cpu_arrays.items(): if arr_name not in file_contents: print(f"Skipping read data {arr_name} because there is no data with this name in data handling") @@ -435,3 +442,6 @@ class SerialDataHandling(DataHandling): f"Read array shape {file_contents[arr_name].shape}, existing array shape {arr_contents.shape}") continue np.copyto(arr_contents, file_contents[arr_name]) + if synchronise_data: + if arr_name in self.gpu_arrays.keys(): + self.to_gpu(arr_name) diff --git a/pystencils/gpu/__init__.py b/pystencils/gpu/__init__.py new file mode 100644 index 000000000..8a3093731 --- /dev/null +++ b/pystencils/gpu/__init__.py @@ -0,0 +1,9 @@ +from pystencils.gpu.gpu_array_handler import GPUArrayHandler, GPUNotAvailableHandler +from pystencils.gpu.cudajit import make_python_function +from pystencils.gpu.kernelcreation import create_cuda_kernel, created_indexed_cuda_kernel + +from .indexing import AbstractIndexing, BlockIndexing, LineIndexing + +__all__ = ['GPUArrayHandler', 'GPUNotAvailableHandler', + 'create_cuda_kernel', 'created_indexed_cuda_kernel', 'make_python_function', + 'AbstractIndexing', 'BlockIndexing', 'LineIndexing'] diff --git a/pystencils/gpucuda/cudajit.py b/pystencils/gpu/cudajit.py similarity index 72% rename from pystencils/gpucuda/cudajit.py rename to pystencils/gpu/cudajit.py index b6fb90175..950445ff2 100644 --- a/pystencils/gpucuda/cudajit.py +++ b/pystencils/gpu/cudajit.py @@ -1,10 +1,11 @@ import numpy as np +import pystencils from pystencils.backends.cbackend import get_headers from pystencils.backends.cuda_backend import generate_cuda from pystencils.typing import StructType from pystencils.field import FieldType -from pystencils.include import get_pycuda_include_path, get_pystencils_include_path +from pystencils.include import get_pystencils_include_path from pystencils.kernel_wrapper import KernelWrapper from pystencils.typing.typed_sympy import FieldPointerSymbol @@ -21,37 +22,41 @@ def get_cubic_interpolation_include_paths(): def make_python_function(kernel_function_node, argument_dict=None, custom_backend=None): """ Creates a kernel function from an abstract syntax tree which - was created e.g. by :func:`pystencils.gpucuda.create_cuda_kernel` - or :func:`pystencils.gpucuda.created_indexed_cuda_kernel` + was created e.g. by :func:`pystencils.gpu.create_cuda_kernel` + or :func:`pystencils.gpu.created_indexed_cuda_kernel` Args: kernel_function_node: the abstract syntax tree argument_dict: parameters passed here are already fixed. Remaining parameters have to be passed to the returned kernel functor. + custom_backend: use own custom printer for code generation Returns: compiled kernel as Python function """ - import pycuda.autoinit # NOQA - from pycuda.compiler import SourceModule + import cupy as cp if argument_dict is None: argument_dict = {} - header_list = ['<cstdint>'] + list(get_headers(kernel_function_node)) + if cp.cuda.runtime.is_hip: + header_list = ['"gpu_defines.h"'] + list(get_headers(kernel_function_node)) + else: + header_list = ['"gpu_defines.h"', '<cstdint>'] + list(get_headers(kernel_function_node)) includes = "\n".join([f"#include {include_file}" for include_file in header_list]) code = includes + "\n" code += "#define FUNC_PREFIX __global__\n" code += "#define RESTRICT __restrict__\n\n" code += str(generate_cuda(kernel_function_node, custom_backend=custom_backend)) + code = 'extern "C" {\n%s\n}\n' % code - nvcc_options = ["-w", "-std=c++11", "-Wno-deprecated-gpu-targets"] + options = ["-w", "-std=c++11"] if USE_FAST_MATH: - nvcc_options.append("-use_fast_math") + options.append("-use_fast_math") + options.append("-I" + get_pystencils_include_path()) - mod = SourceModule(code, options=nvcc_options, include_dirs=[ - get_pystencils_include_path(), get_pycuda_include_path()]) + mod = cp.RawModule(code=code, options=tuple(options), backend="nvrtc", jitify=True) func = mod.get_function(kernel_function_node.function_name) parameters = kernel_function_node.get_parameters() @@ -64,7 +69,8 @@ def make_python_function(kernel_function_node, argument_dict=None, custom_backen for k, v in kwargs.items())) try: args, block_and_thread_numbers = cache[key] - func(*args, **block_and_thread_numbers) + with cp.cuda.Device(pystencils.GPU_DEVICE): + func(block_and_thread_numbers['grid'], block_and_thread_numbers['block'], args) except KeyError: full_arguments = argument_dict.copy() full_arguments.update(kwargs) @@ -75,11 +81,15 @@ def make_python_function(kernel_function_node, argument_dict=None, custom_backen block_and_thread_numbers['block'] = tuple(int(i) for i in block_and_thread_numbers['block']) block_and_thread_numbers['grid'] = tuple(int(i) for i in block_and_thread_numbers['grid']) - args = _build_numpy_argument_list(parameters, full_arguments) + args = tuple(_build_numpy_argument_list(parameters, full_arguments)) cache[key] = (args, block_and_thread_numbers) cache_values.append(kwargs) # keep objects alive such that ids remain unique - func(*args, **block_and_thread_numbers) - # import pycuda.driver as cuda + with cp.cuda.Device(pystencils.GPU_DEVICE): + func(block_and_thread_numbers['grid'], block_and_thread_numbers['block'], args) + # useful for debugging: + # with cp.cuda.Device(pystencils.GPU_DEVICE): + # cp.cuda.runtime.deviceSynchronize() + # cuda.Context.synchronize() # useful for debugging, to get errors right after kernel was called ast = kernel_function_node parameters = kernel_function_node.get_parameters() @@ -98,8 +108,8 @@ def _build_numpy_argument_list(parameters, argument_dict): actual_type = array.dtype expected_type = param.fields[0].dtype.numpy_dtype if expected_type != actual_type: - raise ValueError("Data type mismatch for field '%s'. Expected '%s' got '%s'." % - (param.field_name, expected_type, actual_type)) + raise ValueError(f"Data type mismatch for field {param.field_name}. " + f"Expected {expected_type} got {actual_type}.") result.append(array) elif param.is_field_stride: cast_to_dtype = param.symbol.dtype.numpy_dtype.type @@ -134,22 +144,22 @@ def _check_arguments(parameter_specification, argument_dict): try: field_arr = argument_dict[symbolic_field.name] except KeyError: - raise KeyError("Missing field parameter for kernel call " + str(symbolic_field)) + raise KeyError(f"Missing field parameter for kernel call {str(symbolic_field)}") if symbolic_field.has_fixed_shape: symbolic_field_shape = tuple(int(i) for i in symbolic_field.shape) if isinstance(symbolic_field.dtype, StructType): symbolic_field_shape = symbolic_field_shape[:-1] if symbolic_field_shape != field_arr.shape: - raise ValueError("Passed array '%s' has shape %s which does not match expected shape %s" % - (symbolic_field.name, str(field_arr.shape), str(symbolic_field.shape))) + raise ValueError(f"Passed array {symbolic_field.name} has shape {str(field_arr.shape)} " + f"which does not match expected shape {str(symbolic_field.shape)}") if symbolic_field.has_fixed_shape: symbolic_field_strides = tuple(int(i) * field_arr.dtype.itemsize for i in symbolic_field.strides) if isinstance(symbolic_field.dtype, StructType): symbolic_field_strides = symbolic_field_strides[:-1] if symbolic_field_strides != field_arr.strides: - raise ValueError("Passed array '%s' has strides %s which does not match expected strides %s" % - (symbolic_field.name, str(field_arr.strides), str(symbolic_field_strides))) + raise ValueError(f"Passed array {symbolic_field.name} has strides {str(field_arr.strides)} " + f"which does not match expected strides {str(symbolic_field_strides)}") if FieldType.is_indexed(symbolic_field): index_arr_shapes.add(field_arr.shape[:symbolic_field.spatial_dimensions]) @@ -157,9 +167,9 @@ def _check_arguments(parameter_specification, argument_dict): array_shapes.add(field_arr.shape[:symbolic_field.spatial_dimensions]) if len(array_shapes) > 1: - raise ValueError("All passed arrays have to have the same size " + str(array_shapes)) + raise ValueError(f"All passed arrays have to have the same size {str(array_shapes)}") if len(index_arr_shapes) > 1: - raise ValueError("All passed index arrays have to have the same size " + str(array_shapes)) + raise ValueError(f"All passed index arrays have to have the same size {str(array_shapes)}") if len(index_arr_shapes) > 0: return list(index_arr_shapes)[0] diff --git a/pystencils/gpu/gpu_array_handler.py b/pystencils/gpu/gpu_array_handler.py new file mode 100644 index 000000000..9aa0db386 --- /dev/null +++ b/pystencils/gpu/gpu_array_handler.py @@ -0,0 +1,51 @@ +try: + import cupy as cp +except ImportError: + cp = None + +import numpy as np +import pystencils + + +class GPUArrayHandler: + @staticmethod + def zeros(shape, dtype=np.float64, order='C'): + with cp.cuda.Device(pystencils.GPU_DEVICE): + return cp.zeros(shape=shape, dtype=dtype, order=order) + + @staticmethod + def ones(shape, dtype=np.float64, order='C'): + with cp.cuda.Device(pystencils.GPU_DEVICE): + return cp.ones(shape=shape, dtype=dtype, order=order) + + @staticmethod + def empty(shape, dtype=np.float64, order='C'): + with cp.cuda.Device(pystencils.GPU_DEVICE): + return cp.empty(shape=shape, dtype=dtype, order=order) + + @staticmethod + def to_gpu(numpy_array): + with cp.cuda.Device(pystencils.GPU_DEVICE): + return cp.asarray(numpy_array) + + @staticmethod + def upload(array, numpy_array): + with cp.cuda.Device(pystencils.GPU_DEVICE): + array.set(numpy_array) + + @staticmethod + def download(array, numpy_array): + with cp.cuda.Device(pystencils.GPU_DEVICE): + numpy_array[:] = array.get() + + @staticmethod + def randn(shape, dtype=np.float64): + with cp.cuda.Device(pystencils.GPU_DEVICE): + return cp.random.randn(*shape, dtype=dtype) + + from_numpy = to_gpu + + +class GPUNotAvailableHandler: + def __getattribute__(self, name): + raise NotImplementedError("Unable to utilise cupy! Please make sure cupy works correctly in your setup!") diff --git a/pystencils/gpucuda/indexing.py b/pystencils/gpu/indexing.py similarity index 91% rename from pystencils/gpucuda/indexing.py rename to pystencils/gpu/indexing.py index 423b11583..f2997fdcc 100644 --- a/pystencils/gpucuda/indexing.py +++ b/pystencils/gpu/indexing.py @@ -4,6 +4,7 @@ from functools import partial import sympy as sp from sympy.core.cache import cacheit +import pystencils from pystencils.astnodes import Block, Conditional from pystencils.typing import TypedSymbol, create_type from pystencils.integer_functions import div_ceil, div_floor @@ -33,7 +34,7 @@ GRID_DIM = [ThreadIndexingSymbol("gridDim." + coord, create_type("int32")) for c class AbstractIndexing(abc.ABC): """ Abstract base class for all Indexing classes. An Indexing class defines how a multidimensional - field is mapped to CUDA's block and grid system. It calculates indices based on CUDA's thread and block indices + field is mapped to GPU's block and grid system. It calculates indices based on GPU's thread and block indices and computes the number of blocks and threads a kernel is started with. The Indexing class is created with a pystencils field, a slice to iterate over, and further optional parameters that must have default values. """ @@ -41,12 +42,12 @@ class AbstractIndexing(abc.ABC): @property @abc.abstractmethod def coordinates(self): - """Returns a sequence of coordinate expressions for (x,y,z) depending on symbolic CUDA block and thread indices. + """Returns a sequence of coordinate expressions for (x,y,z) depending on symbolic GPU block and thread indices. These symbolic indices can be obtained with the method `index_variables` """ @property def index_variables(self): - """Sympy symbols for CUDA's block and thread indices, and block and grid dimensions. """ + """Sympy symbols for GPU's block and thread indices, and block and grid dimensions. """ return BLOCK_IDX + THREAD_IDX + BLOCK_DIM + GRID_DIM @abc.abstractmethod @@ -88,14 +89,14 @@ class AbstractIndexing(abc.ABC): class BlockIndexing(AbstractIndexing): - """Generic indexing scheme that maps sub-blocks of an array to CUDA blocks. + """Generic indexing scheme that maps sub-blocks of an array to GPU blocks. Args: field: pystencils field (common to all Indexing classes) iteration_slice: slice that defines rectangular subarea which is iterated over permute_block_size_dependent_on_layout: if True the block_size is permuted such that the fastest coordinate gets the largest amount of threads - compile_time_block_size: compile in concrete block size, otherwise the cuda variable 'blockDim' is used + compile_time_block_size: compile in concrete block size, otherwise the gpu variable 'blockDim' is used """ def __init__(self, field, iteration_slice, @@ -110,13 +111,10 @@ class BlockIndexing(AbstractIndexing): self._block_size = block_size if maximum_block_size == 'auto': # Get device limits - import pycuda.driver as cuda - # noinspection PyUnresolvedReferences - import pycuda.autoinit # NOQA - da = cuda.device_attribute - device = cuda.Context.get_device() - maximum_block_size = tuple(device.get_attribute(a) - for a in (da.MAX_BLOCK_DIM_X, da.MAX_BLOCK_DIM_Y, da.MAX_BLOCK_DIM_Z)) + import cupy as cp + device = cp.cuda.Device(pystencils.GPU_DEVICE) + da = device.attributes + maximum_block_size = tuple(da[f"MaxBlockDim{c}"] for c in ["X", "Y", "Z"]) self._maximum_block_size = maximum_block_size self._iterationSlice = normalize_slice(iteration_slice, field.spatial_shape) @@ -184,17 +182,14 @@ class BlockIndexing(AbstractIndexing): def limit_block_size_by_register_restriction(block_size, required_registers_per_thread, device=None): """Shrinks the block_size if there are too many registers used per multiprocessor. This is not done automatically, since the required_registers_per_thread are not known before compilation. - They can be obtained by ``func.num_regs`` from a pycuda function. + They can be obtained by ``func.num_regs`` from a cupy function. :returns smaller block_size if too many registers are used. """ - import pycuda.driver as cuda - # noinspection PyUnresolvedReferences - import pycuda.autoinit # NOQA + import cupy as cp + device = cp.cuda.Device(pystencils.GPU_DEVICE) + da = device.attributes - da = cuda.device_attribute - if device is None: - device = cuda.Context.get_device() - available_registers_per_mp = device.get_attribute(da.MAX_REGISTERS_PER_MULTIPROCESSOR) + available_registers_per_mp = da.get("MaxRegistersPerMultiprocessor") block = block_size @@ -237,10 +232,10 @@ class BlockIndexing(AbstractIndexing): class LineIndexing(AbstractIndexing): """ - Indexing scheme that assigns the innermost 'line' i.e. the elements which are adjacent in memory to a 1D CUDA block. + Indexing scheme that assigns the innermost 'line' i.e. the elements which are adjacent in memory to a 1D GPU block. The fastest coordinate is indexed with thread_idx.x, the remaining coordinates are mapped to block_idx.{x,y,z} This indexing scheme supports up to 4 spatial dimensions, where the innermost dimensions is not larger than the - maximum amount of threads allowed in a CUDA block (which depends on device). + maximum amount of threads allowed in a GPU block (which depends on device). """ def __init__(self, field, iteration_slice): diff --git a/pystencils/gpucuda/kernelcreation.py b/pystencils/gpu/kernelcreation.py similarity index 98% rename from pystencils/gpucuda/kernelcreation.py rename to pystencils/gpu/kernelcreation.py index 96a531383..78a7355c6 100644 --- a/pystencils/gpucuda/kernelcreation.py +++ b/pystencils/gpu/kernelcreation.py @@ -8,9 +8,9 @@ from pystencils.typing import StructType, TypedSymbol from pystencils.typing.transformations import add_types from pystencils.field import Field, FieldType from pystencils.enums import Target, Backend -from pystencils.gpucuda.cudajit import make_python_function +from pystencils.gpu.cudajit import make_python_function from pystencils.node_collection import NodeCollection -from pystencils.gpucuda.indexing import indexing_creator_from_params +from pystencils.gpu.indexing import indexing_creator_from_params from pystencils.simp.assignment_collection import AssignmentCollection from pystencils.transformations import ( get_base_buffer_index, get_common_field, parse_base_pointer_info, diff --git a/pystencils/gpucuda/periodicity.py b/pystencils/gpu/periodicity.py similarity index 95% rename from pystencils/gpucuda/periodicity.py rename to pystencils/gpu/periodicity.py index 7cad51654..21aa95e56 100644 --- a/pystencils/gpucuda/periodicity.py +++ b/pystencils/gpu/periodicity.py @@ -2,7 +2,7 @@ import numpy as np from itertools import product from pystencils import CreateKernelConfig, create_kernel -import pystencils.gpucuda +from pystencils.gpu import make_python_function from pystencils import Assignment, Field from pystencils.enums import Target from pystencils.slicing import get_periodic_boundary_src_dst_slices, normalize_slice @@ -40,7 +40,7 @@ def get_periodic_boundary_functor(stencil, domain_size, index_dimensions=0, inde for src_slice, dst_slice in src_dst_slice_tuples: ast = create_copy_kernel(domain_size, src_slice, dst_slice, index_dimensions, index_dim_shape, dtype) - kernels.append(pystencils.gpucuda.make_python_function(ast)) + kernels.append(make_python_function(ast)) def functor(pdfs, **_): for kernel in kernels: diff --git a/pystencils/gpucuda/__init__.py b/pystencils/gpucuda/__init__.py deleted file mode 100644 index e7be54527..000000000 --- a/pystencils/gpucuda/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -from pystencils.gpucuda.cudajit import make_python_function -from pystencils.gpucuda.kernelcreation import create_cuda_kernel, created_indexed_cuda_kernel - -from .indexing import AbstractIndexing, BlockIndexing, LineIndexing - -__all__ = ['create_cuda_kernel', 'created_indexed_cuda_kernel', 'make_python_function', - 'AbstractIndexing', 'BlockIndexing', 'LineIndexing'] diff --git a/pystencils/include/__init__.py b/pystencils/include/__init__.py index 8ddff6a4a..6dd3837a1 100644 --- a/pystencils/include/__init__.py +++ b/pystencils/include/__init__.py @@ -1,10 +1,5 @@ -from os.path import dirname, join, realpath +from os.path import dirname, realpath def get_pystencils_include_path(): return dirname(realpath(__file__)) - - -def get_pycuda_include_path(): - import pycuda - return join(dirname(realpath(pycuda.__file__)), 'cuda') diff --git a/pystencils/include/cuda_complex.hpp b/pystencils/include/cuda_complex.hpp deleted file mode 100644 index 535aa52e3..000000000 --- a/pystencils/include/cuda_complex.hpp +++ /dev/null @@ -1,1228 +0,0 @@ -// An implementation of C++ std::complex for use on CUDA devices. -// Written by John C. Travers <jtravs@gmail.com> (2012) -// -// Missing: -// - long double support (not supported on CUDA) -// - some integral pow functions (due to lack of C++11 support on CUDA) -// -// Heavily derived from the LLVM libcpp project (svn revision 147853). -// Based on libcxx/include/complex. -// The git history contains the complete change history from the original. -// The modifications are licensed as per the original LLVM license below. -// -// -*- C++ -*- -//===--------------------------- complex ----------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -extern "C++" { -#ifndef CUDA_COMPLEX_HPP -#define CUDA_COMPLEX_HPP - -#ifdef __CUDACC__ -#define CUDA_CALLABLE_MEMBER __host__ __device__ -#else -#define CUDA_CALLABLE_MEMBER -#endif - -/* - complex synopsis - -template<class T> -class complex -{ -public: - typedef T value_type; - - complex(const T& re = T(), const T& im = T()); - complex(const complex&); - template<class X> complex(const complex<X>&); - - T real() const; - T imag() const; - - void real(T); - void imag(T); - - complex<T>& operator= (const T&); - complex<T>& operator+=(const T&); - complex<T>& operator-=(const T&); - complex<T>& operator*=(const T&); - complex<T>& operator/=(const T&); - - complex& operator=(const complex&); - template<class X> complex<T>& operator= (const complex<X>&); - template<class X> complex<T>& operator+=(const complex<X>&); - template<class X> complex<T>& operator-=(const complex<X>&); - template<class X> complex<T>& operator*=(const complex<X>&); - template<class X> complex<T>& operator/=(const complex<X>&); -}; - -template<> -class complex<float> -{ -public: - typedef float value_type; - - constexpr complex(float re = 0.0f, float im = 0.0f); - explicit constexpr complex(const complex<double>&); - - constexpr float real() const; - void real(float); - constexpr float imag() const; - void imag(float); - - complex<float>& operator= (float); - complex<float>& operator+=(float); - complex<float>& operator-=(float); - complex<float>& operator*=(float); - complex<float>& operator/=(float); - - complex<float>& operator=(const complex<float>&); - template<class X> complex<float>& operator= (const complex<X>&); - template<class X> complex<float>& operator+=(const complex<X>&); - template<class X> complex<float>& operator-=(const complex<X>&); - template<class X> complex<float>& operator*=(const complex<X>&); - template<class X> complex<float>& operator/=(const complex<X>&); -}; - -template<> -class complex<double> -{ -public: - typedef double value_type; - - constexpr complex(double re = 0.0, double im = 0.0); - constexpr complex(const complex<float>&); - - constexpr double real() const; - void real(double); - constexpr double imag() const; - void imag(double); - - complex<double>& operator= (double); - complex<double>& operator+=(double); - complex<double>& operator-=(double); - complex<double>& operator*=(double); - complex<double>& operator/=(double); - complex<double>& operator=(const complex<double>&); - - template<class X> complex<double>& operator= (const complex<X>&); - template<class X> complex<double>& operator+=(const complex<X>&); - template<class X> complex<double>& operator-=(const complex<X>&); - template<class X> complex<double>& operator*=(const complex<X>&); - template<class X> complex<double>& operator/=(const complex<X>&); -}; - -// 26.3.6 operators: -template<class T> complex<T> operator+(const complex<T>&, const complex<T>&); -template<class T> complex<T> operator+(const complex<T>&, const T&); -template<class T> complex<T> operator+(const T&, const complex<T>&); -template<class T> complex<T> operator-(const complex<T>&, const complex<T>&); -template<class T> complex<T> operator-(const complex<T>&, const T&); -template<class T> complex<T> operator-(const T&, const complex<T>&); -template<class T> complex<T> operator*(const complex<T>&, const complex<T>&); -template<class T> complex<T> operator*(const complex<T>&, const T&); -template<class T> complex<T> operator*(const T&, const complex<T>&); -template<class T> complex<T> operator/(const complex<T>&, const complex<T>&); -template<class T> complex<T> operator/(const complex<T>&, const T&); -template<class T> complex<T> operator/(const T&, const complex<T>&); -template<class T> complex<T> operator+(const complex<T>&); -template<class T> complex<T> operator-(const complex<T>&); -template<class T> bool operator==(const complex<T>&, const complex<T>&); -template<class T> bool operator==(const complex<T>&, const T&); -template<class T> bool operator==(const T&, const complex<T>&); -template<class T> bool operator!=(const complex<T>&, const complex<T>&); -template<class T> bool operator!=(const complex<T>&, const T&); -template<class T> bool operator!=(const T&, const complex<T>&); - -template<class T, class charT, class traits> - basic_istream<charT, traits>& - operator>>(basic_istream<charT, traits>&, complex<T>&); -template<class T, class charT, class traits> - basic_ostream<charT, traits>& - operator<<(basic_ostream<charT, traits>&, const complex<T>&); - -// 26.3.7 values: - -template<class T> T real(const complex<T>&); - double real(double); -template<Integral T> double real(T); - float real(float); - -template<class T> T imag(const complex<T>&); - double imag(double); -template<Integral T> double imag(T); - float imag(float); - -template<class T> T abs(const complex<T>&); - -template<class T> T arg(const complex<T>&); - double arg(double); -template<Integral T> double arg(T); - float arg(float); - -template<class T> T norm(const complex<T>&); - double norm(double); -template<Integral T> double norm(T); - float norm(float); - -template<class T> complex<T> conj(const complex<T>&); - complex<double> conj(double); -template<Integral T> complex<double> conj(T); - complex<float> conj(float); - -template<class T> complex<T> proj(const complex<T>&); - complex<double> proj(double); -template<Integral T> complex<double> proj(T); - complex<float> proj(float); - -template<class T> complex<T> polar(const T&, const T& = 0); - -// 26.3.8 transcendentals: -template<class T> complex<T> acos(const complex<T>&); -template<class T> complex<T> asin(const complex<T>&); -template<class T> complex<T> atan(const complex<T>&); -template<class T> complex<T> acosh(const complex<T>&); -template<class T> complex<T> asinh(const complex<T>&); -template<class T> complex<T> atanh(const complex<T>&); -template<class T> complex<T> cos (const complex<T>&); -template<class T> complex<T> cosh (const complex<T>&); -template<class T> complex<T> exp (const complex<T>&); -template<class T> complex<T> log (const complex<T>&); -template<class T> complex<T> log10(const complex<T>&); - -template<class T> complex<T> pow(const complex<T>&, const T&); -template<class T> complex<T> pow(const complex<T>&, const complex<T>&); -template<class T> complex<T> pow(const T&, const complex<T>&); - -template<class T> complex<T> sin (const complex<T>&); -template<class T> complex<T> sinh (const complex<T>&); -template<class T> complex<T> sqrt (const complex<T>&); -template<class T> complex<T> tan (const complex<T>&); -template<class T> complex<T> tanh (const complex<T>&); - -template<class T, class charT, class traits> - basic_istream<charT, traits>& - operator>>(basic_istream<charT, traits>& is, complex<T>& x); - -template<class T, class charT, class traits> - basic_ostream<charT, traits>& - operator<<(basic_ostream<charT, traits>& o, const complex<T>& x); - -*/ - -#include <math.h> -#include <sstream> - -template <class _Tp> class complex; - -template <class _Tp> -complex<_Tp> operator*(const complex<_Tp> &__z, const complex<_Tp> &__w); -template <class _Tp> -complex<_Tp> operator/(const complex<_Tp> &__x, const complex<_Tp> &__y); - -template <class _Tp> class complex { -public: - typedef _Tp value_type; - -private: - value_type __re_; - value_type __im_; - -public: - CUDA_CALLABLE_MEMBER - complex(const value_type &__re = value_type(), - const value_type &__im = value_type()) - : __re_(__re), __im_(__im) {} - template <class _Xp> - CUDA_CALLABLE_MEMBER complex(const complex<_Xp> &__c) - : __re_(__c.real()), __im_(__c.imag()) {} - - CUDA_CALLABLE_MEMBER value_type real() const { return __re_; } - CUDA_CALLABLE_MEMBER value_type imag() const { return __im_; } - - CUDA_CALLABLE_MEMBER void real(value_type __re) { __re_ = __re; } - CUDA_CALLABLE_MEMBER void imag(value_type __im) { __im_ = __im; } - - CUDA_CALLABLE_MEMBER complex &operator=(const value_type &__re) { - __re_ = __re; - __im_ = value_type(); - return *this; - } - CUDA_CALLABLE_MEMBER complex &operator+=(const value_type &__re) { - __re_ += __re; - return *this; - } - CUDA_CALLABLE_MEMBER complex &operator-=(const value_type &__re) { - __re_ -= __re; - return *this; - } - CUDA_CALLABLE_MEMBER complex &operator*=(const value_type &__re) { - __re_ *= __re; - __im_ *= __re; - return *this; - } - CUDA_CALLABLE_MEMBER complex &operator/=(const value_type &__re) { - __re_ /= __re; - __im_ /= __re; - return *this; - } - - template <class _Xp> - CUDA_CALLABLE_MEMBER complex &operator=(const complex<_Xp> &__c) { - __re_ = __c.real(); - __im_ = __c.imag(); - return *this; - } - template <class _Xp> - CUDA_CALLABLE_MEMBER complex &operator+=(const complex<_Xp> &__c) { - __re_ += __c.real(); - __im_ += __c.imag(); - return *this; - } - template <class _Xp> - CUDA_CALLABLE_MEMBER complex &operator-=(const complex<_Xp> &__c) { - __re_ -= __c.real(); - __im_ -= __c.imag(); - return *this; - } - template <class _Xp> - CUDA_CALLABLE_MEMBER complex &operator*=(const complex<_Xp> &__c) { - *this = *this * __c; - return *this; - } - template <class _Xp> - CUDA_CALLABLE_MEMBER complex &operator/=(const complex<_Xp> &__c) { - *this = *this / __c; - return *this; - } -}; - -template <> class complex<double>; - -template <> class complex<float> { - float __re_; - float __im_; - -public: - typedef float value_type; - - /*constexpr*/ CUDA_CALLABLE_MEMBER complex(float __re = 0.0f, - float __im = 0.0f) - : __re_(__re), __im_(__im) {} - explicit /*constexpr*/ complex(const complex<double> &__c); - - /*constexpr*/ CUDA_CALLABLE_MEMBER float real() const { return __re_; } - /*constexpr*/ CUDA_CALLABLE_MEMBER float imag() const { return __im_; } - - CUDA_CALLABLE_MEMBER void real(value_type __re) { __re_ = __re; } - CUDA_CALLABLE_MEMBER void imag(value_type __im) { __im_ = __im; } - - CUDA_CALLABLE_MEMBER complex &operator=(float __re) { - __re_ = __re; - __im_ = value_type(); - return *this; - } - CUDA_CALLABLE_MEMBER complex &operator+=(float __re) { - __re_ += __re; - return *this; - } - CUDA_CALLABLE_MEMBER complex &operator-=(float __re) { - __re_ -= __re; - return *this; - } - CUDA_CALLABLE_MEMBER complex &operator*=(float __re) { - __re_ *= __re; - __im_ *= __re; - return *this; - } - CUDA_CALLABLE_MEMBER complex &operator/=(float __re) { - __re_ /= __re; - __im_ /= __re; - return *this; - } - - template <class _Xp> - CUDA_CALLABLE_MEMBER complex &operator=(const complex<_Xp> &__c) { - __re_ = __c.real(); - __im_ = __c.imag(); - return *this; - } - template <class _Xp> - CUDA_CALLABLE_MEMBER complex &operator+=(const complex<_Xp> &__c) { - __re_ += __c.real(); - __im_ += __c.imag(); - return *this; - } - template <class _Xp> - CUDA_CALLABLE_MEMBER complex &operator-=(const complex<_Xp> &__c) { - __re_ -= __c.real(); - __im_ -= __c.imag(); - return *this; - } - template <class _Xp> - CUDA_CALLABLE_MEMBER complex &operator*=(const complex<_Xp> &__c) { - *this = *this * __c; - return *this; - } - template <class _Xp> - CUDA_CALLABLE_MEMBER complex &operator/=(const complex<_Xp> &__c) { - *this = *this / __c; - return *this; - } -}; - -template <> class complex<double> { - double __re_; - double __im_; - -public: - typedef double value_type; - - /*constexpr*/ CUDA_CALLABLE_MEMBER complex(double __re = 0.0, - double __im = 0.0) - : __re_(__re), __im_(__im) {} - /*constexpr*/ complex(const complex<float> &__c); - - /*constexpr*/ CUDA_CALLABLE_MEMBER double real() const { return __re_; } - /*constexpr*/ CUDA_CALLABLE_MEMBER double imag() const { return __im_; } - - CUDA_CALLABLE_MEMBER void real(value_type __re) { __re_ = __re; } - CUDA_CALLABLE_MEMBER void imag(value_type __im) { __im_ = __im; } - - CUDA_CALLABLE_MEMBER complex &operator=(double __re) { - __re_ = __re; - __im_ = value_type(); - return *this; - } - CUDA_CALLABLE_MEMBER complex &operator+=(double __re) { - __re_ += __re; - return *this; - } - CUDA_CALLABLE_MEMBER complex &operator-=(double __re) { - __re_ -= __re; - return *this; - } - CUDA_CALLABLE_MEMBER complex &operator*=(double __re) { - __re_ *= __re; - __im_ *= __re; - return *this; - } - CUDA_CALLABLE_MEMBER complex &operator/=(double __re) { - __re_ /= __re; - __im_ /= __re; - return *this; - } - - template <class _Xp> - CUDA_CALLABLE_MEMBER complex &operator=(const complex<_Xp> &__c) { - __re_ = __c.real(); - __im_ = __c.imag(); - return *this; - } - template <class _Xp> - CUDA_CALLABLE_MEMBER complex &operator+=(const complex<_Xp> &__c) { - __re_ += __c.real(); - __im_ += __c.imag(); - return *this; - } - template <class _Xp> - CUDA_CALLABLE_MEMBER complex &operator-=(const complex<_Xp> &__c) { - __re_ -= __c.real(); - __im_ -= __c.imag(); - return *this; - } - template <class _Xp> - CUDA_CALLABLE_MEMBER complex &operator*=(const complex<_Xp> &__c) { - *this = *this * __c; - return *this; - } - template <class _Xp> - CUDA_CALLABLE_MEMBER complex &operator/=(const complex<_Xp> &__c) { - *this = *this / __c; - return *this; - } -}; - -// constexpr -inline CUDA_CALLABLE_MEMBER complex<float>::complex(const complex<double> &__c) - : __re_(__c.real()), __im_(__c.imag()) {} - -// constexpr -inline CUDA_CALLABLE_MEMBER complex<double>::complex(const complex<float> &__c) - : __re_(__c.real()), __im_(__c.imag()) {} - -// 26.3.6 operators: - -template <class _Tp> -inline CUDA_CALLABLE_MEMBER complex<_Tp> operator+(const complex<_Tp> &__x, - const complex<_Tp> &__y) { - complex<_Tp> __t(__x); - __t += __y; - return __t; -} - -template <class _Tp> -inline CUDA_CALLABLE_MEMBER complex<_Tp> operator+(const complex<_Tp> &__x, - const _Tp &__y) { - complex<_Tp> __t(__x); - __t += __y; - return __t; -} - -template <class _Tp> -inline CUDA_CALLABLE_MEMBER complex<_Tp> operator+(const _Tp &__x, - const complex<_Tp> &__y) { - complex<_Tp> __t(__y); - __t += __x; - return __t; -} - -template <class _Tp> -inline CUDA_CALLABLE_MEMBER complex<_Tp> operator-(const complex<_Tp> &__x, - const complex<_Tp> &__y) { - complex<_Tp> __t(__x); - __t -= __y; - return __t; -} - -template <class _Tp> -inline CUDA_CALLABLE_MEMBER complex<_Tp> operator-(const complex<_Tp> &__x, - const _Tp &__y) { - complex<_Tp> __t(__x); - __t -= __y; - return __t; -} - -template <class _Tp> -inline CUDA_CALLABLE_MEMBER complex<_Tp> operator-(const _Tp &__x, - const complex<_Tp> &__y) { - complex<_Tp> __t(-__y); - __t += __x; - return __t; -} - -template <class _Tp> -CUDA_CALLABLE_MEMBER complex<_Tp> operator*(const complex<_Tp> &__z, - const complex<_Tp> &__w) { - _Tp __a = __z.real(); - _Tp __b = __z.imag(); - _Tp __c = __w.real(); - _Tp __d = __w.imag(); - _Tp __ac = __a * __c; - _Tp __bd = __b * __d; - _Tp __ad = __a * __d; - _Tp __bc = __b * __c; - _Tp __x = __ac - __bd; - _Tp __y = __ad + __bc; - if (isnan(__x) && isnan(__y)) { - bool __recalc = false; - if (isinf(__a) || isinf(__b)) { - __a = copysign(isinf(__a) ? _Tp(1) : _Tp(0), __a); - __b = copysign(isinf(__b) ? _Tp(1) : _Tp(0), __b); - if (isnan(__c)) - __c = copysign(_Tp(0), __c); - if (isnan(__d)) - __d = copysign(_Tp(0), __d); - __recalc = true; - } - if (isinf(__c) || isinf(__d)) { - __c = copysign(isinf(__c) ? _Tp(1) : _Tp(0), __c); - __d = copysign(isinf(__d) ? _Tp(1) : _Tp(0), __d); - if (isnan(__a)) - __a = copysign(_Tp(0), __a); - if (isnan(__b)) - __b = copysign(_Tp(0), __b); - __recalc = true; - } - if (!__recalc && - (isinf(__ac) || isinf(__bd) || isinf(__ad) || isinf(__bc))) { - if (isnan(__a)) - __a = copysign(_Tp(0), __a); - if (isnan(__b)) - __b = copysign(_Tp(0), __b); - if (isnan(__c)) - __c = copysign(_Tp(0), __c); - if (isnan(__d)) - __d = copysign(_Tp(0), __d); - __recalc = true; - } - if (__recalc) { - __x = _Tp(INFINITY) * (__a * __c - __b * __d); - __y = _Tp(INFINITY) * (__a * __d + __b * __c); - } - } - return complex<_Tp>(__x, __y); -} - -template <class _Tp> -inline CUDA_CALLABLE_MEMBER complex<_Tp> operator*(const complex<_Tp> &__x, - const _Tp &__y) { - complex<_Tp> __t(__x); - __t *= __y; - return __t; -} - -template <class _Tp> -inline CUDA_CALLABLE_MEMBER complex<_Tp> operator*(const _Tp &__x, - const complex<_Tp> &__y) { - complex<_Tp> __t(__y); - __t *= __x; - return __t; -} - -template <class _Tp> -CUDA_CALLABLE_MEMBER complex<_Tp> operator/(const complex<_Tp> &__z, - const complex<_Tp> &__w) { - int __ilogbw = 0; - _Tp __a = __z.real(); - _Tp __b = __z.imag(); - _Tp __c = __w.real(); - _Tp __d = __w.imag(); - _Tp __logbw = logb(fmax(fabs(__c), fabs(__d))); - if (isfinite(__logbw)) { - __ilogbw = static_cast<int>(__logbw); - __c = scalbn(__c, -__ilogbw); - __d = scalbn(__d, -__ilogbw); - } - _Tp __denom = __c * __c + __d * __d; - _Tp __x = scalbn((__a * __c + __b * __d) / __denom, -__ilogbw); - _Tp __y = scalbn((__b * __c - __a * __d) / __denom, -__ilogbw); - if (isnan(__x) && isnan(__y)) { - if ((__denom == _Tp(0)) && (!isnan(__a) || !isnan(__b))) { - __x = copysign(_Tp(INFINITY), __c) * __a; - __y = copysign(_Tp(INFINITY), __c) * __b; - } else if ((isinf(__a) || isinf(__b)) && isfinite(__c) && isfinite(__d)) { - __a = copysign(isinf(__a) ? _Tp(1) : _Tp(0), __a); - __b = copysign(isinf(__b) ? _Tp(1) : _Tp(0), __b); - __x = _Tp(INFINITY) * (__a * __c + __b * __d); - __y = _Tp(INFINITY) * (__b * __c - __a * __d); - } else if (isinf(__logbw) && __logbw > _Tp(0) && isfinite(__a) && - isfinite(__b)) { - __c = copysign(isinf(__c) ? _Tp(1) : _Tp(0), __c); - __d = copysign(isinf(__d) ? _Tp(1) : _Tp(0), __d); - __x = _Tp(0) * (__a * __c + __b * __d); - __y = _Tp(0) * (__b * __c - __a * __d); - } - } - return complex<_Tp>(__x, __y); -} - -template <> -CUDA_CALLABLE_MEMBER complex<float> operator/(const complex<float> &__z, - const complex<float> &__w) { - int __ilogbw = 0; - float __a = __z.real(); - float __b = __z.imag(); - float __c = __w.real(); - float __d = __w.imag(); - float __logbw = logbf(fmaxf(fabsf(__c), fabsf(__d))); - if (isfinite(__logbw)) { - __ilogbw = static_cast<int>(__logbw); - __c = scalbnf(__c, -__ilogbw); - __d = scalbnf(__d, -__ilogbw); - } - float __denom = __c * __c + __d * __d; - float __x = scalbnf((__a * __c + __b * __d) / __denom, -__ilogbw); - float __y = scalbnf((__b * __c - __a * __d) / __denom, -__ilogbw); - if (isnan(__x) && isnan(__y)) { - if ((__denom == float(0)) && (!isnan(__a) || !isnan(__b))) { -#pragma warning(suppress : 4756) // Ignore INFINITY related warning - __x = copysignf(INFINITY, __c) * __a; -#pragma warning(suppress : 4756) // Ignore INFINITY related warning - __y = copysignf(INFINITY, __c) * __b; - } else if ((isinf(__a) || isinf(__b)) && isfinite(__c) && isfinite(__d)) { - __a = copysignf(isinf(__a) ? float(1) : float(0), __a); - __b = copysignf(isinf(__b) ? float(1) : float(0), __b); -#pragma warning(suppress : 4756) // Ignore INFINITY related warning - __x = INFINITY * (__a * __c + __b * __d); -#pragma warning(suppress : 4756) // Ignore INFINITY related warning - __y = INFINITY * (__b * __c - __a * __d); - } else if (isinf(__logbw) && __logbw > float(0) && isfinite(__a) && - isfinite(__b)) { - __c = copysignf(isinf(__c) ? float(1) : float(0), __c); - __d = copysignf(isinf(__d) ? float(1) : float(0), __d); - __x = float(0) * (__a * __c + __b * __d); - __y = float(0) * (__b * __c - __a * __d); - } - } - return complex<float>(__x, __y); -} - -template <class _Tp> -inline CUDA_CALLABLE_MEMBER complex<_Tp> operator/(const complex<_Tp> &__x, - const _Tp &__y) { - return complex<_Tp>(__x.real() / __y, __x.imag() / __y); -} - -template <class _Tp> -inline CUDA_CALLABLE_MEMBER complex<_Tp> operator/(const _Tp &__x, - const complex<_Tp> &__y) { - complex<_Tp> __t(__x); - __t /= __y; - return __t; -} - -template <class _Tp> -inline CUDA_CALLABLE_MEMBER complex<_Tp> operator+(const complex<_Tp> &__x) { - return __x; -} - -template <class _Tp> -inline CUDA_CALLABLE_MEMBER complex<_Tp> operator-(const complex<_Tp> &__x) { - return complex<_Tp>(-__x.real(), -__x.imag()); -} - -template <class _Tp> -inline CUDA_CALLABLE_MEMBER bool operator==(const complex<_Tp> &__x, - const complex<_Tp> &__y) { - return __x.real() == __y.real() && __x.imag() == __y.imag(); -} - -template <class _Tp> -inline CUDA_CALLABLE_MEMBER bool operator==(const complex<_Tp> &__x, - const _Tp &__y) { - return __x.real() == __y && __x.imag() == 0; -} - -template <class _Tp> -inline CUDA_CALLABLE_MEMBER bool operator==(const _Tp &__x, - const complex<_Tp> &__y) { - return __x == __y.real() && 0 == __y.imag(); -} - -template <class _Tp> -inline CUDA_CALLABLE_MEMBER bool operator!=(const complex<_Tp> &__x, - const complex<_Tp> &__y) { - return !(__x == __y); -} - -template <class _Tp> -inline CUDA_CALLABLE_MEMBER bool operator!=(const complex<_Tp> &__x, - const _Tp &__y) { - return !(__x == __y); -} - -template <class _Tp> -inline CUDA_CALLABLE_MEMBER bool operator!=(const _Tp &__x, - const complex<_Tp> &__y) { - return !(__x == __y); -} - -// 26.3.7 values: - -// real - -template <class _Tp> -inline CUDA_CALLABLE_MEMBER _Tp real(const complex<_Tp> &__c) { - return __c.real(); -} - -inline CUDA_CALLABLE_MEMBER double real(double __re) { return __re; } - -inline CUDA_CALLABLE_MEMBER float real(float __re) { return __re; } - -// imag - -template <class _Tp> -inline CUDA_CALLABLE_MEMBER _Tp imag(const complex<_Tp> &__c) { - return __c.imag(); -} - -inline CUDA_CALLABLE_MEMBER double imag(double __re) { return 0; } - -inline CUDA_CALLABLE_MEMBER float imag(float __re) { return 0; } - -// abs - -template <class _Tp> -inline CUDA_CALLABLE_MEMBER _Tp abs(const complex<_Tp> &__c) { - return hypot(__c.real(), __c.imag()); -} - -// arg - -template <class _Tp> -inline CUDA_CALLABLE_MEMBER _Tp arg(const complex<_Tp> &__c) { - return atan2(__c.imag(), __c.real()); -} - -inline CUDA_CALLABLE_MEMBER double arg(double __re) { return atan2(0., __re); } - -inline CUDA_CALLABLE_MEMBER float arg(float __re) { return atan2f(0.F, __re); } - -// norm - -template <class _Tp> -inline CUDA_CALLABLE_MEMBER _Tp norm(const complex<_Tp> &__c) { - if (isinf(__c.real())) - return fabs(__c.real()); - if (isinf(__c.imag())) - return fabs(__c.imag()); - return __c.real() * __c.real() + __c.imag() * __c.imag(); -} - -inline CUDA_CALLABLE_MEMBER double norm(double __re) { return __re * __re; } - -inline CUDA_CALLABLE_MEMBER float norm(float __re) { return __re * __re; } - -// conj - -template <class _Tp> -inline CUDA_CALLABLE_MEMBER complex<_Tp> conj(const complex<_Tp> &__c) { - return complex<_Tp>(__c.real(), -__c.imag()); -} - -inline CUDA_CALLABLE_MEMBER complex<double> conj(double __re) { - return complex<double>(__re); -} - -inline CUDA_CALLABLE_MEMBER complex<float> conj(float __re) { - return complex<float>(__re); -} - -// proj - -template <class _Tp> -inline CUDA_CALLABLE_MEMBER complex<_Tp> proj(const complex<_Tp> &__c) { - complex<_Tp> __r = __c; - if (isinf(__c.real()) || isinf(__c.imag())) - __r = complex<_Tp>(INFINITY, copysign(_Tp(0), __c.imag())); - return __r; -} - -inline CUDA_CALLABLE_MEMBER complex<double> proj(double __re) { - if (isinf(__re)) - __re = fabs(__re); - return complex<double>(__re); -} - -inline CUDA_CALLABLE_MEMBER complex<float> proj(float __re) { - if (isinf(__re)) - __re = fabs(__re); - return complex<float>(__re); -} - -// polar - -template <class _Tp> -CUDA_CALLABLE_MEMBER complex<_Tp> polar(const _Tp &__rho, - const _Tp &__theta = _Tp(0)) { - if (isnan(__rho) || signbit(__rho)) - return complex<_Tp>(_Tp(NAN), _Tp(NAN)); - if (isnan(__theta)) { - if (isinf(__rho)) - return complex<_Tp>(__rho, __theta); - return complex<_Tp>(__theta, __theta); - } - if (isinf(__theta)) { - if (isinf(__rho)) - return complex<_Tp>(__rho, _Tp(NAN)); - return complex<_Tp>(_Tp(NAN), _Tp(NAN)); - } - _Tp __x = __rho * cos(__theta); - if (isnan(__x)) - __x = 0; - _Tp __y = __rho * sin(__theta); - if (isnan(__y)) - __y = 0; - return complex<_Tp>(__x, __y); -} - -// log - -template <class _Tp> -inline CUDA_CALLABLE_MEMBER complex<_Tp> log(const complex<_Tp> &__x) { - return complex<_Tp>(log(abs(__x)), arg(__x)); -} - -// log10 - -template <class _Tp> -inline CUDA_CALLABLE_MEMBER complex<_Tp> log10(const complex<_Tp> &__x) { - return log(__x) / log(_Tp(10)); -} - -// sqrt - -template <class _Tp> -CUDA_CALLABLE_MEMBER complex<_Tp> sqrt(const complex<_Tp> &__x) { - if (isinf(__x.imag())) - return complex<_Tp>(_Tp(INFINITY), __x.imag()); - if (isinf(__x.real())) { - if (__x.real() > _Tp(0)) - return complex<_Tp>(__x.real(), isnan(__x.imag()) - ? __x.imag() - : copysign(_Tp(0), __x.imag())); - return complex<_Tp>(isnan(__x.imag()) ? __x.imag() : _Tp(0), - copysign(__x.real(), __x.imag())); - } - return polar(sqrt(abs(__x)), arg(__x) / _Tp(2)); -} - -// exp - -template <class _Tp> -CUDA_CALLABLE_MEMBER complex<_Tp> exp(const complex<_Tp> &__x) { - _Tp __i = __x.imag(); - if (isinf(__x.real())) { - if (__x.real() < _Tp(0)) { - if (!isfinite(__i)) - __i = _Tp(1); - } else if (__i == 0 || !isfinite(__i)) { - if (isinf(__i)) - __i = _Tp(NAN); - return complex<_Tp>(__x.real(), __i); - } - } else if (isnan(__x.real()) && __x.imag() == 0) - return __x; - _Tp __e = exp(__x.real()); - return complex<_Tp>(__e * cos(__i), __e * sin(__i)); -} - -// pow - -template <class _Tp> -inline CUDA_CALLABLE_MEMBER complex<_Tp> pow(const complex<_Tp> &__x, - const complex<_Tp> &__y) { - return exp(__y * log(__x)); -} - -template <class _Tp> -inline CUDA_CALLABLE_MEMBER complex<_Tp> pow(const complex<_Tp> &__x, - const _Tp &__y) { - return pow(__x, complex<_Tp>(__y)); -} - -template <class _Tp> -inline CUDA_CALLABLE_MEMBER complex<_Tp> pow(const _Tp &__x, - const complex<_Tp> &__y) { - return pow(complex<_Tp>(__x), __y); -} - -// asinh - -template <class _Tp> -CUDA_CALLABLE_MEMBER complex<_Tp> asinh(const complex<_Tp> &__x) { - const _Tp __pi(atan2(+0., -0.)); - if (isinf(__x.real())) { - if (isnan(__x.imag())) - return __x; - if (isinf(__x.imag())) - return complex<_Tp>(__x.real(), copysign(__pi * _Tp(0.25), __x.imag())); - return complex<_Tp>(__x.real(), copysign(_Tp(0), __x.imag())); - } - if (isnan(__x.real())) { - if (isinf(__x.imag())) - return complex<_Tp>(__x.imag(), __x.real()); - if (__x.imag() == 0) - return __x; - return complex<_Tp>(__x.real(), __x.real()); - } - if (isinf(__x.imag())) - return complex<_Tp>(copysign(__x.imag(), __x.real()), - copysign(__pi / _Tp(2), __x.imag())); - complex<_Tp> __z = log(__x + sqrt(pow(__x, _Tp(2)) + _Tp(1))); - return complex<_Tp>(copysign(__z.real(), __x.real()), - copysign(__z.imag(), __x.imag())); -} - -// acosh - -template <class _Tp> -CUDA_CALLABLE_MEMBER complex<_Tp> acosh(const complex<_Tp> &__x) { - const _Tp __pi(atan2(+0., -0.)); - if (isinf(__x.real())) { - if (isnan(__x.imag())) - return complex<_Tp>(fabs(__x.real()), __x.imag()); - if (isinf(__x.imag())) - if (__x.real() > 0) - return complex<_Tp>(__x.real(), copysign(__pi * _Tp(0.25), __x.imag())); - else - return complex<_Tp>(-__x.real(), - copysign(__pi * _Tp(0.75), __x.imag())); - if (__x.real() < 0) - return complex<_Tp>(-__x.real(), copysign(__pi, __x.imag())); - return complex<_Tp>(__x.real(), copysign(_Tp(0), __x.imag())); - } - if (isnan(__x.real())) { - if (isinf(__x.imag())) - return complex<_Tp>(fabs(__x.imag()), __x.real()); - return complex<_Tp>(__x.real(), __x.real()); - } - if (isinf(__x.imag())) - return complex<_Tp>(fabs(__x.imag()), copysign(__pi / _Tp(2), __x.imag())); - complex<_Tp> __z = log(__x + sqrt(pow(__x, _Tp(2)) - _Tp(1))); - return complex<_Tp>(copysign(__z.real(), _Tp(0)), - copysign(__z.imag(), __x.imag())); -} - -// atanh - -template <class _Tp> -CUDA_CALLABLE_MEMBER complex<_Tp> atanh(const complex<_Tp> &__x) { - const _Tp __pi(atan2(+0., -0.)); - if (isinf(__x.imag())) { - return complex<_Tp>(copysign(_Tp(0), __x.real()), - copysign(__pi / _Tp(2), __x.imag())); - } - if (isnan(__x.imag())) { - if (isinf(__x.real()) || __x.real() == 0) - return complex<_Tp>(copysign(_Tp(0), __x.real()), __x.imag()); - return complex<_Tp>(__x.imag(), __x.imag()); - } - if (isnan(__x.real())) { - return complex<_Tp>(__x.real(), __x.real()); - } - if (isinf(__x.real())) { - return complex<_Tp>(copysign(_Tp(0), __x.real()), - copysign(__pi / _Tp(2), __x.imag())); - } - if (fabs(__x.real()) == _Tp(1) && __x.imag() == _Tp(0)) { - return complex<_Tp>(copysign(_Tp(INFINITY), __x.real()), - copysign(_Tp(0), __x.imag())); - } - complex<_Tp> __z = log((_Tp(1) + __x) / (_Tp(1) - __x)) / _Tp(2); - return complex<_Tp>(copysign(__z.real(), __x.real()), - copysign(__z.imag(), __x.imag())); -} - -// sinh - -template <class _Tp> -CUDA_CALLABLE_MEMBER complex<_Tp> sinh(const complex<_Tp> &__x) { - if (isinf(__x.real()) && !isfinite(__x.imag())) - return complex<_Tp>(__x.real(), _Tp(NAN)); - if (__x.real() == 0 && !isfinite(__x.imag())) - return complex<_Tp>(__x.real(), _Tp(NAN)); - if (__x.imag() == 0 && !isfinite(__x.real())) - return __x; - return complex<_Tp>(sinh(__x.real()) * cos(__x.imag()), - cosh(__x.real()) * sin(__x.imag())); -} - -// cosh - -template <class _Tp> -CUDA_CALLABLE_MEMBER complex<_Tp> cosh(const complex<_Tp> &__x) { - if (isinf(__x.real()) && !isfinite(__x.imag())) - return complex<_Tp>(fabs(__x.real()), _Tp(NAN)); - if (__x.real() == 0 && !isfinite(__x.imag())) - return complex<_Tp>(_Tp(NAN), __x.real()); - if (__x.real() == 0 && __x.imag() == 0) - return complex<_Tp>(_Tp(1), __x.imag()); - if (__x.imag() == 0 && !isfinite(__x.real())) - return complex<_Tp>(fabs(__x.real()), __x.imag()); - return complex<_Tp>(cosh(__x.real()) * cos(__x.imag()), - sinh(__x.real()) * sin(__x.imag())); -} - -// tanh - -template <class _Tp> -CUDA_CALLABLE_MEMBER complex<_Tp> tanh(const complex<_Tp> &__x) { - if (isinf(__x.real())) { - if (!isfinite(__x.imag())) - return complex<_Tp>(_Tp(1), _Tp(0)); - return complex<_Tp>(_Tp(1), copysign(_Tp(0), sin(_Tp(2) * __x.imag()))); - } - if (isnan(__x.real()) && __x.imag() == 0) - return __x; - _Tp __2r(_Tp(2) * __x.real()); - _Tp __2i(_Tp(2) * __x.imag()); - _Tp __d(cosh(__2r) + cos(__2i)); - return complex<_Tp>(sinh(__2r) / __d, sin(__2i) / __d); -} - -// asin - -template <class _Tp> -CUDA_CALLABLE_MEMBER complex<_Tp> asin(const complex<_Tp> &__x) { - complex<_Tp> __z = asinh(complex<_Tp>(-__x.imag(), __x.real())); - return complex<_Tp>(__z.imag(), -__z.real()); -} - -// acos - -template <class _Tp> -CUDA_CALLABLE_MEMBER complex<_Tp> acos(const complex<_Tp> &__x) { - const _Tp __pi(atan2(+0., -0.)); - if (isinf(__x.real())) { - if (isnan(__x.imag())) - return complex<_Tp>(__x.imag(), __x.real()); - if (isinf(__x.imag())) { - if (__x.real() < _Tp(0)) - return complex<_Tp>(_Tp(0.75) * __pi, -__x.imag()); - return complex<_Tp>(_Tp(0.25) * __pi, -__x.imag()); - } - if (__x.real() < _Tp(0)) - return complex<_Tp>(__pi, signbit(__x.imag()) ? -__x.real() : __x.real()); - return complex<_Tp>(_Tp(0), signbit(__x.imag()) ? __x.real() : -__x.real()); - } - if (isnan(__x.real())) { - if (isinf(__x.imag())) - return complex<_Tp>(__x.real(), -__x.imag()); - return complex<_Tp>(__x.real(), __x.real()); - } - if (isinf(__x.imag())) - return complex<_Tp>(__pi / _Tp(2), -__x.imag()); - if (__x.real() == 0) - return complex<_Tp>(__pi / _Tp(2), -__x.imag()); - complex<_Tp> __z = log(__x + sqrt(pow(__x, _Tp(2)) - _Tp(1))); - if (signbit(__x.imag())) - return complex<_Tp>(fabs(__z.imag()), fabs(__z.real())); - return complex<_Tp>(fabs(__z.imag()), -fabs(__z.real())); -} - -// atan - -template <class _Tp> -CUDA_CALLABLE_MEMBER complex<_Tp> atan(const complex<_Tp> &__x) { - complex<_Tp> __z = atanh(complex<_Tp>(-__x.imag(), __x.real())); - return complex<_Tp>(__z.imag(), -__z.real()); -} - -// sin - -template <class _Tp> -CUDA_CALLABLE_MEMBER complex<_Tp> sin(const complex<_Tp> &__x) { - complex<_Tp> __z = sinh(complex<_Tp>(-__x.imag(), __x.real())); - return complex<_Tp>(__z.imag(), -__z.real()); -} - -// cos - -template <class _Tp> -inline CUDA_CALLABLE_MEMBER complex<_Tp> cos(const complex<_Tp> &__x) { - return cosh(complex<_Tp>(-__x.imag(), __x.real())); -} - -// tan - -template <class _Tp> -CUDA_CALLABLE_MEMBER complex<_Tp> tan(const complex<_Tp> &__x) { - complex<_Tp> __z = tanh(complex<_Tp>(-__x.imag(), __x.real())); - return complex<_Tp>(__z.imag(), -__z.real()); -} - -template <class _Tp, class _CharT, class _Traits> -std::basic_istream<_CharT, _Traits> & -operator>>(std::basic_istream<_CharT, _Traits> &__is, complex<_Tp> &__x) { - if (__is.good()) { - ws(__is); - if (__is.peek() == _CharT('(')) { - __is.get(); - _Tp __r; - __is >> __r; - if (!__is.fail()) { - ws(__is); - _CharT __c = __is.peek(); - if (__c == _CharT(',')) { - __is.get(); - _Tp __i; - __is >> __i; - if (!__is.fail()) { - ws(__is); - __c = __is.peek(); - if (__c == _CharT(')')) { - __is.get(); - __x = complex<_Tp>(__r, __i); - } else - __is.setstate(std::ios_base::failbit); - } else - __is.setstate(std::ios_base::failbit); - } else if (__c == _CharT(')')) { - __is.get(); - __x = complex<_Tp>(__r, _Tp(0)); - } else - __is.setstate(std::ios_base::failbit); - } else - __is.setstate(std::ios_base::failbit); - } else { - _Tp __r; - __is >> __r; - if (!__is.fail()) - __x = complex<_Tp>(__r, _Tp(0)); - else - __is.setstate(std::ios_base::failbit); - } - } else - __is.setstate(std::ios_base::failbit); - return __is; -} - -template <class _Tp, class _CharT, class _Traits> -std::basic_ostream<_CharT, _Traits> & -operator<<(std::basic_ostream<_CharT, _Traits> &__os, const complex<_Tp> &__x) { - std::basic_ostringstream<_CharT, _Traits> __s; - __s.flags(__os.flags()); - __s.imbue(__os.getloc()); - __s.precision(__os.precision()); - __s << '(' << __x.real() << ',' << __x.imag() << ')'; - return __os << __s.str(); -} - -//} // close namespace cuda_complex - -template <class U, class V> -CUDA_CALLABLE_MEMBER auto operator*(const complex<U> &complexNumber, - const V &scalar) -> complex<U> { - return complex<U>(real(complexNumber) * scalar, imag(complexNumber) * scalar); -} - -template <class U, class V> -CUDA_CALLABLE_MEMBER auto operator*(const V &scalar, - const complex<U> &complexNumber) - -> complex<U> { - return complex<U>(real(complexNumber) * scalar, imag(complexNumber) * scalar); -} - -template <class U, class V> -CUDA_CALLABLE_MEMBER auto operator+(const complex<U> &complexNumber, - const V &scalar) -> complex<U> { - return complex<U>(real(complexNumber) + scalar, imag(complexNumber)); -} - -template <class U, class V> -CUDA_CALLABLE_MEMBER auto operator+(const V &scalar, - const complex<U> &complexNumber) - -> complex<U> { - return complex<U>(real(complexNumber) + scalar, imag(complexNumber)); -} - -template <class U, class V> -CUDA_CALLABLE_MEMBER auto operator-(const complex<U> &complexNumber, - const V &scalar) -> complex<U> { - return complex<U>(real(complexNumber) - scalar, imag(complexNumber)); -} - -template <class U, class V> -CUDA_CALLABLE_MEMBER auto operator-(const V &scalar, - const complex<U> &complexNumber) - -> complex<U> { - return complex<U>(scalar - real(complexNumber), imag(complexNumber)); -} - -template <class U, class V> -CUDA_CALLABLE_MEMBER auto operator/(const complex<U> &complexNumber, - const V scalar) -> complex<U> { - return complex<U>(real(complexNumber) / scalar, imag(complexNumber) / scalar); -} - -template <class U, class V> -CUDA_CALLABLE_MEMBER auto operator/(const V scalar, - const complex<U> &complexNumber) - -> complex<U> { - return complex<U>(scalar, 0) / complexNumber; -} - -using ComplexDouble = complex<double>; -using ComplexFloat = complex<float>; -#endif // CUDA_COMPLEX_HPP -} diff --git a/pystencils/include/gpu_defines.h b/pystencils/include/gpu_defines.h new file mode 100644 index 000000000..2d9875db2 --- /dev/null +++ b/pystencils/include/gpu_defines.h @@ -0,0 +1,5 @@ +#pragma once + +#define POS_INFINITY __int_as_float(0x7f800000) +#define INFINITY POS_INFINITY +#define NEG_INFINITY __int_as_float(0xff800000) diff --git a/pystencils/include/opencl_stdint.h b/pystencils/include/opencl_stdint.h deleted file mode 100644 index 98191faa5..000000000 --- a/pystencils/include/opencl_stdint.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef OPENCL_STDINT -#define OPENCL_STDINT - -typedef unsigned int uint_t; - -typedef signed char int8_t; -typedef signed short int16_t; -typedef signed int int32_t; -typedef signed long int int64_t; -typedef unsigned char uint8_t; -typedef unsigned short uint16_t; -typedef unsigned int uint32_t; -typedef unsigned long int uint64_t; - -#endif diff --git a/pystencils/kernelcreation.py b/pystencils/kernelcreation.py index 4b02ca13d..6e13bcfbd 100644 --- a/pystencils/kernelcreation.py +++ b/pystencils/kernelcreation.py @@ -159,7 +159,7 @@ def create_domain_kernel(assignments: NodeCollection, *, config: CreateKernelCon raise ValueError("Invalid value for cpu_vectorize_info") elif config.target == Target.GPU: if config.backend == Backend.CUDA: - from pystencils.gpucuda import create_cuda_kernel + from pystencils.gpu import create_cuda_kernel ast = create_cuda_kernel(assignments, config=config) if not ast: @@ -241,7 +241,7 @@ def create_indexed_kernel(assignments: NodeCollection, *, config: CreateKernelCo add_openmp(ast, num_threads=config.cpu_openmp) elif config.target == Target.GPU: if config.backend == Backend.CUDA: - from pystencils.gpucuda import created_indexed_cuda_kernel + from pystencils.gpu import created_indexed_cuda_kernel ast = created_indexed_cuda_kernel(assignments, config=config) if not ast: diff --git a/pystencils_tests/test_boundary.py b/pystencils_tests/test_boundary.py index 4dc6439a0..a94d37820 100644 --- a/pystencils_tests/test_boundary.py +++ b/pystencils_tests/test_boundary.py @@ -97,7 +97,7 @@ def test_kernel_vs_copy_boundary(): def test_boundary_gpu(): - pytest.importorskip('pycuda') + pytest.importorskip('cupy') dh = SerialDataHandling(domain_size=(7, 7), default_target=Target.GPU) src = dh.add_array('src') dh.fill("src", 0.0, ghost_layers=True) diff --git a/pystencils_tests/test_buffer_gpu.py b/pystencils_tests/test_buffer_gpu.py index ae0a15487..d2ec6808e 100644 --- a/pystencils_tests/test_buffer_gpu.py +++ b/pystencils_tests/test_buffer_gpu.py @@ -14,8 +14,7 @@ from pystencils.stencil import direction_string_to_offset try: # noinspection PyUnresolvedReferences - import pycuda.autoinit - import pycuda.gpuarray as gpuarray + import cupy as cp except ImportError: pass @@ -24,7 +23,7 @@ FIELD_SIZES = [(4, 3), (9, 3, 7)] def _generate_fields(dt=np.uint8, stencil_directions=1, layout='numpy'): - pytest.importorskip('pycuda') + pytest.importorskip('cupy') field_sizes = FIELD_SIZES if stencil_directions > 1: field_sizes = [s + (stencil_directions,) for s in field_sizes] @@ -39,10 +38,10 @@ def _generate_fields(dt=np.uint8, stencil_directions=1, layout='numpy'): src_arr.flat = add_ghost_layers(array_data, index_dimensions=1 if stencil_directions > 1 else 0).astype(dt).flat - gpu_src_arr = gpuarray.to_gpu(src_arr) - gpu_dst_arr = gpuarray.empty_like(gpu_src_arr) + gpu_src_arr = cp.asarray(src_arr) + gpu_dst_arr = cp.zeros_like(gpu_src_arr) size = int(np.prod(src_arr.shape)) - gpu_buffer_arr = gpuarray.zeros(size, dtype=dt) + gpu_buffer_arr = cp.zeros(size, dtype=dt) fields.append((src_arr, gpu_src_arr, gpu_dst_arr, gpu_buffer_arr)) return fields @@ -163,7 +162,7 @@ def test_all_cell_values(): def test_subset_cell_values(): - """Tests (un)packing a subset of cell values of the a field (from)to a buffer.""" + """Tests (un)packing a subset of cell values of a field (from)to a buffer.""" num_cell_values = 7 # Cell indices of the field to be (un)packed (from)to the buffer cell_indices = [1, 3, 5, 6] @@ -300,7 +299,7 @@ def test_iteration_slices(): # Fill the entire array with data src_arr[(slice(None, None, 1),) * dim] = np.arange(num_cell_values) - gpu_src_arr[(slice(None, None, 1),) * dim] = src_arr + gpu_src_arr.set(src_arr) gpu_dst_arr.fill(0) config = CreateKernelConfig(target=Target.GPU, iteration_slice=pack_slice, diff --git a/pystencils_tests/test_custom_backends.py b/pystencils_tests/test_custom_backends.py index 3d0088796..645fbae86 100644 --- a/pystencils_tests/test_custom_backends.py +++ b/pystencils_tests/test_custom_backends.py @@ -36,9 +36,9 @@ def test_custom_backends_cpu(): def test_custom_backends_gpu(): - pytest.importorskip('pycuda') - import pycuda.driver - import pystencils.gpucuda.cudajit + pytest.importorskip('cupy') + import cupy + import pystencils.gpu.cudajit z, x, y = pystencils.fields("z, y, x: [2d]") @@ -47,5 +47,5 @@ def test_custom_backends_gpu(): ast = pystencils.create_kernel(normal_assignments, target=Target.GPU) pystencils.show_code(ast, ScreamingGpuBackend()) - with pytest.raises(pycuda.driver.CompileError): - pystencils.gpucuda.cudajit.make_python_function(ast, custom_backend=ScreamingGpuBackend()) + with pytest.raises(cupy.cuda.compiler.JitifyException): + pystencils.gpu.cudajit.make_python_function(ast, custom_backend=ScreamingGpuBackend()) diff --git a/pystencils_tests/test_datahandling.py b/pystencils_tests/test_datahandling.py index afd5f70da..0f48ac2ca 100644 --- a/pystencils_tests/test_datahandling.py +++ b/pystencils_tests/test_datahandling.py @@ -6,7 +6,7 @@ import numpy as np import pystencils as ps from pystencils import create_data_handling, create_kernel -from pystencils.datahandling.pycuda import PyCudaArrayHandler +from pystencils.gpu.gpu_array_handler import GPUArrayHandler from pystencils.enums import Target try: @@ -85,11 +85,7 @@ def access_and_gather(dh, domain_size): def synchronization(dh, test_gpu=False): field_name = 'comm_field_test' if test_gpu: - try: - from pycuda import driver - import pycuda.autoinit - except ImportError: - return + pytest.importorskip("cupy") field_name += 'Gpu' dh.add_array(field_name, ghost_layers=1, dtype=np.int8, cpu=True, gpu=test_gpu) @@ -215,7 +211,7 @@ def test_kernel(): reduction(dh) try: - import pycuda + import cupy dh = create_data_handling(domain_size=domain_shape, periodicity=True) kernel_execution_jacobi(dh, Target.GPU) except ImportError: @@ -226,7 +222,7 @@ def test_kernel(): def test_kernel_param(target): for domain_shape in [(4, 5), (3, 4, 5)]: if target == Target.GPU: - pytest.importorskip('pycuda') + pytest.importorskip('cupy') dh = create_data_handling(domain_size=domain_shape, periodicity=True, default_target=target) kernel_execution_jacobi(dh, target) @@ -265,7 +261,7 @@ def test_get_kwarg(): dh.fill("dst", 0.0, ghost_layers=True) with pytest.raises(ValueError): - dh.add_array('src') + dh.add_array('src', values_per_cell=1) ur = ps.Assignment(src.center, dst.center) kernel = ps.create_kernel(ur).compile() @@ -276,22 +272,20 @@ def test_get_kwarg(): def test_add_custom_data(): - pytest.importorskip('pycuda') - - import pycuda.gpuarray as gpuarray - import pycuda.autoinit # noqa + pytest.importorskip('cupy') + import cupy as cp def cpu_data_create_func(): return np.ones((2, 2), dtype=np.float64) def gpu_data_create_func(): - return gpuarray.zeros((2, 2), dtype=np.float64) + return cp.zeros((2, 2), dtype=np.float64) def cpu_to_gpu_transfer_func(gpuarr, cpuarray): gpuarr.set(cpuarray) def gpu_to_cpu_transfer_func(gpuarr, cpuarray): - gpuarr.get(cpuarray) + cpuarray[:] = gpuarr.get() dh = create_data_handling(domain_size=(10, 10)) dh.add_custom_data('custom_data', @@ -359,8 +353,8 @@ def test_load_data(): def test_array_handler(): size = (2, 2) - pytest.importorskip('pycuda') - array_handler = PyCudaArrayHandler() + pytest.importorskip('cupy') + array_handler = GPUArrayHandler() zero_array = array_handler.zeros(size) cpu_array = np.empty(size) @@ -374,7 +368,7 @@ def test_array_handler(): empty = array_handler.empty(size) assert empty.strides == (16, 8) - empty = array_handler.empty(shape=size, layout=(1, 0)) + empty = array_handler.empty(shape=size, order="F") assert empty.strides == (8, 16) random_array = array_handler.randn(size) diff --git a/pystencils_tests/test_datahandling_parallel.py b/pystencils_tests/test_datahandling_parallel.py index dd18e4fb1..b5aa98324 100644 --- a/pystencils_tests/test_datahandling_parallel.py +++ b/pystencils_tests/test_datahandling_parallel.py @@ -33,12 +33,12 @@ def test_access_and_gather(): dh = ParallelDataHandling(blocks, default_ghost_layers=2) access_and_gather(dh, cells) synchronization(dh, test_gpu=False) - if hasattr(wlb, 'cuda'): + if hasattr(wlb, 'gpu'): synchronization(dh, test_gpu=True) def test_gpu(): - pytest.importorskip('waLBerla.cuda') + pytest.importorskip('waLBerla.gpu') block_size = (4, 7, 1) num_blocks = (3, 2, 1) @@ -59,7 +59,7 @@ def test_gpu(): @pytest.mark.parametrize('target', (pystencils.Target.CPU, pystencils.Target.GPU)) def test_kernel(target): if target == pystencils.Target.GPU: - pytest.importorskip('waLBerla.cuda') + pytest.importorskip('waLBerla.gpu') # 3D blocks = wlb.createUniformBlockGrid(blocks=(3, 2, 4), cellsPerBlock=(3, 2, 5), oneBlockPerProcess=False) @@ -108,7 +108,7 @@ def test_block_iteration(): def test_getter_setter(): - pytest.importorskip('waLBerla.cuda') + pytest.importorskip('waLBerla.gpu') block_size = (2, 2, 2) num_blocks = (2, 2, 2) @@ -131,7 +131,7 @@ def test_getter_setter(): def test_parallel_datahandling_boundary_conditions(): - pytest.importorskip('waLBerla.cuda') + pytest.importorskip('waLBerla.gpu') dh = create_data_handling(domain_size=(7, 7), periodicity=True, parallel=True, default_target=pystencils.Target.GPU) diff --git a/pystencils_tests/test_fast_approximation.py b/pystencils_tests/test_fast_approximation.py index 5b7245af9..e211d6897 100644 --- a/pystencils_tests/test_fast_approximation.py +++ b/pystencils_tests/test_fast_approximation.py @@ -7,7 +7,7 @@ from pystencils.fast_approximation import ( def test_fast_sqrt(): - pytest.importorskip('pycuda') + pytest.importorskip('cupy') f, g = ps.fields("f, g: double[2D]") expr = sp.sqrt(f[0, 0] + f[1, 0]) @@ -30,7 +30,7 @@ def test_fast_sqrt(): def test_fast_divisions(): - pytest.importorskip('pycuda') + pytest.importorskip('cupy') f, g = ps.fields("f, g: double[2D]") expr = f[0, 0] / f[1, 0] assert len(insert_fast_divisions(expr).atoms(fast_division)) == 1 diff --git a/pystencils_tests/test_cudagpu.py b/pystencils_tests/test_gpu.py similarity index 88% rename from pystencils_tests/test_cudagpu.py rename to pystencils_tests/test_gpu.py index a65a08ba6..e7e0893c9 100644 --- a/pystencils_tests/test_cudagpu.py +++ b/pystencils_tests/test_gpu.py @@ -1,11 +1,10 @@ import numpy as np -import pycuda.autoinit -import pycuda.gpuarray as gpuarray +import cupy as cp import sympy as sp from scipy.ndimage import convolve from pystencils import Assignment, Field, fields, CreateKernelConfig, create_kernel, Target -from pystencils.gpucuda import BlockIndexing +from pystencils.gpu import BlockIndexing from pystencils.simp import sympy_cse_on_assignment_list from pystencils.slicing import add_ghost_layers, make_slice, remove_ghost_layers @@ -25,10 +24,10 @@ def test_averaging_kernel(): ast = create_kernel(sympy_cse_on_assignment_list([update_rule]), config=config) kernel = ast.compile() - gpu_src_arr = gpuarray.to_gpu(src_arr) - gpu_dst_arr = gpuarray.to_gpu(dst_arr) + gpu_src_arr = cp.asarray(src_arr) + gpu_dst_arr = cp.asarray(dst_arr) kernel(src=gpu_src_arr, dst=gpu_dst_arr) - gpu_dst_arr.get(dst_arr) + dst_arr = gpu_dst_arr.get() stencil = np.array([[0, 1, 0], [1, 0, 1], [0, 1, 0]]) / 4.0 reference = convolve(remove_ghost_layers(src_arr), stencil, mode='constant', cval=0.0) @@ -52,10 +51,10 @@ def test_variable_sized_fields(): src_arr = add_ghost_layers(src_arr) dst_arr = np.zeros_like(src_arr) - gpu_src_arr = gpuarray.to_gpu(src_arr) - gpu_dst_arr = gpuarray.to_gpu(dst_arr) + gpu_src_arr = cp.asarray(src_arr) + gpu_dst_arr = cp.asarray(dst_arr) kernel(src=gpu_src_arr, dst=gpu_dst_arr) - gpu_dst_arr.get(dst_arr) + dst_arr = gpu_dst_arr.get() stencil = np.array([[0, 1, 0], [1, 0, 1], [0, 1, 0]]) / 4.0 reference = convolve(remove_ghost_layers(src_arr), stencil, mode='constant', cval=0.0) @@ -81,10 +80,10 @@ def test_multiple_index_dimensions(): ast = create_kernel([update_rule], config=config) kernel = ast.compile() - gpu_src_arr = gpuarray.to_gpu(src_arr) - gpu_dst_arr = gpuarray.to_gpu(dst_arr) + gpu_src_arr = cp.asarray(src_arr) + gpu_dst_arr = cp.asarray(dst_arr) kernel(src=gpu_src_arr, dst=gpu_dst_arr) - gpu_dst_arr.get(dst_arr) + dst_arr = gpu_dst_arr.get() reference = np.zeros_like(dst_arr) gl = np.max(np.abs(np.array(offset, dtype=int))) @@ -109,10 +108,10 @@ def test_ghost_layer(): ast = create_kernel(sympy_cse_on_assignment_list([update_rule]), config=config) kernel = ast.compile() - gpu_src_arr = gpuarray.to_gpu(src_arr) - gpu_dst_arr = gpuarray.to_gpu(dst_arr) + gpu_src_arr = cp.asarray(src_arr) + gpu_dst_arr = cp.asarray(dst_arr) kernel(src=gpu_src_arr, dst=gpu_dst_arr) - gpu_dst_arr.get(dst_arr) + dst_arr = gpu_dst_arr.get() reference = np.zeros_like(src_arr) reference[ghost_layers[0][0]:-ghost_layers[0][1], ghost_layers[1][0]:-ghost_layers[1][1]] = 1 @@ -121,7 +120,7 @@ def test_ghost_layer(): def test_setting_value(): arr_cpu = np.arange(25, dtype=np.float64).reshape(5, 5) - arr_gpu = gpuarray.to_gpu(arr_cpu) + arr_gpu = cp.asarray(arr_cpu) iteration_slice = make_slice[:, :] f = Field.create_generic("f", 2) @@ -136,11 +135,11 @@ def test_setting_value(): def test_periodicity(): - from pystencils.gpucuda.periodicity import get_periodic_boundary_functor as periodic_gpu + from pystencils.gpu.periodicity import get_periodic_boundary_functor as periodic_gpu from pystencils.slicing import get_periodic_boundary_functor as periodic_cpu arr_cpu = np.arange(50, dtype=np.float64).reshape(5, 5, 2) - arr_gpu = gpuarray.to_gpu(arr_cpu) + arr_gpu = cp.asarray(arr_cpu) periodicity_stencil = [(1, 0), (-1, 0), (1, 1)] periodic_gpu_kernel = periodic_gpu(periodicity_stencil, (5, 5), 1, 2) @@ -149,9 +148,8 @@ def test_periodicity(): cpu_result = np.copy(arr_cpu) periodic_cpu_kernel(cpu_result) - gpu_result = np.copy(arr_cpu) periodic_gpu_kernel(pdfs=arr_gpu) - arr_gpu.get(gpu_result) + gpu_result = arr_gpu.get() np.testing.assert_equal(cpu_result, gpu_result) diff --git a/pystencils_tests/test_indexed_kernels.py b/pystencils_tests/test_indexed_kernels.py index fa06a8f16..c8c88ec86 100644 --- a/pystencils_tests/test_indexed_kernels.py +++ b/pystencils_tests/test_indexed_kernels.py @@ -1,4 +1,6 @@ import numpy as np +import pytest + import pystencils as ps from pystencils import Assignment, Field, CreateKernelConfig, create_kernel, Target @@ -24,35 +26,29 @@ def test_indexed_kernel(): np.testing.assert_allclose(arr[index_arr[i]['x'], index_arr[i]['y']], index_arr[i]['value'], atol=1e-13) -def test_indexed_cuda_kernel(): - try: - import pycuda - except ImportError: - pycuda = None - - if pycuda: - import pycuda.gpuarray as gpuarray - - arr = np.zeros((3, 4)) - dtype = np.dtype([('x', int), ('y', int), ('value', arr.dtype)]) - index_arr = np.zeros((3,), dtype=dtype) - index_arr[0] = (0, 2, 3.0) - index_arr[1] = (1, 3, 42.0) - index_arr[2] = (2, 1, 5.0) - - indexed_field = Field.create_from_numpy_array('index', index_arr) - normal_field = Field.create_from_numpy_array('f', arr) - update_rule = Assignment(normal_field[0, 0], indexed_field('value')) - - config = CreateKernelConfig(target=Target.GPU, index_fields=[indexed_field]) - ast = create_kernel([update_rule], config=config) - kernel = ast.compile() - - gpu_arr = gpuarray.to_gpu(arr) - gpu_index_arr = gpuarray.to_gpu(index_arr) - kernel(f=gpu_arr, index=gpu_index_arr) - gpu_arr.get(arr) - for i in range(index_arr.shape[0]): - np.testing.assert_allclose(arr[index_arr[i]['x'], index_arr[i]['y']], index_arr[i]['value'], atol=1e-13) - else: - print("Did not run test on GPU since no pycuda is available") +def test_indexed_gpu_kernel(): + pytest.importorskip("cupy") + import cupy as cp + + arr = np.zeros((3, 4)) + dtype = np.dtype([('x', int), ('y', int), ('value', arr.dtype)]) + index_arr = np.zeros((3,), dtype=dtype) + index_arr[0] = (0, 2, 3.0) + index_arr[1] = (1, 3, 42.0) + index_arr[2] = (2, 1, 5.0) + + indexed_field = Field.create_from_numpy_array('index', index_arr) + normal_field = Field.create_from_numpy_array('f', arr) + update_rule = Assignment(normal_field[0, 0], indexed_field('value')) + + config = CreateKernelConfig(target=Target.GPU, index_fields=[indexed_field]) + ast = create_kernel([update_rule], config=config) + kernel = ast.compile() + + gpu_arr = cp.asarray(arr) + gpu_index_arr = cp.ndarray(index_arr.shape, dtype=index_arr.dtype) + gpu_index_arr.set(index_arr) + kernel(f=gpu_arr, index=gpu_index_arr) + arr = gpu_arr.get() + for i in range(index_arr.shape[0]): + np.testing.assert_allclose(arr[index_arr[i]['x'], index_arr[i]['y']], index_arr[i]['value'], atol=1e-13) diff --git a/pystencils_tests/test_math_functions.py b/pystencils_tests/test_math_functions.py index eacb490e9..1fd393788 100644 --- a/pystencils_tests/test_math_functions.py +++ b/pystencils_tests/test_math_functions.py @@ -10,7 +10,7 @@ from pystencils.fast_approximation import fast_division @pytest.mark.parametrize('target', [ps.Target.CPU, ps.Target.GPU]) def test_two_arguments(dtype, func, target): if target == ps.Target.GPU: - pytest.importorskip("pycuda") + pytest.importorskip("cupy") dh = ps.create_data_handling(domain_size=(10, 10), periodicity=True, default_target=target) x = dh.add_array('x', values_per_cell=1, dtype=dtype) @@ -43,7 +43,7 @@ def test_two_arguments(dtype, func, target): @pytest.mark.parametrize('target', [ps.Target.CPU, ps.Target.GPU]) def test_single_arguments(dtype, func, target): if target == ps.Target.GPU: - pytest.importorskip("pycuda") + pytest.importorskip("cupy") dh = ps.create_data_handling(domain_size=(10, 10), periodicity=True, default_target=target) x = dh.add_array('x', values_per_cell=1, dtype=dtype) diff --git a/pystencils_tests/test_modulo.py b/pystencils_tests/test_modulo.py index 7f81ab644..959daddb9 100644 --- a/pystencils_tests/test_modulo.py +++ b/pystencils_tests/test_modulo.py @@ -9,7 +9,7 @@ from pystencils.astnodes import LoopOverCoordinate, Conditional, Block, SympyAss @pytest.mark.parametrize('iteration_slice', [False, True]) def test_mod(target, iteration_slice): if target == ps.Target.GPU: - pytest.importorskip("pycuda") + pytest.importorskip("cupy") dh = ps.create_data_handling(domain_size=(5, 5), periodicity=True, default_target=ps.Target.CPU) loop_ctrs = [LoopOverCoordinate.get_loop_counter_symbol(i) for i in range(dh.dim)] diff --git a/pystencils_tests/test_phasefield_dentritic_3D.ipynb b/pystencils_tests/test_phasefield_dentritic_3D.ipynb index a9a51773e..41fddaeed 100644 --- a/pystencils_tests/test_phasefield_dentritic_3D.ipynb +++ b/pystencils_tests/test_phasefield_dentritic_3D.ipynb @@ -2,17 +2,28 @@ "cells": [ { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "<module 'cupy' from '/home/markus/.local/lib/python3.11/site-packages/cupy/__init__.py'>" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "import pytest\n", - "pytest.importorskip('pycuda')" + "pytest.importorskip('cupy')" ] }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -32,7 +43,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -48,7 +59,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -78,38 +89,24 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/latex": [ - "$\\displaystyle \\bar{\\epsilon} \\left(δ \\left(\\frac{{\\partial_{0} {{φ}_{(0,0,0)}}}^{4}}{\\left({\\partial_{0} {{φ}_{(0,0,0)}}}^{2} + {\\partial_{1} {{φ}_{(0,0,0)}}}^{2} + {\\partial_{2} {{φ}_{(0,0,0)}}}^{2}\\right)^{2}} + \\frac{{\\partial_{1} {{φ}_{(0,0,0)}}}^{4}}{\\left({\\partial_{0} {{φ}_{(0,0,0)}}}^{2} + {\\partial_{1} {{φ}_{(0,0,0)}}}^{2} + {\\partial_{2} {{φ}_{(0,0,0)}}}^{2}\\right)^{2}} + \\frac{{\\partial_{2} {{φ}_{(0,0,0)}}}^{4}}{\\left({\\partial_{0} {{φ}_{(0,0,0)}}}^{2} + {\\partial_{1} {{φ}_{(0,0,0)}}}^{2} + {\\partial_{2} {{φ}_{(0,0,0)}}}^{2}\\right)^{2}}\\right) + 1\\right)$" + "$\\displaystyle \\bar{\\epsilon} \\left(δ \\left(\\frac{{\\partial_{0} {φ}_{(0,0,0)}}^{4}}{\\left({\\partial_{0} {φ}_{(0,0,0)}}^{2} + {\\partial_{1} {φ}_{(0,0,0)}}^{2} + {\\partial_{2} {φ}_{(0,0,0)}}^{2}\\right)^{2}} + \\frac{{\\partial_{1} {φ}_{(0,0,0)}}^{4}}{\\left({\\partial_{0} {φ}_{(0,0,0)}}^{2} + {\\partial_{1} {φ}_{(0,0,0)}}^{2} + {\\partial_{2} {φ}_{(0,0,0)}}^{2}\\right)^{2}} + \\frac{{\\partial_{2} {φ}_{(0,0,0)}}^{4}}{\\left({\\partial_{0} {φ}_{(0,0,0)}}^{2} + {\\partial_{1} {φ}_{(0,0,0)}}^{2} + {\\partial_{2} {φ}_{(0,0,0)}}^{2}\\right)^{2}}\\right) + 1\\right)$" ], "text/plain": [ - " ⎛ ⎛ 4 \n", - " ⎜ ⎜ D(φ[0,0,0]) \n", - "\\bar{\\epsilon}⋅⎜δ⋅⎜───────────────────────────────────────────── + ───────────\n", - " ⎜ ⎜ 2 \n", - " ⎜ ⎜⎛ 2 2 2⎞ ⎛ \n", - " ⎠âŽâŽD(φ[0,0,0]) + D(φ[0,0,0]) + D(φ[0,0,0]) ⎠âŽD(φ[0,0,0]\n", - "\n", - " 4 4 \n", - " D(φ[0,0,0]) D(φ[0,0,0]) \n", - "────────────────────────────────── + ─────────────────────────────────────────\n", - " 2 \n", - " 2 2 2⎞ ⎛ 2 2 \n", - ") + D(φ[0,0,0]) + D(φ[0,0,0]) ⎠âŽD(φ[0,0,0]) + D(φ[0,0,0]) + D(φ[0,0,0]\n", - "\n", - " ⎞ ⎞\n", - " ⎟ ⎟\n", - "────⎟ + 1⎟\n", - " 2⎟ ⎟\n", - " 2⎞ ⎟ ⎟\n", - ") ⎠⎠⎠" + " ⎛ ⎛ 4 4 4 ⎞ ⎞\n", + " ⎜ ⎜ D(φ[0,0,0]) D(φ[0,0,0]) D(φ[0,0,0]) ⎟ ⎟\n", + "\\bar{\\epsilon}⋅⎜δ⋅⎜───────────────────────────────────────────── + ───────────────────────────────────────────── + ─────────────────────────────────────────────⎟ + 1⎟\n", + " ⎜ ⎜ 2 2 2⎟ ⎟\n", + " ⎜ ⎜⎛ 2 2 2⎞ ⎛ 2 2 2⎞ ⎛ 2 2 2⎞ ⎟ ⎟\n", + " ⎠âŽâŽD(φ[0,0,0]) + D(φ[0,0,0]) + D(φ[0,0,0]) ⎠âŽD(φ[0,0,0]) + D(φ[0,0,0]) + D(φ[0,0,0]) ⎠âŽD(φ[0,0,0]) + D(φ[0,0,0]) + D(φ[0,0,0]) ⎠⎠⎠" ] }, - "execution_count": 4, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -127,7 +124,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -137,7 +134,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -153,7 +150,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -162,21 +159,20 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": {}, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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", "text/latex": [ "$\\displaystyle \\left\\{ \\pi : 3.14159265358979, \\ T_{eq} : 1.0, \\ \\bar{\\epsilon} : 0.01, \\ j : 6, \\ α : 0.9, \\ γ : 10, \\ δ : 0.3, \\ θ_{0} : 0.2, \\ κ : 1.8, \\ Ï„ : 0.0003\\right\\}$" ], "text/plain": [ - "{Ï€: 3.14159265358979, T_eq: 1.0, \\bar{\\epsilon}: 0.01, j: 6, α: 0.9, γ: 10, δ:\n", - " 0.3, θ₀: 0.2, κ: 1.8, Ï„: 0.0003}" + "{Ï€: 3.14159265358979, T_eq: 1.0, \\bar{\\epsilon}: 0.01, j: 6, α: 0.9, γ: 10, δ: 0.3, θ₀: 0.2, κ: 1.8, Ï„: 0.0003}" ] }, - "execution_count": 8, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -199,7 +195,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "metadata": {}, "outputs": [], "source": [ @@ -219,21 +215,20 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/latex": [ - "$\\displaystyle \\left[ {{T}_{(0,0,0)}} \\leftarrow 0.0111111111111111 {{T}_{(-1,0,0)}} + 0.0111111111111111 {{T}_{(0,-1,0)}} + 0.0111111111111111 {{T}_{(0,0,-1)}} + 0.933333333333333 {{T}_{(0,0,0)}} + 0.0111111111111111 {{T}_{(0,0,1)}} + 0.0111111111111111 {{T}_{(0,1,0)}} + 0.0111111111111111 {{T}_{(1,0,0)}} + 1.8 \\cdot 10^{-5} {{φ_D}_{(0,0,0)}}\\right]$" + "$\\displaystyle \\left[ {T}_{(0,0,0)} \\leftarrow 0.0111111111111111 {T}_{(0,0,-1)} + 0.933333333333333 {T}_{(0,0,0)} + 0.0111111111111111 {T}_{(1,0,0)} + 0.0111111111111111 {T}_{(0,1,0)} + 0.0111111111111111 {T}_{(0,-1,0)} + 0.0111111111111111 {T}_{(0,0,1)} + 0.0111111111111111 {T}_{(-1,0,0)} + 1.8 \\cdot 10^{-5} {φ_D}_{(0,0,0)}\\right]$" ], "text/plain": [ - "[T_C := 0.0111111111111111â‹…T_W + 0.0111111111111111â‹…T_S + 0.0111111111111111â‹…T\n", - "_B + 0.933333333333333â‹…T_C + 0.0111111111111111â‹…T_T + 0.0111111111111111â‹…T_N +\n", - " 0.0111111111111111â‹…T_E + 1.8e-5â‹…phidelta_C]" + "[T_C := 0.0111111111111111â‹…T_B + 0.933333333333333â‹…T_C + 0.0111111111111111â‹…T_E + 0.0111111111111111â‹…T_N + 0.0111111111111111â‹…T_S + 0.0111111111111111â‹…T_T + 0.0111111111111111â‹…T_\n", + "W + 1.8e-5â‹…phidelta_C]" ] }, - "execution_count": 10, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -244,7 +239,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -254,7 +249,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ @@ -296,7 +291,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 14, "metadata": {}, "outputs": [ { @@ -313,14 +308,12 @@ }, { "data": { - "image/png": "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\n", + "image/png": "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pptuUl1dXZ/7XLhwoX7yk59o5cqVevrpp/Xmm2/qrLPOystjBACUj3LKa3x7OAAgUCqV0o9+9CPNnDkzsM3ll1+uJ554Qi+++GJm2znnnKMdO3Zo1apVBZglAADB6uvr9YlPfEL33HOPJKmnp0djx47VxRdfrCuuuCL02HHjxunSSy/VpZdemlOfO3fu1BFHHKHly5fri1/8oiTplVde0cSJE9Xa2qoTTzwx/gcKACgL5ZTXDspLr3nW09OjN998U4ceeqhSqdRATwdAGfM8T++++67GjBmjior+Xby+Z88edXV1xTSzbJ7n9Xq+rKqqUlVVVb/7bm1tVWNjY9a2pqamXokQwchrAJKi1PJaV1eX2tradOWVV2a2VVRUqLGxUa2trX0aO0qfbW1t2rdvX1Z+nDBhgo466qiSf9GSnAYgKUotp0nll9eK8kXLN998U2PHjh3oaQBAxpYtW/SBD3ygz8fv2bNH4z84TO3bumOc1fuGDRumXbt2ZW1btGiRrrvuun733d7ertra2qxttbW16uzs1P/+7//q4IMP7vcYpY68BiBpSiWvvf322+ru7rbmqVdeeaVPY0fps729XZWVlRo+fHivNu3t7X0at1iQ0wAkTankNKn88lpRvmh56KGHSjrwH6+6unqAZwOgnHV2dmrs2LGZ56W+6urqUvu2bv132zhVHxrvxw13vtujD059vddzZhxXWSIe5DUASUFeQ3+R0wAkBTmt+BXli5bpy2arq6tJhAASIa63Pw07NKVhh8b7Vqoe5fc5s66urte3xnV0dKi6upqrLCMirwFImlLJayNHjtSgQYOseSroywhcovRZV1enrq4u7dixI+uqlP6MWyzIaQCSplRymlR+eY1vDwcA9EtDQ4PWrFmTtW316tVqaGgYoBkBAHBAZWWlpk6dmpWnenp6tGbNmj7nqSh9Tp06VYMHD85qs2nTJm3evJn8CADos3LLa0V5pSUAlKpur0fdXvx95mLXrl36wx/+kLn/2muvaePGjRoxYoSOOuooXXnllXrjjTf08MMPS5IuvPBC3XPPPfr617+uv/7rv9batWv1/e9/X0888USsjwMAUHySkNdaWlo0Z84cTZs2TdOnT9cdd9yh3bt3a+7cuZKk8847T0ceeaQWL14s6cDbAH/7299mfn/jjTe0ceNGDRs2TB/+8Icj9VlTU6N5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GzZs0OTJk9XU1KRt27ZZ2z/77LM699xzNW/ePP3617/WzJkzNXPmTL344otZ7WbMmKGtW7dmbv/yL/+StX/27Nl66aWXtHr1aj3++ON65plndMEFF+QWwGLGeda7Lc9FxMjWBzEip+WonPIaL1oCAJAUYSvMNmFFpO24oPu2otXVX1Ax618NN9sE9RE0ryiPIaidbW5RjiNG7uOIkfu4UohRCbnttts0f/58zZ07V5MmTdLSpUs1dOhQLVu2zNr+zjvv1IwZM/S1r31NEydO1I033qgTTjhB99xzT1a7qqoq1dXVZW6HHXZYZt/LL7+sVatW6b777lN9fb0+9alP6e6779ajjz6qN998M6+PNzE4z7Lv81xEjIgROS0m5ZTXeNESABIk/eHOcd9QxMzCLWiVPehYWwFo9h21qDWLS9vvirDdtT/X1XFi5EaM3IhRXgx0Xuvq6lJbW5saGxsz2yoqKtTY2KjW1lbrMa2trVntJampqalX+3Xr1mnUqFE65phjdNFFF+mdd97J6mP48OGaNm1aZltjY6MqKiq0fv36yPMvOZxnbsTIjRi5EaO8GOicJpVfXuOLeAAASBp/sej/mcuKub+97TizsLMVelFW8oP6DFuV72sxahuLGLnHIkbusYhRUers7My6X1VVpaqqqqxtb7/9trq7u1VbW5u1vba2Vq+88oq13/b2dmv79vb2zP0ZM2borLPO0vjx4/Xqq6/qqquu0mc/+1m1trZq0KBBam9v16hRo7L6OOiggzRixIisfsoC55kbMXIjRm7EqKhFyWlS+eU1XrQEgATpUUo9MX8GJd9IV0TM4jGogDNXuKMUg2a7oCLQC9lntsl1HrZx+3LlgO1xECP7/MLGJka9+yNGsctnXhs7dmzW9kWLFum6666Ldawg55xzTub34447Tscff7w+9KEPad26dTr99NMLMofEI6e58VzkRozciFHBlGpOk5Kb13jREgCApLEVgf4Cz1UU+tnamH2aY4ZtS283C86+Fo9hx9gKYttxxCj7vu04YpR933YcMSo6W7ZsUXV1dea+7YqUkSNHatCgQero6Mja3tHRobq6Omu/dXV1ObWXpKOPPlojR47UH/7wB51++umqq6vr9YUI+/fv1/bt20P7KUmcZ/Y+eS7qjRiFj2Hrkxj1VsI5TSq/vMYHnQFAgnhKHVjBi/HmFWPWLlfpYi5d0PmLLn+xGZV5lUtYn55yK/LC5mMb19weZZygQpgYhbchRr3HsG0jRrm16aN85rXq6uqsm+0PvMrKSk2dOlVr1qzJbOvp6dGaNWvU0NBgnXNDQ0NWe0lavXp1YHtJ+tOf/qR33nlHo0ePzvSxY8cOtbW1ZdqsXbtWPT09qq+vjx7AYsZ51nsM2zZiFN6GGPUew7aNGOXWpo8GOqdJ5ZfXuNISABKkx8vDWw5i7g95lgr43RSlQDRXsYOKwaCx+rv6bR5vuwLANZ7tCgFi1Htb+lhiRIzMMXKNUcySkNdaWlo0Z84cTZs2TdOnT9cdd9yh3bt3a+7cuZKk8847T0ceeaQWL14sSbrkkkt08skn69Zbb9WZZ56pRx99VC+88ILuvfdeSdKuXbt0/fXXa9asWaqrq9Orr76qr3/96/rwhz+spqYmSdLEiRM1Y8YMzZ8/X0uXLtW+ffvU3Nysc845R2PGjIkxGgnHedZ7W/pYnouIkTkGMbIfT07rpZzyGi9aAgCQVLkUff62/iLTVcR6Ifui9ivLdrNNlLnYjnUVy8SIGJmIUX5iVMTOPvtsvfXWW7r22mvV3t6uKVOmaNWqVZkvJdi8ebMqKt5/A9pJJ52k5cuX6+qrr9ZVV12lj3zkI3rsscd07LHHSpIGDRqk//qv/9JDDz2kHTt2aMyYMTrjjDN04403Zl0Z88gjj6i5uVmnn366KioqNGvWLN11112FffBJwnnGc5GJGBEjclqflFNe40VLAEiQHq9CPV68n9wRd3/IM1vBZSveXAWd2Y+tnZRbYRilALbNL+qxUcclRsQoCmLk1p9jI0pKXmtublZzc7N137p163pt+9KXvqQvfelL1vYHH3ywfvrTnzrHHDFihJYvX57TPEsO5xnPRVEQIzdi5FZGOU0qn7zGi5YAACSJq8DyF5B+QavJ/pVwW9+24tQlrIi1zSUVsK2viFH08V37iZF7fznHCOgvzrPo47v2EyP3fmLk3l/OMUJR4kVLAEiQpHxOChIkqMBzFX5mOz/XMTb+4jXqHHK5KqA/iJEbMXIjRnlBXkMWzjM3YuRGjNyIUV6Q0wqP9wwCAFAM/PWMF7A9TNAxuayO24pGfx8p42YenyvP+D3oagDbGMQoeI62Y4mRfYxyjRGQb5xnPBfZECM3YuRGTispXGkJAAnSo5R6Yl46jLs/5FG6+Ez5fvr3ScHFn+ufOY7/BrYiM6hdlPHMxxdWqKZj4hn3iVH278SIGNnkGqMYkdfKGDkteD/PRcQoCDFyI6eVFa60BAAgKfwFpa0AM4s021tugvRlpdk8xlbw2trb2uRyJUBYG2LkbkOM3G2IEZB/nGfuNsTI3YYYudsQI5QwrrQEgAThc1LKXFBhFrTyHPWfNurKtX8OfVmR7+u+XATNgRi550CM3HMgRrEjr5Uxcpobz0VuxMiNGBUMOa3weNESABKERFjmgv6p+lNw+vmLxlwLWduxQW/7izK+f1t63P68TYkYuedHjNzzI0axI6+VMc4znouIUW7j+7elxyVG5LQyx9vDAQAoZl7A7zYp4/dc3vJjOzZl2eefh+3tQbZ+812rESM3YuRGjID84zxzI0ZuxMiNGKFIcKUlACQIq3dlzizSglanJXvBl8tKe9D2oNVqc1U87L9VUDHqYq6+B23390uM7NuJETEK44pRjMhrZYycxnORCzFyI0Zu5LSSxpWWAAAkhVmzmEVmlIIvjCd38Wb2nT7GVhTb+neNF7V4NAvXoEKWGBGjKPMgRu559PWPRSAI51nvefBc5J4HMXLPgxi550FOKxlcaQkACcLqHbKYRV7QKnrYNj9zxdnV3hzXtbJum58X0sZsZxbU5lUCNsTIPU9i5J4nMXq/TczIa8jgPHPPkxi550mM3PMkRu+3iRk5rfC40hIAgKQwV5bNIlHGvijbwtrYCsAofZpzDBvHLCSjzCtsHzFy7yNG7n3EKPd9QK44z9z7iJF7HzFy7yNGue9D0eBKSwBIEE9ST8wZNg+LjMiXqAVaXMJW4l1t8zFmlDEKXYASIzdi5FaMMYoJea2MkdN4LnKNSYzcYxIj95jktJLGlZYAACSV/60vtn22bebbd8K4ai7P+Gke5+o/aOU9l9X/KGMQI/cYxMg9BjEC8ovzjOeiKPMhRu75ECP3fMhpJYMrLQEgQficlDJnK+78q8eesc9/nO2KlihFZZS31ZiFYtB4Zp+2tw+Zx/kLa1t/QX349xOj8DkTI2Lk3xY1RjEhr5UxclrwHILmTIyIkX8bMQo+jpxWNnjREgAShERY5vzFZS6FWF//icOOM+dgFsO2tq6+ci0qbf0SI3e/xMjdLzHKrd9+IK+VMc4zd7/EyN0vMXL3S4xy67cfyGmFx9vDAQBImrDaxVbwxcF2RYxrLunjwgrSKH2EHRf0+IjR+9uIkfs4YuQ+Lq7HB5g4z97fxnOR+zhi5D6OGLmPI6eVDK60BIAEYfUOWVwr4v7VbNt+f5tcxvL3Z66YBxWZtmPMOfblv6LZT9i8bfeJETEy+ydG4fOK+Q898hoyOM94LoqCGEWfFzFyz4ucVvS40hIAgKQLW1E3i72+9BPUt+1nlGOC+snnqjcxciNGbsQIyD/OMzdi5EaM3IgRSgBXWgJAgrB6hyzp1eWwFXVz1TpoJdv8PWgss5++rHAHrbpHHT/KdnM/MXIfR4zcxxGj2JHXkMF5xnNR0PhRtpv7iZH7OGIUO3Ja4XGlJQAASZVrDdOfleigsfwFr208z7hvaxvlcZjjmH27jouKGLkRI7dyjBHQX5xn0Y+Lihi5ESO3cowRigZXWgJAgnheSl7Mq21x94cCsa1Uu1aa022irC672thW5P3HBK3Im/PO5b9f2GMNW0UnRvb7trGC2vnbp9sQo+D+023KJUb9QF6DJM4znovccyJG7jkRI/ecyGklhystAQBIIn/xFWXV2Fb0RWW2NVe8/QWtq49cCmT//aiFsh8xch9HjNzHESMg/zjP3McRI/dxxMh9HDFCieFKSwBIkB6l1BNz5o27PwyQKP+MtpVrP1thF7b6HbTf1i5ofmbbsCsAwvoPGyPqfrMNMXK3IUbuNqUYoxiR12DFecZzkav/sDGi7jfbECN3m1KMUYzIaYXHi5YAkCB8uDMiFWm5HO8XVNyZx5jFYH8EFae2QjfqeMTIjRi5EaOCIK+VOc4zN2LkRozciFFBkNMKj7eHAwCQJK4iLc0LuG8WrGFjBP0MOtZWUwWNkd4XtD9o/lHGIUbEKOg4YuQ+LpcYAf3FecZzUdBxxMh9HDFyH0dOK3lcaQkACcKHO0OSvYA0hRWIYccHraQHrZbb9gfNy1x5D1qZt/URVFS7im5iRIz8iFH8Meon8ho4z8Rzka0PYkSMzDbkNFhwpSUAAElhrhZ7AfvMItNW64QVca7V7Vz4+3MVlGah7C9Cwx5f0PyIkXt+xMg9P2IE5AfnmXsOxMg9B2LkngMx6tscUBS40hIAEoTPSSlzYavJ5u9mgWpra7ax/e5f1Q5aRTf7NH93rbzbVu5tcwg6zpwHMSJGYXMIOs6cBzEKj1FMyGtljPOM5yJilI0Y9T7WRE6DgSstAQBIErOgtBVeYcWerT+zT7Mff9sgQSvttt9t/YbNwTafoH5dczD7Ika925p9EaPebc2+yi1GQFw4z8L7dc3B7IsY9W5r9kWMerc1+yq3GKGocaUlACQIn5MCSeGr3mGr4mEr2P6VcP9+s0D0M9ub44Stqpv92vrytzWPc/23JUbEiBgVJkb9RF4D51lI3/7jzN+JUe8xzN+JUe8xzN+JUazIaYXHlZYAACSNp96rw2GFYdTttmLRLGqjtrcJ6tcsVM3HF9Z/UFFMjN5HjNz9EyN3/2F/gAL9wXn2Pp6L3P0TI3f/xMjdPzmtZHClJQAkiJeHz0lh9a4I+VePo7SNa8wg/lVuW9ugVXGzrbkKbjvOnE/K0s6/PQpi5EaM3MolRjEjr4HzTDwXESNiZGtLTsv0iWC8aAkACeJJ8mJOsHnI1yiEXIo1s72t9gkrDG1cY/jbmYL6dc0r7DjXOMSIGBGj6PPKNUb9QF6DJM4z8ziei9zHESP3ccTIfRw5rejx9nAAAJIiqGoxi66g4sxz9OFvF9aH2T49vtl30Eq3Z9lm/m6bl7+deVy66CZG77cjRvZ5+dsRI/u8/O1sMQLiwHn2fjuei+zz8rcjRvZ5+dsRI/u8/O3IaSWHKy0BIEF6lFIq5uzaQ7YuHmGr5q5V5qDfg8ax9ZXLvvQY/rHM++YxUVbe/f0E9UGMiJFrHv5+gvogRtH/oO0H8loZ4zzL7ieoD2JEjFzz8PcT1AcxIqeVKK60BAAgiVLGz7SwgtX2e67jRd1vm1+cK9pR+iFG0dsQI3cbYgTkD+dZ9DbEyN2GGLnbECOUCK60BIAE8bxU7B/GzIc7FxFb0Ra28hxH/35BY4cdEzZn29t/cp1/lD6IETFyIUZucf7R6O+WvFa+OM/c/RMjd//EyN0/MYrWfwzIaYXHlZYAACSFrUCLWsd4lt/NtwqlArZHmY+rjfk2H1d/ucwh6OoAYvT+McTI3T8xcvcftS0QBeeZ/Riei9z9EyN3/8TI3T85rSRwpSUAJEiPl1Iq5tW2HlbviktQsRm2Yhy0mm5rH1bABY2RPiZsTilLu1xW5cNEXcEnRr3HJUbBbYlR/9pGRF4rc5xn7rbEyN2WGLnbEqP+tY2InFZ4XGkJAECS2Aq7XI/pa9uwFW7XvHJd2TePjfI4w4pfF2LkRozcyiVGQFw4z8LbpecTNhcbYuRGjNzKJUYoalxpCQAJ4nkHbnH3iSLhf1tOlNXmvoraZ9jqvLndfz/sOFubqPNJr8b7f+ZyfC6IUbSxoiBGbkmLUYzIa2WMnBaO5yI3YuRGjAqKnFZ4XGkJAEBS9GUVW8r+w9BV+OSyKh2lcLTdjzLXvhaaxMiNGLkRIyD/OM/ciJEbMXIjRihhXGkJAAnCN9JBUviqs7maHmXF2dYmavEXdbXcNp+gY4LaRFlhDxs7aC7EiBiF9RN0HDGKBXkNnGcRECM3YuRGjPKOnFZ4vGgJAAlCIoSkaIWkWXiabf3b/IVmUL9BBV+UotQ/nyiCiuqwYts2LjEiRrZxiZG9z77GqJ/Ia+A8C5mP6zhzHGIUPkdiRIzIaSWHt4cDAJA0/iIxfTP3BR0T1s5WaKZ/9qdeMovGoOLTtr2v4xKj6GMSI/eYxAjIH86z6GMSI/eYxMg9JjFCCeFKSwBIkB4vpVTMq209rN4Vr6CVY3NlPEohaissXcdHZfYdtApvW8lPt3f1YRvHbEeMiBExiidGMSKvIYPzLHwcsx0xIkbEiJwGrrQEACAxbCvjaf0tyKIcEzR2Ln3bxgnalutjShenxCh8HGLkHocYlZ0lS5Zo3LhxGjJkiOrr6/X888+Htl+5cqUmTJigIUOG6LjjjtOTTz6Z2bdv3z5dfvnlOu6443TIIYdozJgxOu+88/Tmm29m9TFu3DilUqms20033ZSXx5dInGfucYiRexxi5B6HGJWlcslrvGgJAAniefm5oUik1LsYSzP/HfNRpNnGdv3/iWMeYWN4xk9iFLyPGLn3ESP3vphzRhLy2ooVK9TS0qJFixZpw4YNmjx5spqamrRt2zZr+2effVbnnnuu5s2bp1//+teaOXOmZs6cqRdffFGS9N5772nDhg265pprtGHDBv3whz/Upk2b9Od//ue9+rrhhhu0devWzO3iiy/OOYZFi/MseB/PRe59xMi9jxi595VgTpPKK6/xoiUAAEnkGb9HKURd/fRl7P4UlVHG9he6Ye1dj58YESNiFK4/MSpyt912m+bPn6+5c+dq0qRJWrp0qYYOHaply5ZZ2995552aMWOGvva1r2nixIm68cYbdcIJJ+iee+6RJNXU1Gj16tX6y7/8Sx1zzDE68cQTdc8996itrU2bN2/O6uvQQw9VXV1d5nbIIYfk/fEmEudZ73Zh/RMjYkSMwpVxTpPKK6/xoiUAJMiB1bZUzLeBflTok/TbfdK/B7XJpR8peiEYxNZXUJ9RC0X/4wy7IsC2jxgRI7MfYuTu0xWjGA10Xuvq6lJbW5saGxsz2yoqKtTY2KjW1lbrMa2trVntJampqSmwvSTt3LlTqVRKw4cPz9p+00036fDDD9fHP/5x3Xzzzdq/f3/0yZcSzrPeffBcRIzCECO3MsxpUvnlNb6IBwCApHAVXEEr5q7+/CvRZqFr7rON4d9mG99c6bb1E9avf3vQFQHpdmY/xKh3O2JEjPoToyLS2dmZdb+qqkpVVVVZ295++211d3ertrY2a3ttba1eeeUVa7/t7e3W9u3t7db2e/bs0eWXX65zzz1X1dXVme1f/epXdcIJJ2jEiBF69tlndeWVV2rr1q267bbbIj/GokZO47mIGBGjgY5REYmS06Tyy2u8aAkACZJecYu7TxSJoKLMVpzZmEWm2T7ovqtADBrXP7coBWzUfm3jBB1DjHq3I0bB4wQdQ4xya5eDfOa1sWPHZm1ftGiRrrvuuljHctm3b5/+8i//Up7n6bvf/W7WvpaWlszvxx9/vCorK/W3f/u3Wrx4sfUP0ZLDeRY8TtAxxKh3O2IUPE7QMcQot3Y5KPWcJiUvr/GiJQAkiKf4FwWLbJERaa7VabONq8AzC1K/vhSCZnvbPILm5pfr6n/QscTIfSwxch9LjGKXz7y2ZcuWrCtAbH8wjRw5UoMGDVJHR0fW9o6ODtXV1Vn7r6uri9Q+/Yfdf//3f2vt2rVZc7Gpr6/X/v379frrr+uYY44JbVtyOM/ciJEbMXIjRnk10DlNKr+8xmdaAgCQRGFFWvpnejXaM/bbCjl/AZgrT+4qzV/Umu3Cisr+FJzEyI0YuRGjolVdXZ11s/2BV1lZqalTp2rNmjWZbT09PVqzZo0aGhqs/TY0NGS1l6TVq1dntU//Yff73/9eTz31lA4//HDnfDdu3KiKigqNGjUq6kMsHZxnbsTIjRi5EaOiFSWnSeWX17jSEgAShLeHI2dmkWfe9xen/n1RVqjTbaL8FzLbhK3c57I6HrbCHxUxciNGbuUSo5glIa+1tLRozpw5mjZtmqZPn6477rhDu3fv1ty5cyVJ5513no488kgtXrxYknTJJZfo5JNP1q233qozzzxTjz76qF544QXde++9kg78YffFL35RGzZs0OOPP67u7u7M54KNGDFClZWVam1t1fr163Xqqafq0EMPVWtrqxYuXKi/+qu/0mGHHRZjNEpMuZxnPBeFz8HWfy6IkVu5xChmSchpUnnltZyutFy8eLE+8YlP6NBDD9WoUaM0c+ZMbdq0KavNnj17tGDBAh1++OEaNmyYZs2a1esy1M2bN+vMM8/U0KFDNWrUKH3ta18r32/SAwAMmETmNbNgNLf5C0j/NvO+2T7dT8rSxhy/P6vptnHN+7nUZrailxhlI0ZuxMgt6h+YRejss8/WLbfcomuvvVZTpkzRxo0btWrVqsyXEmzevFlbt27NtD/ppJO0fPly3XvvvZo8ebJ+8IMf6LHHHtOxxx4rSXrjjTf0b//2b/rTn/6kKVOmaPTo0Znbs88+K+nA2/oeffRRnXzyyfrYxz6mf/zHf9TChQszfyDmAzktYPykn2fEKBsxciNGbiWc06TyyWtSjldaPv3001qwYIE+8YlPaP/+/brqqqt0xhln6Le//a0OOeQQSdLChQv1xBNPaOXKlaqpqVFzc7POOuss/fKXv5QkdXd368wzz1RdXZ2effZZbd26Veedd54GDx6sb37zm/E/QgAoJn1N+K4+YZW4vGZbQbb9+wWtSgetQNu2ha1km8cF9RtUxNrmErY67lo5N1f5iVHwfmIUjBhFi1HcEpLXmpub1dzcbN23bt26Xtu+9KUv6Utf+pK1/bhx4+R54ZM44YQT9Nxzz+U8z/4gpznGTtJ5xnMRMQrrw7XPv58YBSvhnCaVR16TcnzRctWqVVn3H3zwQY0aNUptbW36sz/7M+3cuVP333+/li9frtNOO02S9MADD2jixIl67rnndOKJJ+pnP/uZfvvb3+qpp55SbW2tpkyZohtvvFGXX365rrvuOlVWVsb36AAACJG4vBa1SPMLqi9cq9KpgHbpgrGvhWD6uFwfi22+tr6IETEKQ4ziixGKDjnN0i7p5xkxIkZhiBE5Df37Ip6dO3dKOvAed0lqa2vTvn371NjYmGkzYcIEHXXUUWptbZUktba26rjjjstctipJTU1N6uzs1EsvvWQdZ+/evers7My6AUBJ+r/PSYnzpj5+7sqSJUs0btw4DRkyRPX19Xr++edD2+/YsUMLFizQ6NGjVVVVpY9+9KN68skn+zT2QBnwvOYv5PzFn8m/PWhl3V+seZb96d9tBaKtL9t+f/9h8wlaZTfnmpK7mCVGxMjcToyyxzD1JUZxSlBeKzfktIC2STnPeC4iRiZi1HsMEzmt7PT5Rcuenh5deuml+uQnP5l5H3x7e7sqKys1fPjwrLa1tbWZD/Fsb2/PSoLp/el9NosXL1ZNTU3mNnbs2L5OGwAQwYoVK9TS0qJFixZpw4YNmjx5spqamrRt2zZr+66uLn3mM5/R66+/rh/84AfatGmTvve97+nII48s8Mz7LhF5zaxZglaJzQLNLNZshaX/WPN3s5A0i0BbUWn2k0u9FVSgBs0paNywsYmRe2xi5B67nGOEokZOM/pO6nlGjIiROT9iFIycVpb6/KLlggUL9OKLL+rRRx+Ncz5WV155pXbu3Jm5bdmyJe9jAsBA8Lz83HJ12223af78+Zo7d64mTZqkpUuXaujQoVq2bJm1/bJly7R9+3Y99thj+uQnP6lx48bp5JNP1uTJk/sZkcJJRF5L/1vZCkjXv6OtWExvN5l9pizbbP3a+rAJW023rc6HjRvUNzEiRsQovzGKSVLyWrkhpwWMk7TzjBj1Hjeob2JEjMhpZalPL1o2Nzfr8ccf189//nN94AMfyGyvq6tTV1eXduzYkdW+o6NDdXV1mTbmN9Sl76fbmKqqqlRdXZ11A4BSFPfbDTJvO5B6vXVr79691jl0dXWpra0t6+1jFRUVamxszLx9zPRv//Zvamho0IIFC1RbW6tjjz1W3/zmN9Xd3R1/kPIgMXktXfwFrSCnizb/NpugPsKOCxvb32/YfFz9mwWx2WfQNn9BTIzs24hR+Dj++8QoeFse/nDKZ16DHTnNMba/37D5uPrnucjdPzFy90+M3P2T08paTi9aep6n5uZm/ehHP9LatWs1fvz4rP1Tp07V4MGDtWbNmsy2TZs2afPmzWpoaJAkNTQ06De/+U3WWwxXr16t6upqTZo0qT+PBQAQYuzYsVlv31q8eLG13dtvv63u7m7r28OC3hr2xz/+UT/4wQ/U3d2tJ598Utdcc41uvfVWfeMb34j9ccQpcXktqOhLF12uFXb52nnqXRS6ijf/qrZrjKD5BBWi/n3+Y4KKXc/SPqwwJkbhbf3zI0bEyNbW9UcnEo+cZjkuqF0SzjOei+xtiRExsvVBTitbOX17+IIFC7R8+XL9+Mc/1qGHHpr547WmpkYHH3ywampqNG/ePLW0tGjEiBGqrq7WxRdfrIaGBp144omSpDPOOEOTJk3SV77yFX37299We3u7rr76ai1YsEBVVVXxP0IAKCb5+DDm/+tvy5YtWVeqx/mc29PTo1GjRunee+/VoEGDNHXqVL3xxhu6+eabtWjRotjGiVvi8lrQCnOQsILMVkCabf1tzELQNQ//MWbx7B83aAz/Ntu8gh4bMXr/GGKUvY0YBc+1LzGKSx7zGrKR0wL6SfJ5RozeP4YYZW8jRsFzJaeVlZxetPzud78rSTrllFOytj/wwAM6//zzJUm33367KioqNGvWLO3du1dNTU36zne+k2k7aNAgPf7447rooovU0NCgQw45RHPmzNENN9zQv0cCAAgV9eM1Ro4cqUGDBlnfHhb01rDRo0dr8ODBGjRoUGbbxIkT1d7erq6uLlVWVvZv8nlSFHnNLO78zEIv6FizADT3u4633XcVqWHbXftzLTiJkRsxciNGKHLkNJXGeUaM3IiRGzFCicjpRUsvwieEDhkyREuWLNGSJUsC23zwgx/Uk08+mcvQAFAW8vFhzLn2V1lZqalTp2rNmjWaOXOmpANXUq5Zs0bNzc3WYz75yU9q+fLl6unpUUXFgU8e+d3vfqfRo0cn9gVLKcF5zV8s+n+GFWkmf3vbcWEFpb+PsPthfQYdG6WgjFJwEiM3YuRGjPIuCXmtXJDTQu7bjkvSeUaM3IiRGzHKO3Ja4fX528MBAKWrpaVF3/ve9/TQQw/p5Zdf1kUXXaTdu3dr7ty5kqTzzjtPV155Zab9RRddpO3bt+uSSy7R7373Oz3xxBP65je/qQULFgzUQyhOUVfCPaNtynILa+/v09zuBfxua2Obh4s5bq6FGjFyI0ZuxAjIP84zN2LkRozciBFKWE5XWgIA8sxWHMTRZ47OPvtsvfXWW7r22mvV3t6uKVOmaNWqVZkv59m8eXPmikrpwJf8/PSnP9XChQt1/PHH68gjj9Qll1yiyy+/PK5HUV5sK9ieb18uq862Nmaf5phh29LbPaNNlLkE9RXEtppvO44YZd+3HUeMsu/bjiNG+ZGQvIYBxHlm75Pnot6IUfgYtj6JUW/ktJLCi5YAAKvm5ubAt4OvW7eu17aGhgY999xzeZ5ViTOLOX/R1Zfiy1YEBfVpFpEufSkWc308QYUwMQofgxi5xyBG0ccA+orzzD0GMXKPQYzcYxCj6GOg6PCiJQAkiOel5MX8DXJx94c8SwX8boqyimyuYoet5LqKxFwErZ7brgBwjWe7QoAY9d6WPpYYESNzjFxjFDPyWpnjPOu9LX0sz0XEyByDGNmPJ6eVNT7TEgCSxov5huKVy7+fZ/ndPN5f3Prbho0Tpd9032Zb20q8v72tD7Otq44jRsTI1ofZlhjZt+USo/4gr0HiPAtqFzQ/F2LkRozcyjVG/UFOKyhetAQAIEnMgsssZjzfPv82c0Xav81WzPnbBu03i9QoBaBtflGPDWobtnpOjOz3iRExiqI/xwJRcJ7xXBQFMXIjRm7ktJLE28MBIEF4ywGcBVZQgRi0UusvAm1924pTF/8cgvo020dZKY+KGEUf37WfGLn3l3OMYkBeK3OcZ9HHd+0nRu79xMi9v5xjFANyWuHxoiUAAEkWVOC5Cj+znZ/rGBvbCrhrDlGuCoijTiNGbsTIjRgB+cd55kaM3IiRGzFCieBFSwBIEk/BK5796RPFz1+c9WV1O+iYXFfHbX1GmUtfikv/nIPeNhQ0BjFyj0GM3GOUc4ziQl6DDedZbmMQI/cYxMg9RjnHKC7ktILjMy0BAEgKfyFke/tOUHEapdiJY0XaLNSC+oxafJmFdNh+f/FJjOz7iRExCtKXGAH9xXkWvJ/nImIUhBi5kdPKCldaAkCi+Jcd4+wTRSFs1Tmo0Iz6X8a/6hyVeYzreHPlPJfxo8zNFRNiRIyIUTwxihV5rWyR08LxXORGjNyIUYGR0wqNKy0BAEiKoBXmoO1Ra5xcCs7+rMgXoqgkRm7EyI0YAfnHeeZGjNyIkRsxQgnjSksASBLz7RNx9YniEFSY2bb3pYjzF59BhWhQv7ZjzZ+5jO/flh43Sj/EiBgRo9zG929Lj9uXK2f6irxWvjjPeC4iRrmN79+WHpcYkdPKHC9aAkCSkAiRqyiFZFrK+D2XIi/sWFshaes/ruI5V8TIjRi5EaO+Ia8hF5xnbsTIjRi5EaO+IacVHG8PBwAgKcyixbP8bhZLrqIu1+1BhZNn/IxS3OZaUKYL1fQ4nnqPS4yIkQsxcosSI6C/OM94LnIhRm7EyI2cVtK40hIAksRLHbjF3SeKg/lP5V9tznVl2yaXgtF2jGt8c79tvKiPIWg1nhhlz4MYhSNGbkExigt5rXxxnmXPg+eicMTIjRi5kdNKDldaAgCQVGaBZivozPZhggpKl7DCL2jV3j/3oDb+fbYC1Xa8bXxiRIyIUXgb/76+xgjoL86z3sfbxidGxIgYhbfx7yOnlTyutASABPG8A7e4+0SR8NR7dThoZTnqtrA2tgLQtlpvirKCnesKd9TVe7M4JUa99xEj9z5ilPu+PiKvlTFymnsfz0XufcTIvY8Y5b6vj8hphceVlgAAJEVKeSmwAplFUtjYcRVUYWNGGYMYuREjN2IE5B/nmRsxciNGbsQIJYwXLQEgSbw83VCc0ivSUd/KY/575/p2n6AxggpFV/+2/UGPJ2g+UcYgRu4xiJF7DGKUH+Q1pHGe8VwUZT7EyD0fYuSeDzmtZPCiJQAASWEr7tKFZ3q/Z2zzH2eutEctKoMEvUXHC9hu9hnluKDC1tWHfz8xCu4/vZ8YBfef3k+MgHhxngXPwdZ/ej8xCu4/vZ8YBfef3k+MUCL4TEsASBK+ka68+YtLs+C0tQu6n+t4NuYcworZoHma+6M8Fle/xMjdLzFy90uMcuu3P8hr5YvzzN0vMXL3S4zc/RKj3PrtD3JawfGiJQAkSMo7cIu7TxSZsNol14IvKrOflPEz1+Pk2BalTS6Fd9g+YuTeR4zc+8o1Rv1EXgPnmW8bz0Xu44iR+zhi5D6OnFYyeHs4AABJ5VoR969mBxU8UQshf9/+/oJ+msfZjgk7Lip//2H7g+4TI2Jk9h+2P+g+MQL6j/OM56Jc5kWM3PMiRu55kdOKHldaAkCShBUP/ekTxS1otThdcPp/D1tVdu03+7b9jHJMUD+5jJ8rYuRGjNyIUfzIazBxnrkRIzdi5EaM4kdOKziutAQAIKn8BaX/vl9KvQs7c7/t96CxzH76UkgFrbpHHT/KdnM/MXIfR4zcxxEjIH84z3guCho/ynZzPzFyH0eMUAK40hIAkoQPd4Zfrv90/SnQgsbyF7xmG1tRbFsRz2WV3d9HFMQo+nFRESO3coxRX5HXkMZ5Fv24qIiRGzFyK8cY9RU5reC40hIAgCSyrVRHWWmOWrC52phjmcVk+nf/Kr2/TZTVcduczP78923t/T9d4xEj93jEyD1eOcYI6C/OM56LguZEjNxzIkbuOZHTShYvWgJAknh5uqH4+IutKP+OZjGYy7+72dYseKMUkGabKG39920r8a7jiJH7OGLkPo4Y5Rd5DRLnWZTjiJH7OGLkPo4Y5Rc5reB40RIAgGIQpSCLuvpubkvluN9WIAbNz1ZgmkVxytgWVLy5YkCMiBEx6t1fX2IE5BvnGc9FxKh3f8QoeExyWtniMy0BIEnysdpGAi8uZkHnL9KiFJ5h7Wyr6ba+o6x2RxVUnJpzyWU8YuRGjNyIUWGQ18ob55kbMXIjRm7EqDDIaQXHlZYAkCRenm4oHq4iLc22Am22c63KB/0MOtZWFIb9/wr7/xc0/yjjECNiFHQcMXIfl0uM4kBeK2+cZzwXBR1HjNzHESP3ceS0kseLlgAAJE2UAiasQEwfn0vxZm4PK3KDVrQ942dK76/Eu/qwjRfWnhgRI1sfxMjdR64xAvqL84znIlsfxMjdBzFy90FOK3m8PRwAksRLHbjF3SeKg1lk+QvHoN/9bWVsM/v2F4FhhWMu/2X8/QWt6oetxAc9viD+dsTIPT9i5J4fMcov8lr5Iqdl73PNjxi550eM3PMjRvlFTis4rrQEACApzILQLCzNdv7VZFtbf5ugvvzHhxWctoLQNra5zz8Ps7+wgjpsHsSIGPn7I0bZv8cVI6C/OM94LjL7I0bZvxOj3shpMHClJQAkSMo7cIu7TxQRs/izFYLmfld/UfqRZb+tbdj8PMv+KHOwzce2PcocXH3ZECNiFNZvucUoZuS1Msd5Fryd5yJiFDYH23yIUXa/tvmQ00oOV1oCAJA0QQWb59gv43eznWfZH1Yo+dvbCseU7IWqrV8vYHvQHIP6DjouPQYxCj4uPQYxCj4uPQYxAuLDecZzkdnWdhwxym5rO44YZbe1HUdOKzlcaQkASeIvLOLsE8XFVTSabW3FmW17yvjp/z3X9jZhxbC/L9u2oP7DHp/tWGKUvd12LDHK3m47lhjFh7wGzrP38Vzk7p8YufsnRu7+yWklgystUd5SKS39718M9CwAIFsuRVZcBVlYP/4V86DCN+h+SvYC1FZEe+o9RlCxTYyyjydG2ccRo+xt/YlRiViyZInGjRunIUOGqL6+Xs8//3xo+5UrV2rChAkaMmSIjjvuOD355JNZ+z3P07XXXqvRo0fr4IMPVmNjo37/+99ntdm+fbtmz56t6upqDR8+XPPmzdOuXbtif2yJx3mWfTzPRdnHEaPsbcTo/X7JaaHKJa/xoiXK2ve3PKvxg4fpe5t54RJAwviLQHNl2VWoptS7iAwrDG2CxnD1a87Ftd1WoNpW7F3jECNiZPZPjIKPzzVGRW7FihVqaWnRokWLtGHDBk2ePFlNTU3atm2btf2zzz6rc889V/PmzdOvf/1rzZw5UzNnztSLL76YafPtb39bd911l5YuXar169frkEMOUVNTk/bs2ZNpM3v2bL300ktavXq1Hn/8cT3zzDO64IIL8v54E4nzLHs7z0XZ/ROj4OOJETnNopzyGi9aomz96E/Pq6biYEnSUQcN44pLJEJKynzAc2y3gX5QiC6osDKLrqB/1KCVbPMYz9GH2T49vq1wtRXHnmWb+bttXv525nFBq+vmHMP6tfUdNBdiFNyHOWZQH2Z7YtS7D7N9UmIUoyTktdtuu03z58/X3LlzNWnSJC1dulRDhw7VsmXLrO3vvPNOzZgxQ1/72tc0ceJE3XjjjTrhhBN0zz33SJI8z9Mdd9yhq6++Wl/4whd0/PHH6+GHH9abb76pxx57TJL08ssva9WqVbrvvvtUX1+vT33qU7r77rv16KOP6s033+x7QIsJ59n77Xguss/L344Y2eflb0eM7PPytyuDnCaVV17jRUuUrb8YW5/5fWfP/+rCcZ8ewNkAgLKLO/8tvc+Ua/HqH8fWV1BxZ5tDuq3/GPO+eYxtBTzK/IIKYGIU3AcxIkaueeTSLqE6Ozuzbnv37u3VpqurS21tbWpsbMxsq6ioUGNjo1pbW639tra2ZrWXpKampkz71157Te3t7VltampqVF9fn2nT2tqq4cOHa9q0aZk2jY2Nqqio0Pr16/v+oIsJ55m7HTFytyNG7nbEKLd2CRUlp0nll9d40RLly/PUdOTH9V5Pl/7yAw2S53qWBgrAS+XnhuKTMn6meZY2Yb/nOl7U/bb5BRWtfRGlH2IUvQ0xcrchRvmRx7w2duxY1dTUZG6LFy/uNfzbb7+t7u5u1dbWZm2vra1Ve3u7dcrt7e2h7dM/XW1GjRqVtf+ggw7SiBEjAsctaZxn0dsQI3cbYuRuQ4zyY4BzmlR+eY1vD0d58zz9xQemD/QsAOAAW9EWtvIcR/9+QWOHHRM2Z3NfX4rSKH0QI2LkQozc4vyjsUC2bNmi6urqzP2qqqoBnA164Txz90+M3P0TI3f/xCha/wlHTrPjSksASBLbWzviuKE42Aq0qAWX+VYfc5u//6j/J6KM7e/Ttnoe1F8ucwi6OoAYvX8MMXL3T4zc/ecjX+Qxr1VXV2fdbH/gjRw5UoMGDVJHR0fW9o6ODtXV1VmnXFdXF9o+/dPVxvxChP3792v79u2B45YczjP7MTwXufsnRu7+iZG7/xLMaVL55TVetAQAIEnSBZZt9TnsGNtquq34c/UTtN22zyyYzXa5rMqHCYoFMQpuS4zcbYlR/9oWicrKSk2dOlVr1qzJbOvp6dGaNWvU0NBgPaahoSGrvSStXr060378+PGqq6vLatPZ2an169dn2jQ0NGjHjh1qa2vLtFm7dq16enpUX1+vssF55m5LjNxtiZG7LTHqX9siUm55jbeHA0CSBCX3/vaJ4mErNl1FV64FXND/iSgr3GlmH1HmGSSo0La1s109QIx6j0GMwtsRo8JJQF5raWnRnDlzNG3aNE2fPl133HGHdu/erblz50qSzjvvPB155JGZzw+75JJLdPLJJ+vWW2/VmWeeqUcffVQvvPCC7r33XklSKpXSpZdeqm984xv6yEc+ovHjx+uaa67RmDFjNHPmTEnSxIkTNWPGDM2fP19Lly7Vvn371NzcrHPOOUdjxoyJLRSJx3kW3o7nInc7YuRuR4wKJwE5TSqvvMaLlgAAJIXn+xm22t1fUfsMKyTN7f77UQrQvjzGdMHs/5nL8bkgRtHGioIYuSUtRiXm7LPP1ltvvaVrr71W7e3tmjJlilatWpX5woHNmzerouL9N6CddNJJWr58ua6++mpdddVV+shHPqLHHntMxx57bKbN17/+de3evVsXXHCBduzYoU996lNatWqVhgwZkmnzyCOPqLm5WaeffroqKio0a9Ys3XXXXYV74AONnBaO5yI3YuRGjMpSOeW1lOcV31cmd3Z2qqamRqfoCzooNXigpwOgjO339mmdfqydO3dmfXByrtLPa+P+8R9V4UsMcejZs0ev/8M/9HuOyJ/0v/9RN33jwL9/rqvO/mJVjmPjXJU255lrsRnn2FHbEyN3e2Lkbl/CMerZs0ebr7iavIY+I6fFMHbU9sTI3Z4YuduXcIzIacWPKy0BIEkS8pYDDLCwQs5cTY+y4mxrk+vbjqLO01VUhrXJpSAlRm7EyI0Y5R95DZxnbsTIjRi5EaP8I6cVHF/EAwBA0viLl7CCz1/omQWPf5tZaKa3mUVj0DiuuZor9S5B40aZj+s4cxxi1Ps4cxxi1Ps4c5xyjhHQX5xnPBcRIzdi5EZOK0tcaQkAScLqHaTgItH/M+gY/33z395sE3V128U/N38RarJt7+u4xCj6mMTIPSYxyh/yGjjPoo9JjNxjEiP3mMQof8hpBceVlgAAJFXKd/MXNGZhF6UQtRVEruOjilLc2ubjL/xcfdjapNsRo+Bx0u2IUfA46XbECMgvzrPwcdLtiFHwOOl2xCh4nHQ7YoQSwZWWAJAgKe/ALe4+UST8RVjYirJtFdwlShEXNHYufduODduWy5jm4yZG9mOIkXscYlQw5LUyRk5zj8NzkXscYuQehxgVDDmt8LjSEgCApPCvjJsKsZJsG9tVSMUxj7AxzJV0YhS8jxi59xEj9z7+eEJcOM+C9/Fc5N5HjNz7iJF7Hzmt6HGlJQAkiZc6cIu7TxQf/9t3/L8HtYnST1/G7s9/nyhj+/eHtXc9fmJEjKK0J0bu9nGnDPIaJM6zsHa29sSIGEVpT4zc7clpRY8rLQEASKKU3G99iVLj+PuR8XvYMUFsfQX1GbUG8z/OsCsCbPuIETEy+yFG7j5dMQLixnnWuw+ei4hRGGLkRk4rC7xoCQBJ4uXphuLgKrhy/bdM//sHrbhHLSD922xFoL//oH7C+vX3GXRFQHofMSJGQf0SI3e/UWMUJ/Ja+eI847koqF9i5O6XGLn7JaeVBV60BAAgKYKKTFtxZmMWPimFF3RRitGwcf2FcrqPlO93V+EZdRU87DEQo97tiFHwOEHHEKPc2gFRcJ4FjxN0DDHq3Y4YBY8TdAwxyq0dEo3PtASABOEb6ZDhLwSDii7XKritkAxb6Q4bK4g5R9u8zbn4he1zIUZuxMiNGOUVeQ2SOM+iIEZuxMiNGOUVOa3weNESAJLEXOmMq08UH1eR5lqNtq2Kp/9/5VrkmavvYfPyz811jGufCzFyI0ZuxCi/yGuQOM+iIEZuxMiNGOUXOa3geHs4AADFzFZc+nm+n7aV8zD+AjZ9izqPoGI46tj+tv0t5oiRGzFyI0ZA/nGeuREjN2LkRoxQJLjSEgCSxFP8bxEgYRcXf3FororLcl8KLzz9q+lmP0Hjh+0PYh4XNu9c+ra1JUbZiJEbMXLL11Ur5LXyxnmWjeciN2LkRozcyGklgystAQBICrOYTG8zBbUJKnpS6l3sha1km+ME9evf7u/fVhjbHlvY2Lb96VVzYhS8nxgFI0bRYwTEgfMsfD/PRcGIETHytyWnlTWutASAJEkXHnH3ieIQtUjzcxWEQX2YBaVZMLrGDxvXVuC6Hottvra+iBExCkOM4otRXMhr5YvzjOeiMMSIGJnbyWmw4EpLAACSwlx5DiqM/NuDVs39xZpn2Z/+PWwFPagQlLHdNR9b0Wgek765illiRIzM7cQoewxTX2IExIHzjOciczsxyh7DRIx6j2Eip5UdrrQEgCQJKjL62yeKg1mcRVnlthVrnqWNrU9bm6AiNr3P1i7XleygAtWck207MSJGZp/EKFh/YhQX8lr54jzjucjskxgFI0Zu5LSyxJWWAAAkhWf8DNpmkzJuYYWd2WfKss3Wr60Pm7DVdNvqfNi4QX0TI2JEjPIbI6C/OM96jxvUNzEiRsSInAYrrrQEgARJeYr9G+li/4Y75E+6+AtaQTYLyaCiLKgPf1+5jG3rN6ywDVsBN/uxjWluS983f9rGIEbEyLbff58Y2fen78eMvFbGOM/s23guIka2bcSInAYrXrQEACApgoq+oNXloOP8BaEUXuApYjtbQRU011z2BRW7tvmHFcbEKLytRIyIUfQYAXHgPLOPx3MRMXLtI0bufeS0ssHbwwEASApbceUqNsP6Mo8Lum/2E2UeXsDv6XaepU1QH0HzivIYgtrZ5hblOGLkPo4YuY8rhRgB/cV5ln2f5yJiRIzIacgZV1oCQJKYiTquPlG8/KvIQcVhWFGaLgBt7XJdgfff928POt5VMEYd14UYuREjN2KUH+Q1+HGeuREjN2LkRozyg5xWcLxoCQBA0viLRf/PsCLN5G9vOy6soPT3EXY/rM+gY6MUlFEKTmLkRozciBGQf5xnbsTIjRi5ESOUIF60BIAE4cOdy1zUlXBz5TtKMWi2CyoCzZX5sII113nYxu3PlQNhYxOj3v0RI/v8wsYu5xjFhLxWxshpbjwXuREjN2JUMOS0wuMzLQEASBqzCEz/9Bd5/qIvjG2V3TN+mmOGbUtvNwvOvhZcYQWn2WfQfImR/T4xsvdJjHrjDybkE+eZvU+ei3ojRuFj2PokRr2R00oKV1oCQNKQaMuXWcz5V5H7spps+78U1KdtNT2Mq1gMW2GPOk5QIUyMwscgRu4xiFH0MeJAXitPnGfuMYiRewxi5B6DGEUfIw7ktILiSksAAJLEv6rdl8LO1pdtZTxsXP8YfRG0em4rcl3jmVcIpH8So+xtxMi9jRi5t/GHGOLGedZ7G89F7m3EyL2NGLm3kdNKAi9aAkCSeHm6oTjl8m/nWX63FX22wjJsnCj9pvs224YVmUFXCphtXYU1MSJGtj7MtsTIvi2XGPUVeQ1pnGc8F9n6MNsSI/s2YvR+e1sfZltyWsng7eEAkCB8uDOyirWU7MWbWTyabczjUgHtJHc/QW2D2OYX9dio4xIjYhQFMXLrz7FRhyCvlTfOM56LoiBGbsTIjZxWknjREgCAJHEVWP4C0i+o4ElvtxWC6f1mceoSVsTa5pIK2NZXxCj6+K79xMi9v5xjBPQX51n08V37iZF7PzFy7y/nGKEo8aIlACSJp/jfIsDqXXELKvBchZ/Zzs91jI2/eI06h1yuCugPYuRGjNyIUX6Q1+DHeeZGjNyIkRsxyg9yWsHxmZYAABQDf3HmBWwPE3RMLqvjtqLR30fKuJnH58ozfncVdcSIGNkQIzczRkC+cZ7xXGRDjNyIkRs5raRwpSUAJAifk1Lm0sVnyvfTv08KLv5cRV0cK9K2IjOoXZTxzMcXVqimY+IZ94lR9u/EiBjZ5BqjGJHXyhg5LXg/z0XEKAgxciOnlRWutAQAICn8BaWtADOLNNtbboL0pSAyj7EVvLb2tja5XAkQ1oYYudsQI3cbYgTkH+eZuw0xcrchRu42xAgljBctASBJvDzd+mDJkiUaN26chgwZovr6ej3//PORjnv00UeVSqU0c+bMvg1czoL+rYK2Ry3Uoq5cp9sGFY/9KRzjKiqJkRsxciNGhZOgvIYC4zxzI0ZuxMiNGBUOOa3geNESANDLihUr1NLSokWLFmnDhg2aPHmympqatG3bttDjXn/9df393/+9Pv3pTxdopiUmqDCzbe9LEecF/G72G7TSnfL9bvuZy/j+bbn0Q4zciJEbMQLyj/PMjRi5ESM3YoQSlvOLls8884w+//nPa8yYMUqlUnrsscey9nuep2uvvVajR4/WwQcfrMbGRv3+97/ParN9+3bNnj1b1dXVGj58uObNm6ddu3b164EAQElIyOrdbbfdpvnz52vu3LmaNGmSli5dqqFDh2rZsmWBx3R3d2v27Nm6/vrrdfTRR+c+6AAoiZwWpZBMSxm/5/J/w3Zs0FuRgorIoOI536voxMiNGLkRo75JSF4rF0Wf1zjP3IiRGzFyI0Z9Q04ruJxftNy9e7cmT56sJUuWWPd/+9vf1l133aWlS5dq/fr1OuSQQ9TU1KQ9e/Zk2syePVsvvfSSVq9erccff1zPPPOMLrjggr4/CgAoEekPd477JkmdnZ1Zt71791rn0NXVpba2NjU2Nma2VVRUqLGxUa2trYFzv+GGGzRq1CjNmzcv1pjkU+Jymlm02ApKs7gxi0GbXLYHFU5mIRnlrTy5FpP+Qtgs5IIKWWJEjGzHEaNwUWIUk3zmNfSWqLzGecZzkQsxciNGbuS0kpbzt4d/9rOf1Wc/+1nrPs/zdMcdd+jqq6/WF77wBUnSww8/rNraWj322GM655xz9PLLL2vVqlX61a9+pWnTpkmS7r77bn3uc5/TLbfcojFjxvTj4QAAgowdOzbr/qJFi3Tdddf1avf222+ru7tbtbW1Wdtra2v1yiuvWPv+xS9+ofvvv18bN26Ma7oFkbicZhZp/hVpc3W6L3IpGG3HuMY399vGi/oYglbjiVH2PIhROGLk5rryBUUlUXmN8yx7HjwXhSNGbsTIjZxWcmL9TMvXXntN7e3tWVfn1NTUqL6+PnN1Tmtrq4YPH55JgpLU2NioiooKrV+/3trv3r17e10hBAAlycvTTdKWLVu0c+fOzO3KK6+MZcrvvvuuvvKVr+h73/ueRo4cGUufSZCvnCblkNfMAs1W0JntwwQVlC5hhZ9naZfennK08e+zFai2423jEyNiRIzC2/j39TVGfZXHvIbcDPjfapxnvY+3jU+MiBExCm/j30dOK3k5X2kZpr29XZKsV+ek97W3t2vUqFHZkzjoII0YMSLTxrR48WJdf/31cU4VAMpOdXW1qqurne1GjhypQYMGqaOjI2t7R0eH6urqerV/9dVX9frrr+vzn/98ZltPT4+kA8/vmzZt0oc+9KF+zr7w8pXTpJC8li5c/EWeWXjKty/KtrA2tgLQtlpvMucYNk7UFe6oq/dmcUqMeu8jRu59xCj3fSh6Bf9bjZzm3sdzkXsfMXLvI0a570PRKIpvD7/yyiuzrg7asmXLQE8JAPIjAat3lZWVmjp1qtasWZPZ1tPTozVr1qihoaFX+wkTJug3v/mNNm7cmLn9+Z//uU499VRt3Lix19vSEZLXUipsgWX+3wgbO65V4LAxo4xBjNyIkRsxKpwE5DXkFzktYEyei9xjEiP3mMTIPSY5raTFeqVl+gqcjo4OjR49OrO9o6NDU6ZMybTZtm1b1nH79+/X9u3brVfwSFJVVZWqqqrinCoAIERLS4vmzJmjadOmafr06brjjju0e/duzZ07V5J03nnn6cgjj9TixYs1ZMgQHXvssVnHDx8+XJJ6bS8m+cppUg55Lb0ibVvBDtom3/agVXYZ7aKMbzvO1X/Qynsuq/9RxyBG0eZIjNxzJEYoUQP+txrnGc9FUeZDjNzzIUbu+ZDTSkasV1qOHz9edXV1WVfndHZ2av369ZmrcxoaGrRjxw61tbVl2qxdu1Y9PT2qr6+PczoAUHSS8o10Z599tm655RZde+21mjJlijZu3KhVq1Zl3lK2efNmbd26NeZHnywDktNsxZ2/6PKvyNpWmM2V9ihFZZiU8dM2XlifUY7zjJ9Bc7D1n95PjIL7T+8nRsH9p/cTo7xISl7DAOQ1zrPgOdj6T+8nRsH9p/cTo+D+0/uJUV6Q0wov5ystd+3apT/84Q+Z+6+99po2btyoESNG6KijjtKll16qb3zjG/rIRz6i8ePH65prrtGYMWM0c+ZMSdLEiRM1Y8YMzZ8/X0uXLtW+ffvU3Nysc845h28OB4AEaW5uVnNzs3XfunXrQo998MEH459QHiQup5kr0GZxabYLup/reDbmHMKK2aB5mvujro6H9UuM3P0SI3e/xCi3flE0EpXXOM/c/RIjd7/EyN0vMcqtXxSVnF+0fOGFF3Tqqadm7re0tEiS5syZowcffFBf//rXtXv3bl1wwQXasWOHPvWpT2nVqlUaMmRI5phHHnlEzc3NOv3001VRUaFZs2bprrvuiuHhAECRS6+Cxt0nrBKb08IKrVwLvqjMflLGz1yPk2NblDa5FN5h+4iRex8xcu8r1xj1F3mtoBKZ1zjP3t/Gc5H7OGLkPo4YuY8jp5WMnN8efsopp8jzvF639FU1qVRKN9xwg9rb27Vnzx499dRT+uhHP5rVx4gRI7R8+XK9++672rlzp5YtW6Zhw4bF8oAAoJjxloPCSnxOc62I+1ezg/6do/77+/v29xf00zzOdkzYcVH5+w/bH3SfGBEjs/+w/UH3iVGfFVte2759u2bPnq3q6moNHz5c8+bN065du0KP2bNnjxYsWKDDDz9cw4YN06xZs9TR0ZHZ/5//+Z8699xzNXbsWB188MGaOHGi7rzzzqw+1q1bp1Qq1esW9I3dQRKd1zjPeC7KZV7EyD0vYuSeV5nnNKn481qsX8QDAADyIF1cmtIFp//3sFVl136zb9vPKMcE9ZPL+LkiRm7EyI0Ylb3Zs2dr69atWr16tfbt26e5c+fqggsu0PLlywOPWbhwoZ544gmtXLlSNTU1am5u1llnnaVf/vKXkqS2tjaNGjVK//zP/6yxY8fq2Wef1QUXXKBBgwb1+hiWTZs2qbq6OnN/1KhR+XmgA4nzzI0YuREjN2IEFX9e40VLAEiSsBXP/vSJ4pQu0lLGfb+U8bvZJuj3oLHMfvpSKJqr7ultfSmIoxbSxMh9HDFyH0eM4ldEee3ll1/WqlWr9Ktf/UrTpk2TJN1999363Oc+p1tuucX6mY47d+7U/fffr+XLl+u0006TJD3wwAOaOHGinnvuOZ144on667/+66xjjj76aLW2tuqHP/xhrz/uRo0apeHDh+fnAQ40zjOei4LGj7Ld3E+M3McRo/gVUU6TSiOvxfrt4QAAIEa5Flv9KXqCxvIXvLbxPOO+rW2Ux2GOE7UoJEbRj4uKGLmVY4wSqLOzM+u2d+/efvXX2tqq4cOHZ/6wk6TGxkZVVFRo/fr11mPa2tq0b98+NTY2ZrZNmDBBRx11lFpbWwPH2rlzp0aMGNFr+5QpUzR69Gh95jOfyVzRUjI4z6IfFxUxciNGbuUYowSKO6dJpZHXeNESAJLEy9MNxcdWwLlWmtNtovybu9rYVuT9q9bmKn7KaOOfT1Tmar3Zv629/6drPGLkHo8Yuccrxxj1Rx7z2tixY1VTU5O5LV68uF9TbW9v7/W2tYMOOkgjRowI/Ayu9vZ2VVZW9rqKpLa2NvCYZ599VitWrNAFF1yQ2TZ69GgtXbpU//qv/6p//dd/1dixY3XKKadow4YN/XpMicF5xnNR0JyIkXtOxMg9J3KaVSnkNd4eDgBAEvmLrSgFXLqdv+iLWqiZbc0+zAIzrI8oRaJtPNcxtuOIkfs4YuQ+jhgVrS1btmR9TlZVVZW13RVXXKFvfetboX29/PLLsc4tyIsvvqgvfOELWrRokc4444zM9mOOOUbHHHNM5v5JJ52kV199Vbfffrv+6Z/+qSBzyyvOM/dxxMh9HDFyH0eMilbUnCaVV17jRUsASBBXXu9rnygBUf4hbUWrn60Qta1+u/bb2gXNz1XQ+o91FcyuGBAjYuTqP2yMqPvNNqUYoxjlM69VV1dn/YEX5LLLLtP5558f2uboo49WXV2dtm3blrV9//792r59u+rq6qzH1dXVqaurSzt27Mi6KqWjo6PXMb/97W91+umn64ILLtDVV1/tnPf06dP1i1/8wtmuKHGe8Vzk6j9sjKj7zTbEyN2mFGMUoyTkNKm88hovWgIAkCRRirRcjvcLKu7CVun7K6g4tRW6UccjRm7EyI0YlY0jjjhCRxxxhLNdQ0ODduzYoba2Nk2dOlWStHbtWvX09Ki+vt56zNSpUzV48GCtWbNGs2bNknTgm1I3b96shoaGTLuXXnpJp512mubMmaN//Md/jDTvjRs3avTo0ZHaJhbnmRsxciNGbsSorJRTXuNFSwBIEu//bnH3ieLhKtLSgopT27agMYJ+Bh1r6yusyE3/34tynKv4DNtPjNz7iZF7PzHK7isuRZTXJk6cqBkzZmj+/PlaunSp9u3bp+bmZp1zzjmZb1h94403dPrpp+vhhx/W9OnTVVNTo3nz5qmlpUUjRoxQdXW1Lr74YjU0NOjEE0+UdOCtc6eddpqamprU0tKS+UywQYMGZf7ovOOOOzR+/Hh97GMf0549e3Tfffdp7dq1+tnPfpafB1sonGc8FwUdR4zcxxEj93HktFClkNd40RIAEiTlHbjF3SeKTFixJss+8984l2IvaHtYkRtWZKbUuwC2rci7ClrzMbj22xCj8LmY+4iRXbnHqJ+KLa898sgjam5u1umnn66KigrNmjVLd911V2b/vn37tGnTJr333nuZbbfffnum7d69e9XU1KTvfOc7mf0/+MEP9NZbb+mf//mf9c///M+Z7R/84Af1+uuvS5K6urp02WWX6Y033tDQoUN1/PHH66mnntKpp56avwdbKJxnPBfZ+iBGxMhsQ07Li2LPaynP84ruz9nOzk7V1NToFH1BB6UGD/R0AJSx/d4+rdOPtXPnzsifQWKTfl772IXf1KCqITHOUOreu0cvLb2q33NE/qT//Y9a/A1VHDzEXqQF/a6Y90ctSqPuC2IWleb8ZOwPmicxIkYKmBMxev8YBczJEqOePXu0+YqryWvoM3KaZX4y9gfNkxgRIwXMiRi9f4wC5kROK0lcaQkASeIpO+HG1SeKg1n0pYx9Zjv/fVvboALX/3t6vLCC0+zT/N1VpJoFZtAcgo4z50GMiFHYHIKOM+dBjMJjFBfyWvniPOO5iBhlI0a9jzWR02CoGOgJAAAAH7OgtBUyYcWerT+zT7Mff9sg/sIxaH6e76fZb9gcbPMJ6tc1B7MvYtS7rdkXMerd1uyr3GIExIXzLLxf1xzMvohR77ZmX8Sod1uzr3KLEYoaL1oCQNJ4Md9QfIJWvT3Hfhm/B62uBxWQJlsR6f89qPC19esFbA+ao6uoJkbEyGxrO44YZbe1HRf1D9j+IK+VN84znovMtrbjiFF2W9txxCi7re04clrJ4UVLAACSxlbEBBVgQcWObXvK+On/Pdf2NmHFsr8v8/GF9e9Ztvn7DRrfbBt1OzFybydG7u2lFCOgvzjP3sdzkbt/YuTunxi5+yenlQw+0xIAEqQYv5EOeeBawTbbxjVmEHOV21UYmkWmuT0Vcpw5n5SlnX97FMTIjRi5lUuMYkZeA+eZeC4iRsTI1paclukTwbjSEgCAJLIVY1FWtdO/2wrDsPumoDFc/ZpzcW03C03bGEGFJzHK3k6MsvsnRsHH5xojoL84z7K381yU3T8xCj6eGJHTyhxXWgJAkniKP7mSrItH0L+VuaIeVNQFrWSb22yr8+Y+s4i19W2uoPvv21bDg64KsM3Bv8/Vh3+OxIgY+fv17yNG9jn494XNt6/Ia+WLnPZ+O/8+novsc/DvI0b2Ofj3ESP7HPz7yGklgRctASBBeMtBmfMXcOb2oOIsl+LV35+tr1z22QpM8755TJSC099PUB/EiBi55uHvJ6gPYhQeo5iQ18oY51l2P0F9ECNi5JqHv5+gPogROa1E8fZwAACSKGX8TAsrWG2/5zpe1P22+cW5oh2lH2IUvQ0xcrchRkD+cJ5Fb0OM3G2IkbsNMUKJ4EpLAEgS3nJQ3mxFW9jKcxz9+wWNHXZM2JzNfX0pSqP0QYyIkQsxcovzj0azX/JaeeI8c/dPjNz9EyN3/8QoWv9xIKcVHFdaAgCQFLYCLWrB5Vl+N4ugVMD2KPNxtTHf5uPqL5c5BF0dQIzeP4YYufsnRu7++cMJceI8sx/Dc5G7f2Lk7p8Yufsnp5UErrQEgAThc1IQWGyGrRgHrabb2of9fwgaI31M2JxSlna5rMqHibqCT4x6j0uMgtsSo/61jdolea28cZ652xIjd1ti5G5LjPrXNmqX5LSC40pLAACSxFbY5XpMX9uGrXC75pXryr55bJTHGVb8uhAjN2LkVi4xAuLCeRbeLj2fsLnYECM3YuRWLjFCUeNKSwBIknwkX5J58fC/LSfKanNfRe0zbHXe3O6/H3acrU3U+aRX4/0/czk+F8Qo2lhRECO3pMUoTuS18kVOC8dzkRsxciNGhUVOKziutAQAICn6sootZf9h6Cp8cim2ohSOtvtR5trXQpMYuREjN2IE5B/nmRsxciNGbsQIJYwrLQEgSVi9gxS+6myupkdZcba1iVr8RV0tt80n6JigNlFW2MPGDpoLMSJGYf0EHUeM4kFeA+eZGzFyI0ZuxCj/yGkFx4uWAJAgfLgzJEUrJM3C02zr3+YvNIP6DSr4ohSl/vlEEVRUhxXbtnGJETGyjUuM7H32NUb9RF4D51nIfFzHmeMQo/A5EiNiRE4rObw9HACApPEXieaKblgRGnbfts3z/exPgWcWjUHFl217X8clRtHHJEbuMYkRkD+cZ9HHJEbuMYmRe0xihBLClZYAkCRmgRFXnyhOQSvH5sp4lELUVli6jo/K7DtoFd62kp9u7+rDNo7ZjhgRI2IUT4ziRF5DGudZ+DhmO2JEjIgROQ1caQkAQGLYVsbT+luQRTmmr4WYa25B23J9TOnilBiFj0OM3OMQIyD/OM/c4xAj9zjEyD0OMUIJ40pLAEiQlOcp5cW73BZ3f8gjsxDzK8RKctQVfNcxuQobI73Pttru6ocYufshRu5+yjFGMSKvlTFyWvA+nouIkQsxciOnlQWutAQAIIk84/eggjCXfvoydn+Kyihj+4vtsPaux0+MiBExCtefGAH9xXnWu11Y/8SIGBGjcOS0ssGLlgCQJF6ebig+/tXhoIIrl7cNpUUtBIPY+grqM2qh6H+cZl8pSzv/PmJEjMx+iJG7T1eM4kReg8R5ZuuD5yJiFIYYuZHTygIvWgIAkBSugivXoiZdCPlXooMK3bAC0r/NVgT6+w/qJ6xf19uWcilKiRExCuqfGEWPERAHzjOei4L6JUbufomRu19yWlngMy0BIEFS3oFb3H2iSNiKzJTvp2vV2CzizPZB923FqKsQTG8352ibd6792sYJOoYY9W5HjILHCTqGGOXWLgfktTLGeRY8TtAxxKh3O2IUPE7QMcQot3Y5IKcVHldaAgCQRP4CLajoMle6/YWpbaU6qCgyC8FcijxzjrZ5hxXN/SnUiJEbMXIjRkD+cZ65ESM3YuRGjFBiuNISAJIkrDDoT58oPmGFprlCbe63HZ9ua65WR+EfwzUv2wp52Hj9WQUnRm7EyI0Y5Rd5DRLnWRTEyI0YuRGj/CKnFRwvWgJAgvCWA+TMLDzN+0FFapTiM2yF2zYP27G2+7kUvkFFdC6IkRsxciuXGMWMvIaclMt5xnNR+Bxs/eeCGLmVS4xiRk4rPN4eDgBAkpgFo7ktaCU6aGU6qNAMW/HuS/FkHhdWDOdSZNuKXmKUjRi5ESO3qH9gArngPMvGc5EbMXIjRm7ktJLBlZYAkCR9TfiuPlEcbCvItn+/oFXpoBVo27awlWzzuKB+g4pY21zCVsddK+fmKj8xCt5PjIIRo2gxiht5rXyR08L381wUjBgRo7D+o+xL748bOa3guNISAICksBVpKfWtIHMVVSmjnVk8ugqosHH9/aS3hT0G/zxcfREjd1/EyN0XMXL3BfQX55m7L2Lk7osYufsiRu6+ULS40hIAEoTPSSlz/n+rKKvnKaNdep9ZqPqLvqDfbXNw9WUWqLYCOWyV3XZMWHtzBZ4Y2fshRsQo7DFEbR8T8loZI6fxXBT2GKK0J0bu9sQoWvuYkNMKjxctAQBICrPYshVf/u3+otBWLJq/m33a2oQVoamAdkHzDBJUTJtzsm0nRsTI7JMYBetPjID+4jzjucjskxgFI0Zu5LSyxIuWAJAknmJfEYy9P+SP5/tpFoRBK8hptmIxZdlu6zNl2RbUr9mHa5+tiAybU9RxiRExIkb5jVFcyGvli5wWfVxiRIyIETkNVnymJQAASRFWXKb3uYo3hfQRdlyUwtYcO6hwC+rfX+Da+gzaZv7hS4yIETEK77+/MQLiwHlm38ZzUfg4/vvEKHgbMQofJ6gNig5XWgJAwvC5JmUsqOgLW/W2HWcWduaqe5CwdlGLSy/HfUHFrm3+YYUxMQpvKxEjYhQ9RjEjr5UpzjP7eDwXESPXPmLk3kdOKxu8aAkASeJ5B25x94niYCuuwgqusCLSX0AG9RVUZEaZh/8Y/+/muK5C1lZMhxXgxOj9Y4hR9jZiFDzXvsQoLuS18sV59v4xPBdlbyNGwXMlRuFj+LeR08oCbw8HACDJPON3/80s9GzHpnztg/oOOz7ovqtIDdvu2p9rwUmM3IiRGzEC8o/zzI0YuREjN2KEEsGVlgCQIClPsb/lgLcwFCF/sej/GbU4lNHedpxZ2NkKPdf9sD6jrsrbRCk4iZEbMXIjRnlHXgPnmWO/vx9i5B6LGLnHIkZ5Q04rPK60BAAgKcyiJaiAM1e+U5ZbWHt/n2Gr4UFFlOf7GbR6HsQcN9dCjRi5ESM3YgTkH+eZGzFyI0ZuxAgljCstASBJbMVBHH2iuNhWsD3fvlxWnW1tzD7NMcO2pbd7RpsocwnqK4htNd92HDHKvm87jhhl37cdR4zyg7wGzjN7nzwX9UaMwsew9UmMeiOnlRRetAQAICnMYs5fdPWl+LIVQUF9mkWkS1+KxVwfT1AhTIzCxyBG7jGIUfQxgL7iPHOPQYzcYxAj9xjEKPoYKDq8aAkACZLqOXCLu08UkVTA76Yoq8jmKnbYSq6rSMxF0Oq57QoA13i2KwSIUe9t6WOJETEyx8g1RjEjr5U5zrPe29LH8lxEjMwxiJH9eHJaWeMzLQEASKpcCi7P8rt5vL+49bcNGydKv+m+zba2lXh/e1sfZltX0UuMiJGtD7MtMbJvyyVGQH9xnvFcZOvDbEuM7NuI0fvtbX2YbclpJYMrLQEgSVwFQF/7RPHwF2sp2Ys3s3i0rUib/djaSe5+gtoGsc0v6rFRxyVGxCgKYuTWn2OjIq+VN84znouiIEZuxMiNnFaSeNESABIk5R24xd0nioirwPIXkH5B/87p7bZCML3fLE5dwopY21xSAdv6ihhFH9+1nxi595dzjGJAXitznGfRx3ftJ0bu/cTIvb+cYxQDclrh8fZwAACSLKjI9BeRqYCb2S6tL8WRbWU5aG62OZrz7Os8gsax9UeM3PMgRu55EKOysn37ds2ePVvV1dUaPny45s2bp127doUes2fPHi1YsECHH364hg0bplmzZqmjoyOrTSqV6nV79NFHs9qsW7dOJ5xwgqqqqvThD39YDz74YNwPb+BxnrkRIzdi5EaM8H+KPa/xoiUAJInn5eeG4ucv3ryA7WGCjol6fFjxGlT8msfnyjN+d/1XJkbEyIYYuZkxilOR5bXZs2frpZde0urVq/X444/rmWee0QUXXBB6zMKFC/WTn/xEK1eu1NNPP60333xTZ511Vq92DzzwgLZu3Zq5zZw5M7Pvtdde05lnnqlTTz1VGzdu1KWXXqq/+Zu/0U9/+tO4H2IycJ7xXGRDjNyIkRs5LUux5zXeHg4AQFKki8+U76d/nxRc/LmKur4Ufbb5+fsK6jPKfMzjbceYxbG/OCdGvfcTI2IUJNcYlamXX35Zq1at0q9+9StNmzZNknT33Xfrc5/7nG655RaNGTOm1zE7d+7U/fffr+XLl+u0006TdOCPuIkTJ+q5557TiSeemGk7fPhw1dXVWcdeunSpxo8fr1tvvVWSNHHiRP3iF7/Q7bffrqamprgfamGQ04L381xEjIIQIzdyWmSlkNe40hIAEiT9OSlx31Ak/AWlrQAzizSzCAzTl/8H5jG2gtfW3tYmlysBwtoQI3cbYuRuQ4wKppjyWmtrq4YPH575w06SGhsbVVFRofXr11uPaWtr0759+9TY2JjZNmHCBB111FFqbW3NartgwQKNHDlS06dP17Jly+T5rq5pbW3N6kOSmpqaevVRVDjP3G2IkbsNMXK3IUYFU0w5TSqNvMaVlgAAJEVQ0RK08hy1UIu6cu2fQ19W5Pu6LxdBcyBG7jkQI/cciFFR6ezszLpfVVWlqqqqPvfX3t6uUaNGZW076KCDNGLECLW3twceU1lZqeHDh2dtr62tzTrmhhtu0GmnnaahQ4fqZz/7mf7u7/5Ou3bt0le/+tVMP7W1tb366Ozs1P/+7//q4IMP7vPjGjDkNDeei9yIkRsxKglx5zSpNPIaV1oCQJJ4ebqhOAQVZv0pOP28gN/Nfl2FrxfwM5fx/dty6YcYuREjN2JUOHnMa2PHjlVNTU3mtnjxYusUrrjiCusXBvhvr7zySn4e//+55ppr9MlPflIf//jHdfnll+vrX/+6br755ryOOeA4z9yIkRsxciNGhZOAnCaVV17jSksAAIqZWQxGXa1ORWgf9digFXWz/7iK51wRIzdi5EaMEmfLli2qrq7O3A+6IuWyyy7T+eefH9rX0Ucfrbq6Om3bti1r+/79+7V9+/bAz+yqq6tTV1eXduzYkXVVSkdHR+AxklRfX68bb7xRe/fuVVVVlerq6np9M2tHR4eqq6uL8yrLvuI8cyNGbsTIjRglTtScJpVXXuNFSwBIkHx8rgmfaVlEzH8rW0GZbmMr+HJZaQ/aHlSImoVklOI214LS378Xst3fLzGybydGxCiMK0Yxymdeq66uzvoDL8gRRxyhI444wtmuoaFBO3bsUFtbm6ZOnSpJWrt2rXp6elRfX289ZurUqRo8eLDWrFmjWbNmSZI2bdqkzZs3q6GhIXCsjRs36rDDDsv8UdrQ0KAnn3wyq83q1atD+0g8chrPRS7EyI0YuZVZTpPKK6/xoiUAJInnHbjF3SeKg1mkmUVeLivbNmbBGmUO/mNc49uKZrPPqI/BHC+okCVGxCgMMXILilFciiivTZw4UTNmzND8+fO1dOlS7du3T83NzTrnnHMy37D6xhtv6PTTT9fDDz+s6dOnq6amRvPmzVNLS4tGjBih6upqXXzxxWpoaMh8w+pPfvITdXR06MQTT9SQIUO0evVqffOb39Tf//3fZ8a+8MILdc899+jrX/+6/vqv/1pr167V97//fT3xxBN5eawFwXmWPQ+ei8IRIzdi5EZOy1IKeY0XLQEASCqzQHMVb66CzlxxzqUANMe39WGbnxfSxmyXkv3xhs2TGLnnSYzc8yRG77cpc4888oiam5t1+umnq6KiQrNmzdJdd92V2b9v3z5t2rRJ7733Xmbb7bffnmm7d+9eNTU16Tvf+U5m/+DBg7VkyRItXLhQnufpwx/+sG677TbNnz8/02b8+PF64okntHDhQt155536wAc+oPvuu09NTU2FeeCFwHnmnicxcs+TGLnnSYzeb4Oiz2u8aAkACcLbw8ucrUALKgyjbgtrE6VozaXQtB0XZU6udmYxa/ZPjIhR2Di2fcQo9319VGx5bcSIEVq+fHng/nHjxskzrooZMmSIlixZoiVLlliPmTFjhmbMmOEc+5RTTtGvf/3r3CacZOQ09z6ei9z7iJF7HzHKfV8fFVtOk4o/r/Ht4QAAJIW5UpxvZpEUNnZcBVXYmFHGIEZuxMiNGAH5x3nmRozciJEbMUIJ40VLAEgSL083FCf/W19s+2zbzLfvhHEVuJ7x0zzO1b9tf9DjCZpPlDGIkXsMYuQegxjlB3kNaZxnPBdFmQ8xcs+HGLnnQ04rGbxoCQBAUtiKu3Thmd7vGdv8x5kr7VGLyiBBb9HxArabfUY5LqiwdfXh30+MgvtP7ydGwf2n9xMjIF6cZ8FzsPWf3k+MgvtP7ydGwf2n9xMjlAg+0xIAEqQYPycFMfIXl2bBaWsXdD/X8WzMOYQVs0HzNPdHeSyufomRu19i5O6XGOXWbz+Q18oY55m7X2Lk7pcYufslRrn12w/ktMLjSksAAJImrNAKWn3uL9sqvWsu6ePCCtIofYQd15cVdGLk7pMYufskRkA8OM/e38Zzkfs4YuQ+jhi5jyOnlQyutASAJOnxDtzi7hPFybUi7l/Ntu33t8llLH9/5op5UJFpO8acY19Wvc1+wuZtu0+MiJHZPzEKn1fcKYO8hjTOM56LoiBG0edFjNzzIqcVPV60BIAk8RR/ciUPFr+wojSo2MulH5tUwM8oxwT109fCMwpi5EaM3IhR/MhrMHGeuREjN2LkRoziR04rON4eDgBAUpkr4LaiJqXehZ253/Z70FhmP30ppMxV97CVfNv4Ubab+4mR+zhi5D6OGAH5w3nGc1HQ+FG2m/uJkfs4YoQSwJWWAJAgKSn+D3eOtzsUUq7/eP35vxM0lr/gNdvYimLbinguq+z+PqIgRtGPi4oYuZVjjPqIvIYMzrPox0VFjNyIkVs5xqiPyGmFx5WWAAAkkW2lOspKc9SCzdXGHMssJtO/+1fp/W2irI7b5mT2579va+//6RqPGLnHI0bu8coxRkB/cZ7xXBQ0J2LknhMxcs+JnFayuNISAJLE8w7c4u4TxcdfbEUp4NLtglarw5htzT7MAjOsjyhFom081zG244iR+zhi5D6OGOUXeQ0S51mU44iR+zhi5D6OGOUXOa3guNISAIBiEKUgcxV9tprIXP2Ost9W0AbNz+zTXElPH+vfFlS7uWJAjIgRMerdX19iBOQb5xnPRcSod3/EKHhMclrZ4kVLAEiQlJefW18sWbJE48aN05AhQ1RfX6/nn38+sO33vvc9ffrTn9Zhhx2mww47TI2NjaHtESJKkZbL8X7+4tFcCbe1c62ORxFUnNoK3VxW9s37xCgbMXIjRgWRpLyGAcB55kaM3IiRGzEqCHJa4fGiJQCglxUrVqilpUWLFi3Shg0bNHnyZDU1NWnbtm3W9uvWrdO5556rn//852ptbdXYsWN1xhln6I033ijwzEuAq0hLsxWnZrugIsjs0zaG7dioq+/+fUH7g+YfZRxiRIyCjiNG7uNyiRHQX5xnPBcFHUeM3McRI/dx5LSSx4uWAJAkXp5uObrttts0f/58zZ07V5MmTdLSpUs1dOhQLVu2zNr+kUce0d/93d9pypQpmjBhgu677z719PRozZo1uQ+OaP9uYQVi+vhcijdze1iRG7Si7Rk/0yvt5nZbH7bxwtoTI2Jk64MYufvINUb9lZC8hgHEecZzka0PYuTugxi5+yCnlTxetASABEl5Xl5uuejq6lJbW5saGxsz2yoqKtTY2KjW1tZIfbz33nvat2+fRowYkdPYZc8ssryAfa4C0bbNXwiG/ZfItXDy9xe0qh+0Eu8vjMMeX9D8iJF7fsTIPT9ilFdJyGsYIJxn7jkQI/cciJF7DsSob3PoA3Ja4fHt4QBQJjo7O7PuV1VVqaqqqle7t99+W93d3aqtrc3aXltbq1deeSXSWJdffrnGjBmT9cInIkgXcLYizfzdLFBtbYNWms3iz7+iHbQinTLam8eabAWlaw5Bx5nzIEbEKGwOQceZ8yBG4TEC+ovzjOciYpSNGPU+1kROg4ErLQEgSXrydJM0duxY1dTUZG6LFy/Oy0O46aab9Oijj+pHP/qRhgwZkpcxSppZUNoKr7Biz9af2afZj79tkKCVdtvvtn7D5mCbT1C/rjmYfRGj3m3NvohR77ZmX+UWozjlMa+hCHCehffrmoPZFzHq3dbsixj1bmv2VW4xihM5reC40hIAysSWLVtUXV2duW+7ylKSRo4cqUGDBqmjoyNre0dHh+rq6kLHuOWWW3TTTTfpqaee0vHHH9//SZersFXvsFXxsBVs/0q4f79ZIPqZ7c1xwlbVzX5tffnbmse5CmpiRIyIUWFiBPQX5xnPRcSIGCUlRig6A3ql5ZIlSzRu3DgNGTJE9fX1ev755wdyOgAw4PL5OSnV1dVZt6AXLSsrKzV16tSsL9FJf6lOQ0ND4Ny//e1v68Ybb9SqVas0bdq0eANTBGLNaZ56rw6HFYZRt9uKRbOojdreJqhfs1A1H19Y/0FFMTF6HzFy90+M3P2H/QHaD3z+V/GKLa9xnr2P5yJ3/8TI3T8xcvdPTisZA/ai5YoVK9TS0qJFixZpw4YNmjx5spqamrRt27aBmhIA4P+0tLToe9/7nh566CG9/PLLuuiii7R7927NnTtXknTeeefpyiuvzLT/1re+pWuuuUbLli3TuHHj1N7ervb2du3atWugHkJBxZ7Tcimy4irIwvrxfD9tdZW5zSwozcI2vc12nK0gDSuIoyBGbsTIrVxjhLIUa17jPMs+nuei7OOIUfY2YvR+v+Q0aABftLzttts0f/58zZ07V5MmTdLSpUs1dOhQLVu2bKCmBAADz8vTLUdnn322brnlFl177bWaMmWKNm7cqFWrVmW+nGfz5s3aunVrpv13v/tddXV16Ytf/KJGjx6dud1yyy19CELxyUtO8xeBnrHNVaim1LuIDCsMbYLGcPVrzsW13Vagmu2iFOfEiBiZ/ROj4ONzjVF/JCSvITex5zXOs+ztPBdl90+Mgo8nRuS0Mjcgn2nZ1dWltra2rKt0Kioq1NjYqNbW1oGYEgDA0NzcrObmZuu+devWZd1//fXX8z+hhIo1pwUVLemiK+W7H3a8bb9ZxIb1YRZ+/qLP1o9nuZ8ytgWNG1aIRu3DP0diRIz8/fr3ESP7HPz7wuaLshFbXiOnvd/Ov4/nIvsc/PuIkX0O/n3EyD4H/z5yWkkYkBct3377bXV3d2eu2Emrra3VK6+80qv93r17tXfv3sz9zs7OvM8RAAaE5x24xd0n8ibXnCaF5DV/AednFoFpuRR3Zn+2vnLZZyswzfvmMVEKTn8/QX0QI2Lkmoe/n6A+iFF4jOJCXis6sf2txnmW3U9QH8SIGLnm4e8nqA9iRE4rUUXx7eGLFy/W9ddf32v7j3c+nPVNuABQaJ2dnaqpqYmtv5R34BanuPtD/wXltd9cdDF5DcCA6uzsVM0VV8fWH3mt9JHTACQVOa34DchnWo4cOVKDBg1SR0dH1vaOjg7V1dX1an/llVdq586dmduWLVsKNVUAAELlmtMk8hoAILn4Ww0AkBQD8qJlZWWlpk6dqjVr1mS29fT0aM2aNWpoaOjVvqqqStXV1Vk3AChJ6bccxH1D3uSa0yTyGoAyQl4rOvytBgAByGkFN2BvD29padGcOXM0bdo0TZ8+XXfccYd2796tuXPnDtSUAADoE3IaAKCUkNcAAEkwYC9ann322Xrrrbd07bXXqr29XVOmTNGqVat6feAzAJSTVM+BW9x9Ir/IaQBgR14rTuQ1AOiNnFZ4A/pFPM3NzWpubh7IKQAAEAtyGgCglJDXAAADrSi+PRwAykY+PteEz0kBAAwU8hoAoFSQ0wpuQL6IBwAAAAAAAACCcKUlACSJ93+3uPsEAGAgkNcAAKWCnFZwvGgJAAmS8jylYn6LQNz9AQAQFXkNAFAqyGmFx9vDAQAAAAAAACQKV1oCQJLw4c4AgFJCXgMAlApyWsFxpSUAAAAAAACAROFKSwBIEk9STx76BABgIJDXAAClgpxWcFxpCQAAAAAAACBRuNISABKEb6QDAJQS8hoAoFSQ0wqPKy0BAAAAAAAAJApXWgJAknjKwzfSxdsdAACRkdcAAKWCnFZwXGkJAAAAAAAAIFG40hIAksTz8rB6x/IdAGCAkNcAAKWCnFZwvGgJAEnSIymVhz4BABgI5DUAQKkgpxUcbw8HAAAAAAAAkChcaQkACZLyPKVifotA3P0BABAVeQ0AUCrIaYXHlZYAAAAAIGn79u2aPXu2qqurNXz4cM2bN0+7du0KPWbPnj1asGCBDj/8cA0bNkyzZs1SR0dHZv+DDz6oVCplvW3btk2StG7dOuv+9vb2vD5eAEBpK/a8xpWWAJAkfLgzAKCUFFlemz17trZu3arVq1dr3759mjt3ri644AItX7488JiFCxfqiSee0MqVK1VTU6Pm5madddZZ+uUvfylJOvvsszVjxoysY84//3zt2bNHo0aNytq+adMmVVdXZ+6b+wEAA6jIcppU/HmNFy0BAAAAlL2XX35Zq1at0q9+9StNmzZNknT33Xfrc5/7nG655RaNGTOm1zE7d+7U/fffr+XLl+u0006TJD3wwAOaOHGinnvuOZ144ok6+OCDdfDBB2eOeeutt7R27Vrdf//9vfobNWqUhg8fnp8HCAAoK6WQ13h7OAAkSXr1Lu4bAAADoYjyWmtrq4YPH575w06SGhsbVVFRofXr11uPaWtr0759+9TY2JjZNmHCBB111FFqbW21HvPwww9r6NCh+uIXv9hr35QpUzR69Gh95jOfyVzRAgBIiCLKaVJp5DWutAQAAABQdDo7O7PuV1VVqaqqqs/9tbe393rb2kEHHaQRI0YEfgZXe3u7Kisre11FUltbG3jM/fffry9/+ctZV6mMHj1aS5cu1bRp07R3717dd999OuWUU7R+/XqdcMIJfX5MAIDiEHdOk0ojr3GlJQAkSZGt3gEAECqPeW3s2LGqqanJ3BYvXmydwhVXXBH4hQHp2yuvvFKQcLS2turll1/WvHnzsrYfc8wx+tu//VtNnTpVJ510kpYtW6aTTjpJt99+e0HmBQCIIAE5TSqvvMaVlgCQJD2SUnnoEwCAgZDHvLZly5asD/cPuiLlsssu0/nnnx/a5dFHH626urrMt56m7d+/X9u3b1ddXZ31uLq6OnV1dWnHjh1ZV6V0dHRYj7nvvvs0ZcoUTZ06NXQ+kjR9+nT94he/cLYDABRIAnKaVF55jRctAQAAABSd6urqrD/wghxxxBE64ogjnO0aGhq0Y8cOtbW1Zf74Wrt2rXp6elRfX289ZurUqRo8eLDWrFmjWbNmSTrwTambN29WQ0NDVttdu3bp+9//fujVM34bN27U6NGjI7UFABS3qDlNKq+8xouWAJAgKc9TKua3c8fdHwAAURVTXps4caJmzJih+fPna+nSpdq3b5+am5t1zjnnZL5h9Y033tDpp5+uhx9+WNOnT1dNTY3mzZunlpYWjRgxQtXV1br44ovV0NCgE088Mav/FStWaP/+/fqrv/qrXmPfcccdGj9+vD72sY9pz549uu+++7R27Vr97Gc/y8tjBQDkrphymlQaeY0XLQEAAABA0iOPPKLm5madfvrpqqio0KxZs3TXXXdl9u/bt0+bNm3Se++9l9l2++23Z9ru3btXTU1N+s53vtOr7/vvv19nnXVWry83kKSuri5ddtlleuONNzR06FAdf/zxeuqpp3Tqqafm5XECAMpDsee1lOcV3yU4nZ2dqqmp0c6dOyNfPgsA+RDX81G6n8aPLNRBg/r3LXGm/d179dTvb+c5M8HIawCSgryG/iKnAUgKclrx49vDAQAAAAAAACQKbw8HgCTp8aRUzBfA9xTdBfUAgFJBXgMAlApyWsFxpSUAAAAAAACAROFKSwBIEs87cIu7TwAABgJ5DQBQKshpBceLlgCQKHlIhCIRAgAGCnkNAFAqyGmFxtvDAQAAAAAAACQKV1oCQJLwlgMAQCkhrwEASgU5reC40hIAAAAAAABAonClJQAkSY+n2D/XpIfVOwDAACGvAQBKBTmt4LjSEgAAAAAAAECicKUlACSJ13PgFnefAAAMBPIaAKBUkNMKjistAQAAAAAAACQKV1oCQJLwjXQAgFJCXgMAlApyWsHxoiUAJAkf7gwAKCXkNQBAqSCnFRxvDwcAAAAAAACQKFxpCQBJwlsOAAClhLwGACgV5LSC40pLAAAAAAAAAInClZYAkCSe8rB6F293AABERl4DAJQKclrBcaUlAAAAAAAAgEThSksASBI+JwUAUErIawCAUkFOKziutAQAAAAAAACQKFxpCQBJ0tMjqScPfQIAMADIawCAUkFOKzhetASAJOEtBwCAUkJeAwCUCnJawfH2cAAAAAAAAACJwpWWAJAkrN4BAEoJeQ0AUCrIaQXHlZYAAAAAAAAAEoUrLQEgSXo8STGvtvWwegcAGCDkNQBAqSCnFRxXWgIAAAAAAABIFK60BIAE8bweeV5P7H0CADAQyGsAgFJBTis8rrQEAAAAAAAAkChcaQkASeJ58X+uCd9IBwAYKOQ1AECpIKcVHC9aAkCSeHn4cGcSIQBgoJDXAAClgpxWcLw9HAAAAAAAAECicKUlACRJT4+UivnDmPlwZwDAQCGvAQBKBTmt4LjSEgAAAAAAAECicKUlACQJn5MCACgl5DUAQKkgpxUcV1oCAAAAAAAASBSutASABPF6euTF/DkpHp+TAgAYIOQ1AECpIKcVHldaAgAAAAAAAEgUrrQEgCThc1IAAKWEvAYAKBXktILjRUsASJIeT0qRCAEAJYK8BgAoFeS0guPt4QAAAAAAAAAShSstASBJPE9SzB/GzOodAGCgkNcAAKWCnFZwXGkJAAAAAAAAIFG40hIAEsTr8eTF/DkpHqt3AIABQl4DAJQKclrhcaUlAAAAAAAAgEThSksASBKvR/F/TkrM/QEAEBV5DQBQKshpBceVlgAAqyVLlmjcuHEaMmSI6uvr9fzzz4e2X7lypSZMmKAhQ4bouOOO05NPPlmgmQIAEI/t27dr9uzZqq6u1vDhwzVv3jzt2rUr9Jh7771Xp5xyiqqrq5VKpbRjx44+9ftf//Vf+vSnP60hQ4Zo7Nix+va3vx3nQwMAlKFiz2u8aAkACeL1eHm55WrFihVqaWnRokWLtGHDBk2ePFlNTU3atm2btf2zzz6rc889V/PmzdOvf/1rzZw5UzNnztSLL77Y35AAAIpYUvJaVLNnz9ZLL72k1atX6/HHH9czzzyjCy64IPSY9957TzNmzNBVV13V5347Ozt1xhln6IMf/KDa2tp0880367rrrtO9994b22MDAPRPseU0qfjzWsorwk/97OzsVE1NjXbu3Knq6uqBng6AMhbX81G6n1P0BR2UGhzjDKX93j6t049zmmN9fb0+8YlP6J577pEk9fT0aOzYsbr44ot1xRVX9Gp/9tlna/fu3Xr88ccz20488URNmTJFS5cujeeBlDDyGoCkKNW8FsXLL7+sSZMm6Ve/+pWmTZsmSVq1apU+97nP6U9/+pPGjBkTevy6det06qmn6n/+5380fPjwnPr97ne/q3/4h39Qe3u7KisrJUlXXHGFHnvsMb3yyiuxPcZCIKcBSIpyzmlSaeS1ovxMy/TrrJ2dnQM8EwDlLv08FNf6z37tk2JeStqvfZJ6P2dWVVWpqqqqV/uuri61tbXpyiuvzGyrqKhQY2OjWltbrWO0traqpaUla1tTU5Mee+yxfs6+PJDXACRFKea1qFpbWzV8+PDMH2CS1NjYqIqKCq1fv15/8Rd/kbd+W1tb9Wd/9meZP+ykA3n0W9/6lv7nf/5Hhx12WJ8fV6GR0wAkRTnnNKk08lpRvmj57rvvSpLGjh07wDMBgAPeffdd1dTU9Pn4yspK1dXV6Rft+fkcyGHDhvV6zly0aJGuu+66Xm3ffvttdXd3q7a2Nmt7bW1t4KpYe3u7tX17e3v/Jl4m3nnnHUnkNQDJUUp5Lar29naNGjUqa9tBBx2kESNG9CufRem3vb1d48ePz2qTzqvt7e1F9aIlf6sBSJpyzGlSaeS1onzRcsyYMfrtb3+rSZMmacuWLUX5toPOzk6NHTu2aOcvFf9jKPb5SzyGJPA8T++++67z0nqXIUOG6LXXXlNXV1dMM8vmeZ5SqVTWtv6u3CE+I0aMkCRt3ry5XwXVQCr2c7nY5y/xGJKg2OcvlWZeu+KKK/Stb30rtL+XX345trmVu1L4W00q/vO52OcvFf9jKPb5S8X/GEoxp0nlldeK8kXLiooKHXnkkZKk6urqojx50op9/lLxP4Zin7/EYxhocb3INGTIEA0ZMiSWvvpj5MiRGjRokDo6OrK2d3R0qK6uznpMXV1dTu2RraLiwPfi1dTUFO15kFbM57JU/POXeAxJUOzzL7W8dtlll+n8888PbXP00Uerrq6u1xfO7d+/X9u3b+9XPovSb1AeTe8rJqX0t5pU/I+h2OcvFf9jKPb5S8X9GEotp0nlldeK8kVLAED+VFZWaurUqVqzZo1mzpwp6cAX8axZs0bNzc3WYxoaGrRmzRpdeumlmW2rV69WQ0NDAWYMAECwI444QkcccYSzXUNDg3bs2KG2tjZNnTpVkrR27Vr19PSovr6+z+NH6behoUH/8A//oH379mnw4ANf8rB69Wodc8wxRfXWcABA/pVTXqvo8ywBACWrpaVF3/ve9/TQQw/p5Zdf1kUXXaTdu3dr7ty5kqTzzjsv64t6LrnkEq1atUq33nqrXnnlFV133XV64YUXAl/kBAAgaSZOnKgZM2Zo/vz5ev755/XLX/5Szc3NOuecczJvLXzjjTc0YcIEPf/885nj2tvbtXHjRv3hD3+QJP3mN7/Rxo0btX379sj9fvnLX1ZlZaXmzZunl156SStWrNCdd97Z60vuAACIqiTymlek9uzZ4y1atMjbs2fPQE+lT4p9/p5X/I+h2OfveTwG5Nfdd9/tHXXUUV5lZaU3ffp077nnnsvsO/nkk705c+Zktf/+97/vffSjH/UqKyu9j33sY94TTzxR4BkXr1I4D4r9MRT7/D2Px5AExT5/eN4777zjnXvuud6wYcO86upqb+7cud67776b2f/aa695kryf//znmW2LFi3ydOD7ZLNuDzzwQOR+Pc/z/vM//9P71Kc+5VVVVXlHHnmkd9NNN+X74eZNKZwLxf4Yin3+nlf8j6HY5+95pfEYyl2x57WU58X03e8AAAAAAAAAEAPeHg4AAAAAAAAgUXjREgAAAAAAAECi8KIlAAAAAAAAgEThRUsAAAAAAAAAiVKUL1ouWbJE48aN05AhQ1RfX5/11exJc9111ymVSmXdJkyYkNm/Z88eLViwQIcffriGDRumWbNmqaOjY8Dm+8wzz+jzn/+8xowZo1Qqpcceeyxrv+d5uvbaazV69GgdfPDBamxs1O9///usNtu3b9fs2bNVXV2t4cOHa968edq1a1diHsP555/f699kxowZiXkMixcv1ic+8QkdeuihGjVqlGbOnKlNmzZltYny/2bz5s0688wzNXToUI0aNUpf+9rXtH///sQ8hlNOOaXXv8OFF16YmMcAFFKx5LViy2lS8ee1Ys9pUvHnNXIakJtiyWkSeY28lrtiz2lRHwN5DUlRdC9arlixQi0tLVq0aJE2bNigyZMnq6mpSdu2bRvoqQX62Mc+pq1bt2Zuv/jFLzL7Fi5cqJ/85CdauXKlnn76ab355ps666yzBmyuu3fv1uTJk7VkyRLr/m9/+9u66667tHTpUq1fv16HHHKImpqatGfPnkyb2bNn66WXXtLq1av1+OOP65lnntEFF1xQqIfgfAySNGPGjKx/k3/5l3/J2j+Qj+Hpp5/WggUL9Nxzz2n16tXat2+fzjjjDO3evTvTxvX/pru7W2eeeaa6urr07LPP6qGHHtKDDz6oa6+9NjGPQZLmz5+f9e/w7W9/OzGPASiUYstrxZTTpOLPa8We06Tiz2vkNCC6YstpEnmNvJabYs9pUR+DRF5DQnhFZvr06d6CBQsy97u7u70xY8Z4ixcvHsBZBVu0aJE3efJk674dO3Z4gwcP9lauXJnZ9vLLL3uSvNbW1gLNMJgk70c/+lHmfk9Pj1dXV+fdfPPNmW07duzwqqqqvH/5l3/xPM/zfvvb33qSvF/96leZNv/+7//upVIp74033ijY3NPMx+B5njdnzhzvC1/4QuAxSXsM27Zt8yR5Tz/9tOd50f7fPPnkk15FRYXX3t6eafPd737Xq66u9vbu3VvYB+D1fgye53knn3yyd8kllwQek7THAORLMeW1Ys5pnlf8ea0UcprnFX9eI6cBwYopp3keeS2NvNZ3xZ7TPI+8hmQrqistu7q61NbWpsbGxsy2iooKNTY2qrW1dQBnFu73v/+9xowZo6OPPlqzZ8/W5s2bJUltbW3at29f1uOZMGGCjjrqqEQ+ntdee03t7e1Z862pqVF9fX1mvq2trRo+fLimTZuWadPY2KiKigqtX7++4HMOsm7dOo0aNUrHHHOMLrroIr3zzjuZfUl7DDt37pQkjRgxQlK0/zetra067rjjVFtbm2nT1NSkzs5OvfTSSwWc/QHmY0h75JFHNHLkSB177LG68sor9d5772X2Je0xAPlQjHmtVHKaVDp5rZhymlT8eY2cBtgVY06TyGvSwOcFUzHltWLPaRJ5Dcl20EBPIBdvv/22uru7s04MSaqtrdUrr7wyQLMKV19frwcffFDHHHOMtm7dquuvv16f/vSn9eKLL6q9vV2VlZUaPnx41jG1tbVqb28fmAmHSM/JFv/0vvb2do0aNSpr/0EHHaQRI0Yk5jHNmDFDZ511lsaPH69XX31VV111lT772c+qtbVVgwYNStRj6Onp0aWXXqpPfvKTOvbYYyUp0v+b9vZ2679Tel8h2R6DJH35y1/WBz/4QY0ZM0b/9V//pcsvv1ybNm3SD3/4w8w8k/IYgHwptrxWSjlNKo28Vkw5TSr+vEZOA4IVW06TyGtp5LW+KfacJpHXkHxF9aJlMfrsZz+b+f34449XfX29PvjBD+r73/++Dj744AGcWfk655xzMr8fd9xxOv744/WhD31I69at0+mnnz6AM+ttwYIFevHFF7M+W6fYBD0G/+fOHHfccRo9erROP/10vfrqq/rQhz5U6GkCiICcljzFlNOk4s9r5DSgtJDXkqeY8lqx5zSJvIbkK6q3h48cOVKDBg3q9c1bHR0dqqurG6BZ5Wb48OH66Ec/qj/84Q+qq6tTV1eXduzYkdUmqY8nPaew+NfV1fX6oO39+/dr+/btiXxMknT00Udr5MiR+sMf/iApOY+hublZjz/+uH7+85/rAx/4QGZ7lP83dXV11n+n9L5CCXoMNvX19ZKU9e+QhMcA5FOx57VizmlSaea1pOY0qfjzGjkNCFfsOU0iryXxcSU1rxV7TpPIaygORfWiZWVlpaZOnao1a9ZktvX09GjNmjVqaGgYwJlFt2vXLr366qsaPXq0pk6dqsGDB2c9nk2bNmnz5s2JfDzjx49XXV1d1nw7Ozu1fv36zHwbGhq0Y8cOtbW1ZdqsXbtWPT09mSe6pPnTn/6kd955R6NHj5Y08I/B8zw1NzfrRz/6kdauXavx48dn7Y/y/6ahoUG/+c1vshL66tWrVV1drUmTJg34Y7DZuHGjJGX9OwzkYwAKodjzWjHnNKk081rScppU/HmNnAZEU+w5TSKvkdfcij2nRXkMNuQ1DJiB/Bagvnj00Ue9qqoq78EHH/R++9vfehdccIE3fPjwrG+tSpLLLrvMW7dunffaa695v/zlL73GxkZv5MiR3rZt2zzP87wLL7zQO+qoo7y1a9d6L7zwwv/fzt2zNBIFUBieLUxQxC8MIoKimM5GCyFNGiFoJVYhlVhYaKsWFjZWVjb+AH9DOgtBC0EFYcROCERtUlnIQCIovtsFFndZXZb1zvI+MFWG4R4YOOEQQqFQoFAofNl5kyQhjmPiOCaKIvb394njmPv7ewD29vbo6+ujWq1yc3PD4uIi4+PjtFqt9jPm5+eZnp7m8vKSs7Mz8vk8lUoliAxJkrC5ucn5+Tn1ep3j42NmZmbI5/M8Pz8HkWFtbY3e3l5OT09pNBrtq9lstu/53Xvz+vrK1NQUpVKJ6+trjo6OyOVybG9vB5GhVquxu7vL1dUV9XqdarXKxMQExWIxmAzSv5KmXktbp0H6ey3tnQbp7zU7Tfq4NHUa2Gv22uelvdM+ksFeU0hSN1oCHBwcMDo6SiaTYXZ2louLi68+0i+Vy2WGh4fJZDKMjIxQLpep1Wrtz1utFuvr6/T399PV1cXS0hKNRuPLzntyckIURe+u5eVlAN7e3tjZ2WFoaIhsNsvc3By3t7c/POPx8ZFKpUJ3dzc9PT2srKyQJEkQGZrNJqVSiVwuR0dHB2NjY6yurr77IvWVGX529iiKODw8bN/zkffm7u6OhYUFOjs7GRwcZGNjg5eXlyAyPDw8UCwWGRgYIJvNMjk5ydbWFk9PT8FkkP6ltPRa2joN0t9rae80SH+v2WnS56Sl08Bes9c+L+2d9pEM9ppC8g3gz3+nKUmSJEmSJEl/V6r+01KSJEmSJEnS/8/RUpIkSZIkSVJQHC0lSZIkSZIkBcXRUpIkSZIkSVJQHC0lSZIkSZIkBcXRUpIkSZIkSVJQHC0lSZIkSZIkBcXRUpIkSZIkSVJQHC0lSZIkSZIkBcXRUpIkSZIkSVJQHC0lSZIkSZIkBcXRUpIkSZIkSVJQvgPWgcbZuUp4FgAAAABJRU5ErkJggg==", "text/plain": [ - "<Figure size 1152x432 with 6 Axes>" + "<Figure size 1600x600 with 6 Axes>" ] }, - "metadata": { - "needs_background": "light" - }, + "metadata": {}, "output_type": "display_data" } ], @@ -334,7 +327,172 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Step 0 25.45903586700115 0.9934522628963286\n", + "Step 1 17.733385490000728 0.993928549434581\n", + "Step 2 17.385464679000506 0.9969817492516411\n", + "Step 3 17.73187294499985 0.9987018046573852\n", + "Step 4 17.42424472499988 0.9994581962161123\n", + "Step 5 17.39850756800115 0.9997730200431632\n", + "Step 6 17.38586500100064 0.9999032282027154\n", + "Step 7 17.41260802599936 0.9999573480152241\n", + "Step 8 17.873442951999095 0.9999802946360343\n", + "Step 9 17.04619025899956 0.9999955995645813\n", + "Step 10 17.099138269000832 0.9999996727969152\n", + "Step 11 17.099542428999484 0.999999973143393\n", + "Step 12 17.139662244000647 0.999999997546683\n", + "Step 13 17.218893876999573 0.9999999997490552\n", + "Step 14 17.084921174000556 0.999999999971159\n", + "Step 15 17.033554589999767 0.9999999999962744\n", + "Step 16 17.010074742000143 0.9999999999994603\n", + "Step 17 17.104563296001288 0.9999999999999127\n", + "Step 18 17.021247803000733 0.9999999999999842\n", + "Step 19 17.07957060999979 0.9999999999999966\n", + "Step 20 17.05240749100085 0.9999999999999966\n", + "Step 21 17.00356302900036 0.9999999999999966\n", + "Step 22 17.1113736719999 0.9999999999999966\n", + "Step 23 17.013587127999926 0.9999999999999966\n", + "Step 24 17.004048287999467 0.9999999999999966\n", + "Step 25 17.01311813599932 0.9999999999999966\n", + "Step 26 17.018968939000843 0.9999999999999966\n", + "Step 27 17.01230432599914 0.9999999999999966\n", + "Step 28 17.016388629001085 0.9999999999999966\n", + "Step 29 17.036423421999643 0.9999999999999966\n", + "Step 30 17.013809308999043 0.9999999999999966\n", + "Step 31 17.02102562500113 0.9999999999999966\n", + "Step 32 17.125694684000337 0.9999999999999966\n", + "Step 33 17.018816687999788 0.9999999999999966\n", + "Step 34 17.033273111001108 0.9999999999999966\n", + "Step 35 17.031105800999285 0.9999999999999966\n", + "Step 36 17.344186886000898 0.9999999999999966\n", + "Step 37 17.00491729500027 0.9999999999999966\n", + "Step 38 17.044662663000054 0.9999999999999966\n", + "Step 39 17.01994404600009 0.9999999999999966\n", + "Step 40 17.01687352800036 0.9999999999999966\n", + "Step 41 17.03885115400044 0.9999999999999966\n", + "Step 42 17.025812523999775 0.9999999999999966\n", + "Step 43 17.029889327999626 0.9999999999999966\n", + "Step 44 17.065132745001392 0.9999999999999966\n", + "Step 45 17.03455267100071 0.9999999999999966\n", + "Step 46 17.042484248999244 0.9999999999999966\n", + "Step 47 17.135204002001046 0.9999999999999966\n", + "Step 48 17.049361208000846 0.9999999999999966\n", + "Step 49 17.051931253001385 0.9999999999999966\n", + "Step 50 17.05464122400008 0.9999999999999966\n", + "Step 51 17.042147963999014 0.9999999999999966\n", + "Step 52 17.066642416000832 0.9999999999999966\n", + "Step 53 17.0870322819992 0.9999999999999966\n", + "Step 54 17.071626777000347 0.9999999999999966\n", + "Step 55 17.11173596700064 0.9999999999999966\n", + "Step 56 17.18877132200032 0.9999999999999966\n", + "Step 57 17.154270471000928 0.9999999999999966\n", + "Step 58 17.672991446001106 0.9999999999999966\n", + "Step 59 17.674105590998806 0.9999999999999966\n", + "Step 60 17.347509929999433 0.9999999999999966\n", + "Step 61 17.54230526399988 0.9999999999999966\n", + "Step 62 17.694092154999453 0.9999999999999966\n", + "Step 63 17.531714112999907 0.9999999999999966\n", + "Step 64 17.98786205900069 0.9999999999999966\n", + "Step 65 17.59379430700028 0.9999999999999966\n", + "Step 66 17.496220975999677 0.9999999999999966\n", + "Step 67 17.61460809500022 0.9999999999999966\n", + "Step 68 17.81554028100072 0.9999999999999966\n", + "Step 69 17.50470085699999 0.9999999999999966\n", + "Step 70 18.22215127399977 0.9999999999999966\n", + "Step 71 17.95782054099982 0.9999999999999966\n", + "Step 72 18.02512274399851 0.9999999999999966\n", + "Step 73 17.519333276000907 0.9999999999999966\n", + "Step 74 18.148525913999038 0.9999999999999966\n", + "Step 75 17.768654807998246 0.9999999999999966\n", + "Step 76 17.68822824000017 0.9999999999999966\n", + "Step 77 17.630756663000284 0.9999999999999966\n", + "Step 78 17.73377000599976 0.9999999999999966\n", + "Step 79 17.553744683998957 0.9999999999999966\n", + "Step 80 17.616365314001087 0.9999999999999966\n", + "Step 81 17.520774246000656 0.9999999999999966\n", + "Step 82 17.824773792999622 0.9999999999999966\n", + "Step 83 18.162243766000756 0.9999999999999966\n", + "Step 84 17.59411170199928 0.9999999999999966\n", + "Step 85 17.78331206599978 0.9999999999999966\n", + "Step 86 18.16322874999969 0.9999999999999966\n", + "Step 87 17.877422854000542 0.9999999999999966\n", + "Step 88 17.723775387999922 0.9999999999999966\n", + "Step 89 17.93192093200014 0.9999999999999966\n", + "Step 90 18.18813704400054 0.9999999999999966\n", + "Step 91 17.924124131999633 0.9999999999999966\n", + "Step 92 17.7537402930011 0.9999999999999966\n", + "Step 93 18.066451909000534 0.9999999999999966\n", + "Step 94 18.1830705400007 0.9999999999999966\n", + "Step 95 18.144785267999396 0.9999999999999966\n", + "Step 96 17.771601014001135 0.9999999999999966\n", + "Step 97 18.371283865000805 0.9999999999999966\n", + "Step 98 18.569847105998633 0.9999999999999966\n", + "Step 99 18.27999508600078 0.9999999999999966\n", + "Step 100 17.876706947999992 0.9999999999999966\n", + "Step 101 18.362252414000977 0.9999999999999966\n", + "Step 102 18.184471571999893 0.9999999999999966\n", + "Step 103 17.953990222000357 0.9999999999999966\n", + "Step 104 18.139474450999842 0.9999999999999966\n", + "Step 105 17.951657051999064 0.9999999999999966\n", + "Step 106 17.9079576109998 0.9999999999999966\n", + "Step 107 17.87303800600057 0.9999999999999966\n", + "Step 108 17.93147389799924 0.9999999999999966\n", + "Step 109 18.11586603000069 0.9999999999999966\n", + "Step 110 17.81402047099982 0.9999999999999966\n", + "Step 111 18.042384932999994 0.9999999999999966\n", + "Step 112 18.28486302300007 0.9999999999999966\n", + "Step 113 18.207277753999733 0.9999999999999966\n", + "Step 114 17.95677446300033 0.9999999999999966\n", + "Step 115 18.060943858001338 0.9999999999999966\n", + "Step 116 18.289367157000015 0.9999999999999966\n", + "Step 117 17.892628915000387 0.9999999999999966\n", + "Step 118 17.864017376999982 0.9999999999999966\n", + "Step 119 18.149063675000434 0.9999999999999966\n", + "Step 120 18.52748107499974 0.9999999999999966\n", + "Step 121 18.263750603000517 0.9999999999999966\n", + "Step 122 18.062445188999845 0.9999999999999966\n", + "Step 123 18.676733229000092 0.9999999999999966\n", + "Step 124 17.94438390400137 0.9999999999999966\n", + "Step 125 18.117840117000014 0.9999999999999966\n", + "Step 126 18.08436953599994 0.9999999999999966\n", + "Step 127 17.971794098000828 0.9999999999999966\n", + "Step 128 18.37189302399929 0.9999999999999966\n", + "Step 129 18.186950645000252 0.9999999999999966\n", + "Step 130 18.30828943600136 0.9999999999999966\n", + "Step 131 18.53486498699931 0.9999999999999966\n", + "Step 132 18.302330796001115 0.9999999999999966\n", + "Step 133 18.28120723899883 0.9999999999999966\n", + "Step 134 18.4264274319994 0.9999999999999966\n", + "Step 135 18.156916502000968 0.9999999999999966\n", + "Step 136 18.33176715799891 0.9999999999999966\n", + "Step 137 18.704046654000194 0.9999999999999966\n", + "Step 138 18.061599176000527 0.9999999999999966\n", + "Step 139 18.313615737000873 0.9999999999999966\n", + "Step 140 19.13900512299915 0.9999999999999966\n", + "Step 141 18.634621335999327 0.9999999999999966\n", + "Step 142 18.48925181300001 0.9999999999999966\n", + "Step 143 18.603877730000022 0.9999999999999966\n", + "Step 144 18.455599974000506 0.9999999999999966\n", + "Step 145 18.61112040399894 0.9999999999999966\n", + "Step 146 18.832362896999257 0.9999999999999966\n", + "Step 147 18.292130691001148 0.9999999999999966\n", + "Step 148 18.38444646700009 0.9999999999999966\n", + "Step 149 18.14168985700053 0.9999999999999966\n", + "Step 150 18.834586269000283 0.9999999999999966\n", + "Step 151 18.90085793199978 0.9999999999999966\n", + "Step 152 18.301890503000322 0.9999999999999966\n", + "Step 153 18.99428056400029 0.9999999999999966\n", + "Step 154 18.442107730001226 0.9999999999999966\n", + "Step 155 18.12089733100038 0.9999999999999966\n", + "Step 156 18.185502423999424 0.9999999999999966\n", + "Step 157 18.189794200001415 0.9999999999999966\n" + ] + } + ], "source": [ "if 'is_test_run' in globals():\n", " time_loop(2)\n", @@ -355,7 +513,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -369,9 +527,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.5" + "version": "3.11.0rc1" } }, "nbformat": 4, "nbformat_minor": 2 -} \ No newline at end of file +} diff --git a/pystencils_tests/test_print_infinity.py b/pystencils_tests/test_print_infinity.py index c4cbb0a88..62c83e68a 100644 --- a/pystencils_tests/test_print_infinity.py +++ b/pystencils_tests/test_print_infinity.py @@ -18,7 +18,7 @@ def test_print_infinity(type, negative, target): ast = pystencils.create_kernel(assignment, data_type=type, target=target) if target == pystencils.Target.GPU: - pytest.importorskip('pycuda') + pytest.importorskip('cupy') ast.compile() diff --git a/pystencils_tests/test_random.py b/pystencils_tests/test_random.py index 535d62ac9..77d06b513 100644 --- a/pystencils_tests/test_random.py +++ b/pystencils_tests/test_random.py @@ -29,7 +29,7 @@ if get_compiler_config()['os'] == 'windows': @pytest.mark.parametrize('dtype', ('float', 'double')) def test_rng(target, rng, precision, dtype, t=124, offsets=(0, 0), keys=(0, 0), offset_values=None): if target == Target.GPU: - pytest.importorskip('pycuda') + pytest.importorskip('cupy') if instruction_sets and {'neon', 'sve', 'vsx', 'rvv'}.intersection(instruction_sets) and rng == 'aesni': pytest.xfail('AES not yet implemented for this architecture') if rng == 'aesni' and len(keys) == 2: diff --git a/pystencils_tests/test_simplifications.py b/pystencils_tests/test_simplifications.py index ef8ae7ce6..61d009d03 100644 --- a/pystencils_tests/test_simplifications.py +++ b/pystencils_tests/test_simplifications.py @@ -148,7 +148,7 @@ def test_add_subexpressions_for_field_reads(): @pytest.mark.skipif((vs.major, vs.minor, vs.micro) == (3, 8, 2), reason="does not work on python 3.8.2 for some reason") def test_sympy_optimizations(target, dtype): if target == ps.Target.GPU: - pytest.importorskip("pycuda") + pytest.importorskip("cupy") src, dst = ps.fields(f'src, dst: {dtype}[2d]') assignments = ps.AssignmentCollection({ @@ -172,7 +172,7 @@ def test_sympy_optimizations(target, dtype): @pytest.mark.skipif((vs.major, vs.minor, vs.micro) == (3, 8, 2), reason="does not work on python 3.8.2 for some reason") def test_evaluate_constant_terms(target, simplification): if target == ps.Target.GPU: - pytest.importorskip("pycuda") + pytest.importorskip("cupy") src, dst = ps.fields('src, dst: float32[2d]') # cos of a number will always be simplified diff --git a/setup.py b/setup.py index 62282470e..31392a747 100644 --- a/setup.py +++ b/setup.py @@ -112,7 +112,7 @@ setuptools.setup(name='pystencils', "Source Code": "https://i10git.cs.fau.de/pycodegen/pystencils", }, extras_require={ - 'gpu': ['pycuda'], + 'gpu': ['cupy'], 'alltrafos': ['islpy', 'py-cpuinfo'], 'bench_db': ['blitzdb', 'pymongo', 'pandas'], 'interactive': ['matplotlib', 'ipy_table', 'imageio', 'jupyter', 'pyevtk', 'rich', 'graphviz'], -- GitLab