diff --git a/doc/notebooks/demo_kerncraft.ipynb b/doc/notebooks/demo_kerncraft.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..03ffdbc7708910fd481bba6211c9d4064dccc417 --- /dev/null +++ b/doc/notebooks/demo_kerncraft.ipynb @@ -0,0 +1,764 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [], + "source": [ + "%matplotlib notebook\n", + "import matplotlib.pyplot as plt\n", + "from pystencils.session import *\n", + "import pystencils" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "src_arr = np.zeros([1024,1024], dtype=np.float64)\n", + "dst_arr = np.zeros_like(src_arr)\n", + "\n", + "dst, src = ps.fields(dst=dst_arr, src=src_arr)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\left[ {{dst}_{(0,0)}} \\leftarrow \\frac{{{src}_{(-1,0)}}}{4} + \\frac{{{src}_{(0,-1)}}}{4} + \\frac{{{src}_{(0,1)}}}{4} + \\frac{{{src}_{(1,0)}}}{4}\\right]$" + ], + "text/plain": [ + "⎡ src_W src_S src_N src_E⎤\n", + "⎢dst_C := ───── + ───── + ───── + ─────⎥\n", + "⎣ 4 4 4 4 ⎦" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "grad_x, grad_y = sp.symbols(\"grad_x, grad_y\")\n", + "\n", + "symbolic_description = [\n", + " ps.Assignment(dst[0, 0], (src[1, 0] + src[-1, 0] + src[0, 1] + src[0, -1]) / 4)\n", + "]\n", + "kernel = ps.create_kernel(symbolic_description)\n", + "symbolic_description" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/latex": [ + "$\\displaystyle \\left[ {{dst}_{(0,0)}} \\leftarrow \\frac{{{src}_{(-1,0)}}}{4} + \\frac{{{src}_{(0,-1)}}}{4} + \\frac{{{src}_{(0,1)}}}{4} + \\frac{{{src}_{(1,0)}}}{4}\\right]$" + ], + "text/plain": [ + "⎡ src_W src_S src_N src_E⎤\n", + "⎢dst_C := ───── + ───── + ───── + ─────⎥\n", + "⎣ 4 4 4 4 ⎦" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "@ps.kernel\n", + "def symbolic_description_using_function():\n", + " dst[0, 0] @= (src[1, 0] + src[-1, 0] + src[0, 1] + src[0, -1]) / 4\n", + "symbolic_description_using_function" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "<style>.highlight .hll { background-color: #ffffcc }\n", + ".highlight { background: #f8f8f8; }\n", + ".highlight .c { color: #408080; 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 .gd { color: #A00000 } /* Generic.Deleted */\n", + ".highlight .ge { font-style: italic } /* Generic.Emph */\n", + ".highlight .gr { color: #FF0000 } /* 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 .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", + ".highlight .gt { color: #0044DD } /* Generic.Traceback */\n", + ".highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */\n", + ".highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */\n", + ".highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */\n", + ".highlight .kp { color: #008000 } /* Keyword.Pseudo */\n", + ".highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */\n", + ".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 .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 .nf { color: #0000FF } /* Name.Function */\n", + ".highlight .nl { color: #A0A000 } /* 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", + ".highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */\n", + ".highlight .w { color: #bbbbbb } /* Text.Whitespace */\n", + ".highlight .mb { color: #666666 } /* Literal.Number.Bin */\n", + ".highlight .mf { color: #666666 } /* Literal.Number.Float */\n", + ".highlight .mh { color: #666666 } /* Literal.Number.Hex */\n", + ".highlight .mi { color: #666666 } /* Literal.Number.Integer */\n", + ".highlight .mo { color: #666666 } /* Literal.Number.Oct */\n", + ".highlight .sa { color: #BA2121 } /* Literal.String.Affix */\n", + ".highlight .sb { color: #BA2121 } /* Literal.String.Backtick */\n", + ".highlight .sc { color: #BA2121 } /* Literal.String.Char */\n", + ".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 .sh { color: #BA2121 } /* Literal.String.Heredoc */\n", + ".highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */\n", + ".highlight .sx { color: #008000 } /* Literal.String.Other */\n", + ".highlight .sr { color: #BB6688 } /* 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", + ".highlight .fm { color: #0000FF } /* Name.Function.Magic */\n", + ".highlight .vc { color: #19177C } /* Name.Variable.Class */\n", + ".highlight .vg { color: #19177C } /* Name.Variable.Global */\n", + ".highlight .vi { color: #19177C } /* Name.Variable.Instance */\n", + ".highlight .vm { color: #19177C } /* Name.Variable.Magic */\n", + ".highlight .il { color: #666666 } /* Literal.Number.Integer.Long */</style>" + ], + "text/plain": [ + "<IPython.core.display.HTML object>" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "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=\"n\">_data_dst</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_src</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\">1023</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_dst_00</span> <span class=\"o\">=</span> <span class=\"n\">_data_dst</span> <span class=\"o\">+</span> <span class=\"mi\">1024</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=\"n\">_data_src_01</span> <span class=\"o\">=</span> <span class=\"n\">_data_src</span> <span class=\"o\">+</span> <span class=\"mi\">1024</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span> <span class=\"o\">+</span> <span class=\"mi\">1024</span><span class=\"p\">;</span>\n", + " <span class=\"kt\">double</span> <span class=\"o\">*</span> <span class=\"n\">RESTRICT</span> <span class=\"n\">_data_src_00</span> <span class=\"o\">=</span> <span class=\"n\">_data_src</span> <span class=\"o\">+</span> <span class=\"mi\">1024</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=\"n\">_data_src_0m1</span> <span class=\"o\">=</span> <span class=\"n\">_data_src</span> <span class=\"o\">+</span> <span class=\"mi\">1024</span><span class=\"o\">*</span><span class=\"n\">ctr_0</span> <span class=\"o\">-</span> <span class=\"mi\">1024</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\">1023</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_dst_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_src_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_src_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_src_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_src_0m1</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", + "</pre></div>\n" + ], + "text/plain": [ + "FUNC_PREFIX void kernel(double * RESTRICT _data_dst, double * RESTRICT const _data_src)\n", + "{\n", + " for (int ctr_0 = 1; ctr_0 < 1023; ctr_0 += 1)\n", + " {\n", + " double * RESTRICT _data_dst_00 = _data_dst + 1024*ctr_0;\n", + " double * RESTRICT _data_src_01 = _data_src + 1024*ctr_0 + 1024;\n", + " double * RESTRICT _data_src_00 = _data_src + 1024*ctr_0;\n", + " double * RESTRICT _data_src_0m1 = _data_src + 1024*ctr_0 - 1024;\n", + " for (int ctr_1 = 1; ctr_1 < 1023; ctr_1 += 1)\n", + " {\n", + " _data_dst_00[ctr_1] = 0.25*_data_src_00[ctr_1 + 1] + 0.25*_data_src_00[ctr_1 - 1] + 0.25*_data_src_01[ctr_1] + 0.25*_data_src_0m1[ctr_1];\n", + " }\n", + " }\n", + "}" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "kernel = ps.create_kernel(symbolic_description_using_function)\n", + "ps.show_code(kernel)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 1152x432 with 2 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "src_arr[:,0] = 1\n", + "src_arr[0,:] = 1\n", + "compiled_kernel = kernel.compile()\n", + "\n", + "plt.imshow(src_arr)\n", + "plt.colorbar();" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "<Figure size 1152x432 with 2 Axes>" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "for _ in range(1000):\n", + " compiled_kernel(src=src_arr, dst=dst_arr)\n", + " src_arr, dst_arr = dst_arr, src_arr\n", + "\n", + "plt.imshow(src_arr)\n", + "plt.colorbar();" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [], + "source": [ + "from pystencils import kerncraft_coupling as kc\n", + "import kerncraft" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "analyzed = kc.PyStencilsKerncraftKernel(kernel)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "scrolled": true, + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "#include \"kerncraft.h\"\n", + "#include <stdlib.h>\n", + "#include <stdint.h>\n", + "#include <stdbool.h>\n", + "#include <math.h>\n", + "#include <stdio.h>\n", + "\n", + "\n", + "\n", + "#define RESTRICT __restrict__\n", + "#define FUNC_PREFIX\n", + "void dummy(void *);\n", + "void timing(double* wcTime, double* cpuTime);\n", + "extern int var_false;\n", + "\n", + "\n", + "FUNC_PREFIX void kernel(double * RESTRICT _data_dst, double * RESTRICT const _data_src)\n", + "{\n", + " for (int ctr_0 = 1; ctr_0 < 1023; ctr_0 += 1)\n", + " {\n", + " double * RESTRICT _data_dst_00 = _data_dst + 1024*ctr_0;\n", + " double * RESTRICT _data_src_01 = _data_src + 1024*ctr_0 + 1024;\n", + " double * RESTRICT _data_src_00 = _data_src + 1024*ctr_0;\n", + " double * RESTRICT _data_src_0m1 = _data_src + 1024*ctr_0 - 1024;\n", + " for (int ctr_1 = 1; ctr_1 < 1023; ctr_1 += 1)\n", + " {\n", + " _data_dst_00[ctr_1] = 0.25*_data_src_00[ctr_1 + 1] + 0.25*_data_src_00[ctr_1 - 1] + 0.25*_data_src_01[ctr_1] + 0.25*_data_src_0m1[ctr_1];\n", + " }\n", + " }\n", + "}\n", + "\n", + "\n", + "int main(int argc, char **argv)\n", + "{\n", + "\n", + " // Initialization dst\n", + " double * dst = (double *) aligned_malloc(sizeof(double) * 1048576, 64);\n", + " for (unsigned long long i = 0; i < 1048576; ++i)\n", + " dst[i] = 0.23;\n", + "\n", + " if(var_false)\n", + " dummy(dst);\n", + "\n", + " // Initialization src\n", + " double * src = (double *) aligned_malloc(sizeof(double) * 1048576, 64);\n", + " for (unsigned long long i = 0; i < 1048576; ++i)\n", + " src[i] = 0.23;\n", + "\n", + " if(var_false)\n", + " dummy(src);\n", + "\n", + " for(int warmup = 1; warmup >= 0; --warmup) {\n", + " int repeat = 2;\n", + " if(warmup == 0) {\n", + " repeat = atoi(argv[1]);\n", + " }\n", + " \n", + " for (; repeat > 0; --repeat)\n", + " {\n", + " kernel(dst,src);\n", + "\n", + " // Dummy calls\n", + " if(var_false) dummy((void*)dst);\n", + " if(var_false) dummy((void*)src);\n", + " }\n", + "\n", + " }\n", + "}\n" + ] + } + ], + "source": [ + "print(analyzed.as_code())" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'src': 1048576, 'dst': 1048576}" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "analyzed.array_sizes()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[{'index': 'ctr_0', 'start': 1, 'stop': 1023, 'increment': 1},\n", + " {'index': 'ctr_1', 'start': 1, 'stop': 1023, 'increment': 1}]" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "list(analyzed.get_loop_stack())" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "scrolled": false, + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "loop stack: idx | min max step\n", + " ---------+---------------------------------\n", + " ctr_0 | 1 1023 1\n", + " ctr_1 | 1 1023 1\n", + " \n", + "\n", + "data sources: name | offsets ...\n", + " ---------+------------...\n", + " src | [ctr_0, ctr_1 - 1]\n", + " | [ctr_0 + 1, ctr_1]\n", + " | [ctr_0 - 1, ctr_1]\n", + " | [ctr_0, ctr_1 + 1]\n", + " \n", + "\n", + "data destinations: name | offsets ...\n", + " ---------+------------...\n", + " dst | [ctr_0, ctr_1]\n", + " \n", + "\n", + "FLOPs: op | count \n", + " ----+-------\n", + " + | 3\n", + " * | 4\n", + " =======\n", + " 7\n", + "\n" + ] + } + ], + "source": [ + "analyzed.print_kernel_info()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "constants: name | value \n", + " ---------+-----------\n", + " \n", + "\n" + ] + } + ], + "source": [ + "analyzed.print_constants_info()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "variables: name | type size \n", + " ---------+----------------------------------\n", + " src | float (1024, 1024)\n", + " dst | float (1024, 1024)\n", + " \n", + "\n" + ] + } + ], + "source": [ + "analyzed.print_variables_info()" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "slideshow": { + "slide_type": "fragment" + } + }, + "outputs": [], + "source": [ + "machine = kerncraft.machinemodel.MachineModel(path_to_yaml=\"some_machine.yaml\") \n", + "model = kerncraft.models.ECMData(analyzed, machine, kc.KerncraftParameters())" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "{'cycles': [('L2', 3.0255005100102004),\n", + " ('L3', 6.0516410328206565),\n", + " ('MEM', 0.0)],\n", + " 'misses': [2.023880477609552, 2.023880477609552, 0.0, 0.0],\n", + " 'hits': [62.97805956119122, 0.0, 2.023880477609552, 0.0],\n", + " 'evicts': [1.0016200324006481, 1.001940038800776, 0.0, 0.0],\n", + " 'verbose infos': {'memory hierarchy': [{'index': 0,\n", + " 'level': 'L1',\n", + " 'total loads': 320.1241624832497,\n", + " 'total misses': 68.21192423848477,\n", + " 'total hits': 251.9122382447649,\n", + " 'total stores': 64.0,\n", + " 'total evicts': 64.10368207364148,\n", + " 'total lines load': 65.00194003880078,\n", + " 'total lines misses': 2.023880477609552,\n", + " 'total lines hits': 62.97805956119122,\n", + " 'total lines stores': 16.0,\n", + " 'total lines evicts': 1.0016200324006481,\n", + " 'cycles': None},\n", + " {'index': 1,\n", + " 'level': 'L2',\n", + " 'total loads': 129.52835056701133,\n", + " 'total misses': 129.52835056701133,\n", + " 'total hits': 0.0,\n", + " 'total stores': 64.10368207364148,\n", + " 'total evicts': 64.12416248324966,\n", + " 'total lines load': 2.023880477609552,\n", + " 'total lines misses': 2.023880477609552,\n", + " 'total lines hits': 0.0,\n", + " 'total lines stores': 1.0016200324006481,\n", + " 'total lines evicts': 1.001940038800776,\n", + " 'cycles': None},\n", + " {'index': 2,\n", + " 'level': 'L3',\n", + " 'total loads': 129.52835056701133,\n", + " 'total misses': 0.0,\n", + " 'total hits': 129.52835056701133,\n", + " 'total stores': 64.12416248324966,\n", + " 'total evicts': 0.0,\n", + " 'total lines load': 2.023880477609552,\n", + " 'total lines misses': 0.0,\n", + " 'total lines hits': 2.023880477609552,\n", + " 'total lines stores': 1.001940038800776,\n", + " 'total lines evicts': 0.0,\n", + " 'cycles': None},\n", + " {'index': 3,\n", + " 'level': 'MEM',\n", + " 'total loads': 0.0,\n", + " 'total misses': 0.0,\n", + " 'total hits': 0.0,\n", + " 'total stores': 0.0,\n", + " 'total evicts': 0.0,\n", + " 'total lines load': 0.0,\n", + " 'total lines misses': 0.0,\n", + " 'total lines hits': 0.0,\n", + " 'total lines stores': 0.0,\n", + " 'total lines evicts': 0.0,\n", + " 'cycles': None}],\n", + " 'cache stats': [{'name': 'L1',\n", + " 'LOAD_count': 406254,\n", + " 'LOAD_byte': 2000736,\n", + " 'STORE_count': 99998,\n", + " 'STORE_byte': 399992,\n", + " 'HIT_count': 393605,\n", + " 'HIT_byte': 1574420,\n", + " 'MISS_count': 12649,\n", + " 'MISS_byte': 426316,\n", + " 'EVICT_count': 6260,\n", + " 'EVICT_byte': 400640},\n", + " {'name': 'L2',\n", + " 'LOAD_count': 12649,\n", + " 'LOAD_byte': 809536,\n", + " 'STORE_count': 6260,\n", + " 'STORE_byte': 400640,\n", + " 'HIT_count': 0,\n", + " 'HIT_byte': 0,\n", + " 'MISS_count': 12649,\n", + " 'MISS_byte': 809536,\n", + " 'EVICT_count': 6262,\n", + " 'EVICT_byte': 400768},\n", + " {'name': 'L3',\n", + " 'LOAD_count': 12649,\n", + " 'LOAD_byte': 809536,\n", + " 'STORE_count': 6262,\n", + " 'STORE_byte': 400768,\n", + " 'HIT_count': 12649,\n", + " 'HIT_byte': 809536,\n", + " 'MISS_count': 0,\n", + " 'MISS_byte': 0,\n", + " 'EVICT_count': 0,\n", + " 'EVICT_byte': 0},\n", + " {'name': 'MEM',\n", + " 'LOAD_count': 0,\n", + " 'LOAD_byte': 0,\n", + " 'HIT_count': 0,\n", + " 'HIT_byte': 0,\n", + " 'STORE_count': 0,\n", + " 'STORE_byte': 0,\n", + " 'EVICT_count': 0,\n", + " 'EVICT_byte': 0,\n", + " 'MISS_count': 0,\n", + " 'MISS_byte': 0}],\n", + " 'cachelines in stats': 6249.875},\n", + " 'iterations per cacheline': 16,\n", + " 'L2': 3.0255005100102004,\n", + " 'L3': 6.0516410328206565,\n", + " 'memory bandwidth kernel': 'load',\n", + " 'memory bandwidth': PrefixedUnit(61.82, 'G', 'B/s'),\n", + " 'MEM': 0.0,\n", + " 'flops per iteration': 7}" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.analyze()" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "scrolled": false, + "slideshow": { + "slide_type": "slide" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "L2 = 3.03 cy/CL\n", + "L3 = 6.05 cy/CL\n", + "MEM = 0.00 cy/CL\n" + ] + } + ], + "source": [ + "model.report()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "celltoolbar": "Slideshow", + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.2" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/pystencils/kerncraft_coupling/kerncraft_interface.py b/pystencils/kerncraft_coupling/kerncraft_interface.py index 37a5109de80b0c975a5cb30043316e1c1e8e9e9e..e729e0dba83a958851bf5510c9be0638b07dec73 100644 --- a/pystencils/kerncraft_coupling/kerncraft_interface.py +++ b/pystencils/kerncraft_coupling/kerncraft_interface.py @@ -96,7 +96,8 @@ class PyStencilsKerncraftKernel(KernelCode): for field in fields_accessed: layout = get_layout_tuple(field) permuted_shape = list(field.shape[i] for i in layout) - self.set_variable(field.name, str(field.dtype), tuple(permuted_shape)) + self.set_variable(field.name, ('double',) if str(field.dtype) == 'float64' else + ('float',), tuple(permuted_shape)) # Scalars may be safely ignored # for param in ast.get_parameters():