Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
pystencils
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Christoph Alt
pystencils
Commits
bf71596f
Commit
bf71596f
authored
5 years ago
by
Jan Hönig
Browse files
Options
Downloads
Patches
Plain Diff
Presentation of kerncraft. Fixed kerncraft
parent
e87b4daf
No related branches found
No related tags found
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
doc/notebooks/demo_kerncraft.ipynb
+764
-0
764 additions, 0 deletions
doc/notebooks/demo_kerncraft.ipynb
pystencils/kerncraft_coupling/kerncraft_interface.py
+2
-1
2 additions, 1 deletion
pystencils/kerncraft_coupling/kerncraft_interface.py
with
766 additions
and
1 deletion
doc/notebooks/demo_kerncraft.ipynb
0 → 100644
+
764
−
0
View file @
bf71596f
{
"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
}
%% Cell type:code id: tags:
```
python
%
matplotlib
notebook
import
matplotlib.pyplot
as
plt
from
pystencils.session
import
*
import
pystencils
```
%% Cell type:code id: tags:
```
python
src_arr
=
np
.
zeros
([
1024
,
1024
],
dtype
=
np
.
float64
)
dst_arr
=
np
.
zeros_like
(
src_arr
)
dst
,
src
=
ps
.
fields
(
dst
=
dst_arr
,
src
=
src_arr
)
```
%% Cell type:code id: tags:
```
python
grad_x
,
grad_y
=
sp
.
symbols
(
"
grad_x, grad_y
"
)
symbolic_description
=
[
ps
.
Assignment
(
dst
[
0
,
0
],
(
src
[
1
,
0
]
+
src
[
-
1
,
0
]
+
src
[
0
,
1
]
+
src
[
0
,
-
1
])
/
4
)
]
kernel
=
ps
.
create_kernel
(
symbolic_description
)
symbolic_description
```
%% Output
$\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]$
⎡ src_W src_S src_N src_E⎤
⎢dst_C := ───── + ───── + ───── + ─────⎥
⎣ 4 4 4 4 ⎦
%% Cell type:code id: tags:
```
python
@ps.kernel
def
symbolic_description_using_function
():
dst
[
0
,
0
]
@=
(
src
[
1
,
0
]
+
src
[
-
1
,
0
]
+
src
[
0
,
1
]
+
src
[
0
,
-
1
])
/
4
symbolic_description_using_function
```
%% Output
$\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]$
⎡ src_W src_S src_N src_E⎤
⎢dst_C := ───── + ───── + ───── + ─────⎥
⎣ 4 4 4 4 ⎦
%% Cell type:code id: tags:
```
python
kernel
=
ps
.
create_kernel
(
symbolic_description_using_function
)
ps
.
show_code
(
kernel
)
```
%% Output
%% Cell type:code id: tags:
```
python
src_arr
[:,
0
]
=
1
src_arr
[
0
,:]
=
1
compiled_kernel
=
kernel
.
compile
()
plt
.
imshow
(
src_arr
)
plt
.
colorbar
();
```
%% Output
%% Cell type:code id: tags:
```
python
for
_
in
range
(
1000
):
compiled_kernel
(
src
=
src_arr
,
dst
=
dst_arr
)
src_arr
,
dst_arr
=
dst_arr
,
src_arr
plt
.
imshow
(
src_arr
)
plt
.
colorbar
();
```
%% Output
%% Cell type:code id: tags:
```
python
from
pystencils
import
kerncraft_coupling
as
kc
import
kerncraft
```
%% Cell type:code id: tags:
```
python
analyzed
=
kc
.
PyStencilsKerncraftKernel
(
kernel
)
```
%% Cell type:code id: tags:
```
python
print
(
analyzed
.
as_code
())
```
%% Output
#include "kerncraft.h"
#include <stdlib.h>
#include <stdint.h>
#include <stdbool.h>
#include <math.h>
#include <stdio.h>
#define RESTRICT __restrict__
#define FUNC_PREFIX
void dummy(void *);
void timing(double* wcTime, double* cpuTime);
extern int var_false;
FUNC_PREFIX void kernel(double * RESTRICT _data_dst, double * RESTRICT const _data_src)
{
for (int ctr_0 = 1; ctr_0 < 1023; ctr_0 += 1)
{
double * RESTRICT _data_dst_00 = _data_dst + 1024*ctr_0;
double * RESTRICT _data_src_01 = _data_src + 1024*ctr_0 + 1024;
double * RESTRICT _data_src_00 = _data_src + 1024*ctr_0;
double * RESTRICT _data_src_0m1 = _data_src + 1024*ctr_0 - 1024;
for (int ctr_1 = 1; ctr_1 < 1023; ctr_1 += 1)
{
_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];
}
}
}
int main(int argc, char **argv)
{
// Initialization dst
double * dst = (double *) aligned_malloc(sizeof(double) * 1048576, 64);
for (unsigned long long i = 0; i < 1048576; ++i)
dst[i] = 0.23;
if(var_false)
dummy(dst);
// Initialization src
double * src = (double *) aligned_malloc(sizeof(double) * 1048576, 64);
for (unsigned long long i = 0; i < 1048576; ++i)
src[i] = 0.23;
if(var_false)
dummy(src);
for(int warmup = 1; warmup >= 0; --warmup) {
int repeat = 2;
if(warmup == 0) {
repeat = atoi(argv[1]);
}
for (; repeat > 0; --repeat)
{
kernel(dst,src);
// Dummy calls
if(var_false) dummy((void*)dst);
if(var_false) dummy((void*)src);
}
}
}
%% Cell type:code id: tags:
```
python
analyzed
.
array_sizes
()
```
%% Output
{'src': 1048576, 'dst': 1048576}
%% Cell type:code id: tags:
```
python
list
(
analyzed
.
get_loop_stack
())
```
%% Output
[{'index': 'ctr_0', 'start': 1, 'stop': 1023, 'increment': 1},
{'index': 'ctr_1', 'start': 1, 'stop': 1023, 'increment': 1}]
%% Cell type:code id: tags:
```
python
analyzed
.
print_kernel_info
()
```
%% Output
loop stack: idx | min max step
---------+---------------------------------
ctr_0 | 1 1023 1
ctr_1 | 1 1023 1
data sources: name | offsets ...
---------+------------...
src | [ctr_0, ctr_1 - 1]
| [ctr_0 + 1, ctr_1]
| [ctr_0 - 1, ctr_1]
| [ctr_0, ctr_1 + 1]
data destinations: name | offsets ...
---------+------------...
dst | [ctr_0, ctr_1]
FLOPs: op | count
----+-------
+ | 3
* | 4
=======
7
%% Cell type:code id: tags:
```
python
analyzed
.
print_constants_info
()
```
%% Output
constants: name | value
---------+-----------
%% Cell type:code id: tags:
```
python
analyzed
.
print_variables_info
()
```
%% Output
variables: name | type size
---------+----------------------------------
src | float (1024, 1024)
dst | float (1024, 1024)
%% Cell type:code id: tags:
```
python
machine
=
kerncraft
.
machinemodel
.
MachineModel
(
path_to_yaml
=
"
some_machine.yaml
"
)
model
=
kerncraft
.
models
.
ECMData
(
analyzed
,
machine
,
kc
.
KerncraftParameters
())
```
%% Cell type:code id: tags:
```
python
model
.
analyze
()
```
%% Output
{'cycles': [('L2', 3.0255005100102004),
('L3', 6.0516410328206565),
('MEM', 0.0)],
'misses': [2.023880477609552, 2.023880477609552, 0.0, 0.0],
'hits': [62.97805956119122, 0.0, 2.023880477609552, 0.0],
'evicts': [1.0016200324006481, 1.001940038800776, 0.0, 0.0],
'verbose infos': {'memory hierarchy': [{'index': 0,
'level': 'L1',
'total loads': 320.1241624832497,
'total misses': 68.21192423848477,
'total hits': 251.9122382447649,
'total stores': 64.0,
'total evicts': 64.10368207364148,
'total lines load': 65.00194003880078,
'total lines misses': 2.023880477609552,
'total lines hits': 62.97805956119122,
'total lines stores': 16.0,
'total lines evicts': 1.0016200324006481,
'cycles': None},
{'index': 1,
'level': 'L2',
'total loads': 129.52835056701133,
'total misses': 129.52835056701133,
'total hits': 0.0,
'total stores': 64.10368207364148,
'total evicts': 64.12416248324966,
'total lines load': 2.023880477609552,
'total lines misses': 2.023880477609552,
'total lines hits': 0.0,
'total lines stores': 1.0016200324006481,
'total lines evicts': 1.001940038800776,
'cycles': None},
{'index': 2,
'level': 'L3',
'total loads': 129.52835056701133,
'total misses': 0.0,
'total hits': 129.52835056701133,
'total stores': 64.12416248324966,
'total evicts': 0.0,
'total lines load': 2.023880477609552,
'total lines misses': 0.0,
'total lines hits': 2.023880477609552,
'total lines stores': 1.001940038800776,
'total lines evicts': 0.0,
'cycles': None},
{'index': 3,
'level': 'MEM',
'total loads': 0.0,
'total misses': 0.0,
'total hits': 0.0,
'total stores': 0.0,
'total evicts': 0.0,
'total lines load': 0.0,
'total lines misses': 0.0,
'total lines hits': 0.0,
'total lines stores': 0.0,
'total lines evicts': 0.0,
'cycles': None}],
'cache stats': [{'name': 'L1',
'LOAD_count': 406254,
'LOAD_byte': 2000736,
'STORE_count': 99998,
'STORE_byte': 399992,
'HIT_count': 393605,
'HIT_byte': 1574420,
'MISS_count': 12649,
'MISS_byte': 426316,
'EVICT_count': 6260,
'EVICT_byte': 400640},
{'name': 'L2',
'LOAD_count': 12649,
'LOAD_byte': 809536,
'STORE_count': 6260,
'STORE_byte': 400640,
'HIT_count': 0,
'HIT_byte': 0,
'MISS_count': 12649,
'MISS_byte': 809536,
'EVICT_count': 6262,
'EVICT_byte': 400768},
{'name': 'L3',
'LOAD_count': 12649,
'LOAD_byte': 809536,
'STORE_count': 6262,
'STORE_byte': 400768,
'HIT_count': 12649,
'HIT_byte': 809536,
'MISS_count': 0,
'MISS_byte': 0,
'EVICT_count': 0,
'EVICT_byte': 0},
{'name': 'MEM',
'LOAD_count': 0,
'LOAD_byte': 0,
'HIT_count': 0,
'HIT_byte': 0,
'STORE_count': 0,
'STORE_byte': 0,
'EVICT_count': 0,
'EVICT_byte': 0,
'MISS_count': 0,
'MISS_byte': 0}],
'cachelines in stats': 6249.875},
'iterations per cacheline': 16,
'L2': 3.0255005100102004,
'L3': 6.0516410328206565,
'memory bandwidth kernel': 'load',
'memory bandwidth': PrefixedUnit(61.82, 'G', 'B/s'),
'MEM': 0.0,
'flops per iteration': 7}
%% Cell type:code id: tags:
```
python
model
.
report
()
```
%% Output
L2 = 3.03 cy/CL
L3 = 6.05 cy/CL
MEM = 0.00 cy/CL
%% Cell type:code id: tags:
```
python
```
This diff is collapsed.
Click to expand it.
pystencils/kerncraft_coupling/kerncraft_interface.py
+
2
−
1
View file @
bf71596f
...
@@ -96,7 +96,8 @@ class PyStencilsKerncraftKernel(KernelCode):
...
@@ -96,7 +96,8 @@ class PyStencilsKerncraftKernel(KernelCode):
for
field
in
fields_accessed
:
for
field
in
fields_accessed
:
layout
=
get_layout_tuple
(
field
)
layout
=
get_layout_tuple
(
field
)
permuted_shape
=
list
(
field
.
shape
[
i
]
for
i
in
layout
)
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
# Scalars may be safely ignored
# for param in ast.get_parameters():
# for param in ast.get_parameters():
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment