Skip to content

Instantly share code, notes, and snippets.

@pentschev
Last active June 21, 2019 15:09
Show Gist options
  • Save pentschev/0b952439c6de625fa865019cc8f9321b to your computer and use it in GitHub Desktop.
Save pentschev/0b952439c6de625fa865019cc8f9321b to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import json\n",
"import pandas as pd\n",
"import numpy as np\n",
"\n",
"def read_json(path):\n",
" data = json.load(open(path))\n",
"\n",
" return pd.io.json.json_normalize(data=data['benchmarks'])\n",
"\n",
"def filter_by_str_col(df, col, val):\n",
" return df.loc[df[col].str.contains(val)]\n",
"\n",
"def filter_by_val_col(df, col, val):\n",
" return df.loc[df[col] == val]\n",
"\n",
"def split_params_list(df, params_name, columns=None):\n",
" lst = df[params_name].to_list()\n",
" lst = [[l] if not isinstance(l, list) else l for l in lst]\n",
" ncol = max([len(l) for l in lst])\n",
" if columns is None:\n",
" columns = [params_name + '.' + str(i) for i in range(ncol)]\n",
" split_param = pd.DataFrame(lst, columns=columns)\n",
" return df.join(split_param, how='outer')\n",
"\n",
"def compute_speedup(slow_df, fast_df, match_list, stats_param, label_list=None):\n",
" res = []\n",
" for k, v in slow_df.items():\n",
" for idx, row in v.iterrows():\n",
" match_dict = {}\n",
" n = v\n",
" c = fast_df[k]\n",
" for m in match_list:\n",
" n = filter_by_val_col(n, m, row[m])\n",
" c = filter_by_val_col(c, m, row[m])\n",
" match_dict[m] = row[m]\n",
" \n",
" label_dict = {}\n",
" if label_list is not None:\n",
" for l in label_list:\n",
" label_dict[l] = row[l]\n",
" \n",
" n_med = n.iloc[0][stats_param]\n",
" c_med = c.iloc[0][stats_param]\n",
" \n",
" res.append(pd.DataFrame({'operation': [k], 'speedup': n_med / c_med, **match_dict, **label_dict}))\n",
"\n",
" return pd.concat(res, ignore_index=True)\n",
"\n",
"def significant_round(x, precision):\n",
" r = float(f'%.{precision - 1}e' % x)\n",
" return r if r < 1.0 else round(r)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"df = read_json('array3.json')"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"df = split_params_list(df, 'params.shape', ['params.shape.0', 'params.shape.1'])"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"cupy_df = df.loc[df['name'].str.contains('cupy')]"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"numpy_df = df.loc[df['name'].str.contains('numpy')]"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>fullname</th>\n",
" <th>group</th>\n",
" <th>name</th>\n",
" <th>options.disable_gc</th>\n",
" <th>options.max_time</th>\n",
" <th>options.min_rounds</th>\n",
" <th>options.min_time</th>\n",
" <th>options.timer</th>\n",
" <th>options.warmup</th>\n",
" <th>param</th>\n",
" <th>...</th>\n",
" <th>stats.ops</th>\n",
" <th>stats.outliers</th>\n",
" <th>stats.q1</th>\n",
" <th>stats.q3</th>\n",
" <th>stats.rounds</th>\n",
" <th>stats.stddev</th>\n",
" <th>stats.stddev_outliers</th>\n",
" <th>stats.total</th>\n",
" <th>params.shape.0</th>\n",
" <th>params.shape.1</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>pybench/benchmarks/benchmark_array.py::test_ff...</td>\n",
" <td>None</td>\n",
" <td>test_fft[shape0-numpy]</td>\n",
" <td>False</td>\n",
" <td>1.0</td>\n",
" <td>5</td>\n",
" <td>0.000005</td>\n",
" <td>perf_counter</td>\n",
" <td>False</td>\n",
" <td>shape0-numpy</td>\n",
" <td>...</td>\n",
" <td>55.982082</td>\n",
" <td>1;1</td>\n",
" <td>0.016357</td>\n",
" <td>0.018566</td>\n",
" <td>5</td>\n",
" <td>0.003005</td>\n",
" <td>1</td>\n",
" <td>0.089314</td>\n",
" <td>1000</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>pybench/benchmarks/benchmark_array.py::test_ff...</td>\n",
" <td>None</td>\n",
" <td>test_fft[shape1-numpy]</td>\n",
" <td>False</td>\n",
" <td>1.0</td>\n",
" <td>5</td>\n",
" <td>0.000005</td>\n",
" <td>perf_counter</td>\n",
" <td>False</td>\n",
" <td>shape1-numpy</td>\n",
" <td>...</td>\n",
" <td>0.396244</td>\n",
" <td>1;0</td>\n",
" <td>2.487194</td>\n",
" <td>2.558154</td>\n",
" <td>5</td>\n",
" <td>0.047411</td>\n",
" <td>1</td>\n",
" <td>12.618496</td>\n",
" <td>10000</td>\n",
" <td>10000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>pybench/benchmarks/benchmark_array.py::test_ff...</td>\n",
" <td>None</td>\n",
" <td>test_fft[shape2-numpy]</td>\n",
" <td>False</td>\n",
" <td>1.0</td>\n",
" <td>5</td>\n",
" <td>0.000005</td>\n",
" <td>perf_counter</td>\n",
" <td>False</td>\n",
" <td>shape2-numpy</td>\n",
" <td>...</td>\n",
" <td>0.087780</td>\n",
" <td>2;0</td>\n",
" <td>11.236303</td>\n",
" <td>11.509395</td>\n",
" <td>5</td>\n",
" <td>0.187650</td>\n",
" <td>2</td>\n",
" <td>56.960521</td>\n",
" <td>20000</td>\n",
" <td>20000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>pybench/benchmarks/benchmark_array.py::test_su...</td>\n",
" <td>None</td>\n",
" <td>test_sum[shape0-numpy]</td>\n",
" <td>False</td>\n",
" <td>1.0</td>\n",
" <td>5</td>\n",
" <td>0.000005</td>\n",
" <td>perf_counter</td>\n",
" <td>False</td>\n",
" <td>shape0-numpy</td>\n",
" <td>...</td>\n",
" <td>2993.666132</td>\n",
" <td>1;0</td>\n",
" <td>0.000333</td>\n",
" <td>0.000335</td>\n",
" <td>5</td>\n",
" <td>0.000002</td>\n",
" <td>1</td>\n",
" <td>0.001670</td>\n",
" <td>1000</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>pybench/benchmarks/benchmark_array.py::test_su...</td>\n",
" <td>None</td>\n",
" <td>test_sum[shape1-numpy]</td>\n",
" <td>False</td>\n",
" <td>1.0</td>\n",
" <td>5</td>\n",
" <td>0.000005</td>\n",
" <td>perf_counter</td>\n",
" <td>False</td>\n",
" <td>shape1-numpy</td>\n",
" <td>...</td>\n",
" <td>15.728330</td>\n",
" <td>1;0</td>\n",
" <td>0.063408</td>\n",
" <td>0.063785</td>\n",
" <td>5</td>\n",
" <td>0.000215</td>\n",
" <td>1</td>\n",
" <td>0.317898</td>\n",
" <td>10000</td>\n",
" <td>10000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>pybench/benchmarks/benchmark_array.py::test_su...</td>\n",
" <td>None</td>\n",
" <td>test_sum[shape2-numpy]</td>\n",
" <td>False</td>\n",
" <td>1.0</td>\n",
" <td>5</td>\n",
" <td>0.000005</td>\n",
" <td>perf_counter</td>\n",
" <td>False</td>\n",
" <td>shape2-numpy</td>\n",
" <td>...</td>\n",
" <td>3.775666</td>\n",
" <td>1;1</td>\n",
" <td>0.254629</td>\n",
" <td>0.269749</td>\n",
" <td>5</td>\n",
" <td>0.018232</td>\n",
" <td>1</td>\n",
" <td>1.324270</td>\n",
" <td>20000</td>\n",
" <td>20000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>pybench/benchmarks/benchmark_array.py::test_st...</td>\n",
" <td>None</td>\n",
" <td>test_std[shape0-numpy]</td>\n",
" <td>False</td>\n",
" <td>1.0</td>\n",
" <td>5</td>\n",
" <td>0.000005</td>\n",
" <td>perf_counter</td>\n",
" <td>False</td>\n",
" <td>shape0-numpy</td>\n",
" <td>...</td>\n",
" <td>578.606617</td>\n",
" <td>1;0</td>\n",
" <td>0.001694</td>\n",
" <td>0.001755</td>\n",
" <td>5</td>\n",
" <td>0.000038</td>\n",
" <td>1</td>\n",
" <td>0.008641</td>\n",
" <td>1000</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>pybench/benchmarks/benchmark_array.py::test_st...</td>\n",
" <td>None</td>\n",
" <td>test_std[shape1-numpy]</td>\n",
" <td>False</td>\n",
" <td>1.0</td>\n",
" <td>5</td>\n",
" <td>0.000005</td>\n",
" <td>perf_counter</td>\n",
" <td>False</td>\n",
" <td>shape1-numpy</td>\n",
" <td>...</td>\n",
" <td>1.672443</td>\n",
" <td>1;0</td>\n",
" <td>0.581637</td>\n",
" <td>0.621958</td>\n",
" <td>5</td>\n",
" <td>0.023297</td>\n",
" <td>1</td>\n",
" <td>2.989638</td>\n",
" <td>10000</td>\n",
" <td>10000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>pybench/benchmarks/benchmark_array.py::test_st...</td>\n",
" <td>None</td>\n",
" <td>test_std[shape2-numpy]</td>\n",
" <td>False</td>\n",
" <td>1.0</td>\n",
" <td>5</td>\n",
" <td>0.000005</td>\n",
" <td>perf_counter</td>\n",
" <td>False</td>\n",
" <td>shape2-numpy</td>\n",
" <td>...</td>\n",
" <td>0.426598</td>\n",
" <td>2;0</td>\n",
" <td>2.328234</td>\n",
" <td>2.356486</td>\n",
" <td>5</td>\n",
" <td>0.019133</td>\n",
" <td>2</td>\n",
" <td>11.720640</td>\n",
" <td>20000</td>\n",
" <td>20000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>pybench/benchmarks/benchmark_array.py::test_el...</td>\n",
" <td>None</td>\n",
" <td>test_elementwise[shape0-numpy]</td>\n",
" <td>False</td>\n",
" <td>1.0</td>\n",
" <td>5</td>\n",
" <td>0.000005</td>\n",
" <td>perf_counter</td>\n",
" <td>False</td>\n",
" <td>shape0-numpy</td>\n",
" <td>...</td>\n",
" <td>36.469401</td>\n",
" <td>1;1</td>\n",
" <td>0.026863</td>\n",
" <td>0.027667</td>\n",
" <td>5</td>\n",
" <td>0.001161</td>\n",
" <td>1</td>\n",
" <td>0.137101</td>\n",
" <td>1000</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>pybench/benchmarks/benchmark_array.py::test_el...</td>\n",
" <td>None</td>\n",
" <td>test_elementwise[shape1-numpy]</td>\n",
" <td>False</td>\n",
" <td>1.0</td>\n",
" <td>5</td>\n",
" <td>0.000005</td>\n",
" <td>perf_counter</td>\n",
" <td>False</td>\n",
" <td>shape1-numpy</td>\n",
" <td>...</td>\n",
" <td>0.285577</td>\n",
" <td>2;0</td>\n",
" <td>3.486965</td>\n",
" <td>3.522032</td>\n",
" <td>5</td>\n",
" <td>0.024751</td>\n",
" <td>2</td>\n",
" <td>17.508391</td>\n",
" <td>10000</td>\n",
" <td>10000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>pybench/benchmarks/benchmark_array.py::test_el...</td>\n",
" <td>None</td>\n",
" <td>test_elementwise[shape2-numpy]</td>\n",
" <td>False</td>\n",
" <td>1.0</td>\n",
" <td>5</td>\n",
" <td>0.000005</td>\n",
" <td>perf_counter</td>\n",
" <td>False</td>\n",
" <td>shape2-numpy</td>\n",
" <td>...</td>\n",
" <td>0.071214</td>\n",
" <td>1;0</td>\n",
" <td>13.920397</td>\n",
" <td>14.140934</td>\n",
" <td>5</td>\n",
" <td>0.187442</td>\n",
" <td>1</td>\n",
" <td>70.211068</td>\n",
" <td>20000</td>\n",
" <td>20000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>pybench/benchmarks/benchmark_array.py::test_do...</td>\n",
" <td>None</td>\n",
" <td>test_dot[shape0-numpy]</td>\n",
" <td>False</td>\n",
" <td>1.0</td>\n",
" <td>5</td>\n",
" <td>0.000005</td>\n",
" <td>perf_counter</td>\n",
" <td>False</td>\n",
" <td>shape0-numpy</td>\n",
" <td>...</td>\n",
" <td>126.684055</td>\n",
" <td>1;1</td>\n",
" <td>0.007456</td>\n",
" <td>0.008072</td>\n",
" <td>5</td>\n",
" <td>0.000897</td>\n",
" <td>1</td>\n",
" <td>0.039468</td>\n",
" <td>1000</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>pybench/benchmarks/benchmark_array.py::test_do...</td>\n",
" <td>None</td>\n",
" <td>test_dot[shape1-numpy]</td>\n",
" <td>False</td>\n",
" <td>1.0</td>\n",
" <td>5</td>\n",
" <td>0.000005</td>\n",
" <td>perf_counter</td>\n",
" <td>False</td>\n",
" <td>shape1-numpy</td>\n",
" <td>...</td>\n",
" <td>0.306723</td>\n",
" <td>2;0</td>\n",
" <td>3.222101</td>\n",
" <td>3.300049</td>\n",
" <td>5</td>\n",
" <td>0.043322</td>\n",
" <td>2</td>\n",
" <td>16.301370</td>\n",
" <td>10000</td>\n",
" <td>10000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>pybench/benchmarks/benchmark_array.py::test_do...</td>\n",
" <td>None</td>\n",
" <td>test_dot[shape2-numpy]</td>\n",
" <td>False</td>\n",
" <td>1.0</td>\n",
" <td>5</td>\n",
" <td>0.000005</td>\n",
" <td>perf_counter</td>\n",
" <td>False</td>\n",
" <td>shape2-numpy</td>\n",
" <td>...</td>\n",
" <td>0.043946</td>\n",
" <td>1;0</td>\n",
" <td>22.721544</td>\n",
" <td>22.797102</td>\n",
" <td>5</td>\n",
" <td>0.059265</td>\n",
" <td>1</td>\n",
" <td>113.775839</td>\n",
" <td>20000</td>\n",
" <td>20000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>30</th>\n",
" <td>pybench/benchmarks/benchmark_array.py::test_sl...</td>\n",
" <td>None</td>\n",
" <td>test_slicing[shape0-numpy]</td>\n",
" <td>False</td>\n",
" <td>1.0</td>\n",
" <td>5</td>\n",
" <td>0.000005</td>\n",
" <td>perf_counter</td>\n",
" <td>False</td>\n",
" <td>shape0-numpy</td>\n",
" <td>...</td>\n",
" <td>1931.480748</td>\n",
" <td>1;0</td>\n",
" <td>0.000195</td>\n",
" <td>0.000883</td>\n",
" <td>5</td>\n",
" <td>0.000472</td>\n",
" <td>1</td>\n",
" <td>0.002589</td>\n",
" <td>1000</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>32</th>\n",
" <td>pybench/benchmarks/benchmark_array.py::test_sl...</td>\n",
" <td>None</td>\n",
" <td>test_slicing[shape1-numpy]</td>\n",
" <td>False</td>\n",
" <td>1.0</td>\n",
" <td>5</td>\n",
" <td>0.000005</td>\n",
" <td>perf_counter</td>\n",
" <td>False</td>\n",
" <td>shape1-numpy</td>\n",
" <td>...</td>\n",
" <td>7.320091</td>\n",
" <td>2;0</td>\n",
" <td>0.129142</td>\n",
" <td>0.143152</td>\n",
" <td>5</td>\n",
" <td>0.007223</td>\n",
" <td>2</td>\n",
" <td>0.683052</td>\n",
" <td>10000</td>\n",
" <td>10000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>34</th>\n",
" <td>pybench/benchmarks/benchmark_array.py::test_sl...</td>\n",
" <td>None</td>\n",
" <td>test_slicing[shape2-numpy]</td>\n",
" <td>False</td>\n",
" <td>1.0</td>\n",
" <td>5</td>\n",
" <td>0.000005</td>\n",
" <td>perf_counter</td>\n",
" <td>False</td>\n",
" <td>shape2-numpy</td>\n",
" <td>...</td>\n",
" <td>1.572750</td>\n",
" <td>1;1</td>\n",
" <td>0.511375</td>\n",
" <td>0.679104</td>\n",
" <td>5</td>\n",
" <td>0.247003</td>\n",
" <td>1</td>\n",
" <td>3.179145</td>\n",
" <td>20000</td>\n",
" <td>20000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>36</th>\n",
" <td>pybench/benchmarks/benchmark_array.py::test_sv...</td>\n",
" <td>None</td>\n",
" <td>test_svd[shape0-numpy]</td>\n",
" <td>False</td>\n",
" <td>1.0</td>\n",
" <td>5</td>\n",
" <td>0.000005</td>\n",
" <td>perf_counter</td>\n",
" <td>False</td>\n",
" <td>shape0-numpy</td>\n",
" <td>...</td>\n",
" <td>1.832977</td>\n",
" <td>2;0</td>\n",
" <td>0.521671</td>\n",
" <td>0.574809</td>\n",
" <td>5</td>\n",
" <td>0.031359</td>\n",
" <td>2</td>\n",
" <td>2.727803</td>\n",
" <td>1000</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>38</th>\n",
" <td>pybench/benchmarks/benchmark_array.py::test_sv...</td>\n",
" <td>None</td>\n",
" <td>test_svd[shape1-numpy]</td>\n",
" <td>False</td>\n",
" <td>1.0</td>\n",
" <td>5</td>\n",
" <td>0.000005</td>\n",
" <td>perf_counter</td>\n",
" <td>False</td>\n",
" <td>shape1-numpy</td>\n",
" <td>...</td>\n",
" <td>0.103195</td>\n",
" <td>1;0</td>\n",
" <td>9.529022</td>\n",
" <td>9.817653</td>\n",
" <td>5</td>\n",
" <td>0.184939</td>\n",
" <td>1</td>\n",
" <td>48.452085</td>\n",
" <td>10000</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>40</th>\n",
" <td>pybench/benchmarks/benchmark_array.py::test_sv...</td>\n",
" <td>None</td>\n",
" <td>test_svd[shape2-numpy]</td>\n",
" <td>False</td>\n",
" <td>1.0</td>\n",
" <td>5</td>\n",
" <td>0.000005</td>\n",
" <td>perf_counter</td>\n",
" <td>False</td>\n",
" <td>shape2-numpy</td>\n",
" <td>...</td>\n",
" <td>0.027928</td>\n",
" <td>2;0</td>\n",
" <td>32.191616</td>\n",
" <td>39.850554</td>\n",
" <td>5</td>\n",
" <td>4.417399</td>\n",
" <td>2</td>\n",
" <td>179.032636</td>\n",
" <td>20000</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>42</th>\n",
" <td>pybench/benchmarks/benchmark_array.py::test_st...</td>\n",
" <td>None</td>\n",
" <td>test_stencil[shape0-numpy]</td>\n",
" <td>False</td>\n",
" <td>1.0</td>\n",
" <td>5</td>\n",
" <td>0.000005</td>\n",
" <td>perf_counter</td>\n",
" <td>False</td>\n",
" <td>shape0-numpy</td>\n",
" <td>...</td>\n",
" <td>356.499920</td>\n",
" <td>2;0</td>\n",
" <td>0.002740</td>\n",
" <td>0.002863</td>\n",
" <td>5</td>\n",
" <td>0.000107</td>\n",
" <td>2</td>\n",
" <td>0.014025</td>\n",
" <td>1000</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>44</th>\n",
" <td>pybench/benchmarks/benchmark_array.py::test_st...</td>\n",
" <td>None</td>\n",
" <td>test_stencil[shape1-numpy]</td>\n",
" <td>False</td>\n",
" <td>1.0</td>\n",
" <td>5</td>\n",
" <td>0.000005</td>\n",
" <td>perf_counter</td>\n",
" <td>False</td>\n",
" <td>shape1-numpy</td>\n",
" <td>...</td>\n",
" <td>1.649492</td>\n",
" <td>2;0</td>\n",
" <td>0.603097</td>\n",
" <td>0.609449</td>\n",
" <td>5</td>\n",
" <td>0.004122</td>\n",
" <td>2</td>\n",
" <td>3.031236</td>\n",
" <td>10000</td>\n",
" <td>10000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>46</th>\n",
" <td>pybench/benchmarks/benchmark_array.py::test_st...</td>\n",
" <td>None</td>\n",
" <td>test_stencil[shape2-numpy]</td>\n",
" <td>False</td>\n",
" <td>1.0</td>\n",
" <td>5</td>\n",
" <td>0.000005</td>\n",
" <td>perf_counter</td>\n",
" <td>False</td>\n",
" <td>shape2-numpy</td>\n",
" <td>...</td>\n",
" <td>0.405284</td>\n",
" <td>1;0</td>\n",
" <td>2.445619</td>\n",
" <td>2.493052</td>\n",
" <td>5</td>\n",
" <td>0.033832</td>\n",
" <td>1</td>\n",
" <td>12.337025</td>\n",
" <td>20000</td>\n",
" <td>20000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>24 rows × 31 columns</p>\n",
"</div>"
],
"text/plain": [
" fullname group \\\n",
"0 pybench/benchmarks/benchmark_array.py::test_ff... None \n",
"2 pybench/benchmarks/benchmark_array.py::test_ff... None \n",
"4 pybench/benchmarks/benchmark_array.py::test_ff... None \n",
"6 pybench/benchmarks/benchmark_array.py::test_su... None \n",
"8 pybench/benchmarks/benchmark_array.py::test_su... None \n",
"10 pybench/benchmarks/benchmark_array.py::test_su... None \n",
"12 pybench/benchmarks/benchmark_array.py::test_st... None \n",
"14 pybench/benchmarks/benchmark_array.py::test_st... None \n",
"16 pybench/benchmarks/benchmark_array.py::test_st... None \n",
"18 pybench/benchmarks/benchmark_array.py::test_el... None \n",
"20 pybench/benchmarks/benchmark_array.py::test_el... None \n",
"22 pybench/benchmarks/benchmark_array.py::test_el... None \n",
"24 pybench/benchmarks/benchmark_array.py::test_do... None \n",
"26 pybench/benchmarks/benchmark_array.py::test_do... None \n",
"28 pybench/benchmarks/benchmark_array.py::test_do... None \n",
"30 pybench/benchmarks/benchmark_array.py::test_sl... None \n",
"32 pybench/benchmarks/benchmark_array.py::test_sl... None \n",
"34 pybench/benchmarks/benchmark_array.py::test_sl... None \n",
"36 pybench/benchmarks/benchmark_array.py::test_sv... None \n",
"38 pybench/benchmarks/benchmark_array.py::test_sv... None \n",
"40 pybench/benchmarks/benchmark_array.py::test_sv... None \n",
"42 pybench/benchmarks/benchmark_array.py::test_st... None \n",
"44 pybench/benchmarks/benchmark_array.py::test_st... None \n",
"46 pybench/benchmarks/benchmark_array.py::test_st... None \n",
"\n",
" name options.disable_gc options.max_time \\\n",
"0 test_fft[shape0-numpy] False 1.0 \n",
"2 test_fft[shape1-numpy] False 1.0 \n",
"4 test_fft[shape2-numpy] False 1.0 \n",
"6 test_sum[shape0-numpy] False 1.0 \n",
"8 test_sum[shape1-numpy] False 1.0 \n",
"10 test_sum[shape2-numpy] False 1.0 \n",
"12 test_std[shape0-numpy] False 1.0 \n",
"14 test_std[shape1-numpy] False 1.0 \n",
"16 test_std[shape2-numpy] False 1.0 \n",
"18 test_elementwise[shape0-numpy] False 1.0 \n",
"20 test_elementwise[shape1-numpy] False 1.0 \n",
"22 test_elementwise[shape2-numpy] False 1.0 \n",
"24 test_dot[shape0-numpy] False 1.0 \n",
"26 test_dot[shape1-numpy] False 1.0 \n",
"28 test_dot[shape2-numpy] False 1.0 \n",
"30 test_slicing[shape0-numpy] False 1.0 \n",
"32 test_slicing[shape1-numpy] False 1.0 \n",
"34 test_slicing[shape2-numpy] False 1.0 \n",
"36 test_svd[shape0-numpy] False 1.0 \n",
"38 test_svd[shape1-numpy] False 1.0 \n",
"40 test_svd[shape2-numpy] False 1.0 \n",
"42 test_stencil[shape0-numpy] False 1.0 \n",
"44 test_stencil[shape1-numpy] False 1.0 \n",
"46 test_stencil[shape2-numpy] False 1.0 \n",
"\n",
" options.min_rounds options.min_time options.timer options.warmup \\\n",
"0 5 0.000005 perf_counter False \n",
"2 5 0.000005 perf_counter False \n",
"4 5 0.000005 perf_counter False \n",
"6 5 0.000005 perf_counter False \n",
"8 5 0.000005 perf_counter False \n",
"10 5 0.000005 perf_counter False \n",
"12 5 0.000005 perf_counter False \n",
"14 5 0.000005 perf_counter False \n",
"16 5 0.000005 perf_counter False \n",
"18 5 0.000005 perf_counter False \n",
"20 5 0.000005 perf_counter False \n",
"22 5 0.000005 perf_counter False \n",
"24 5 0.000005 perf_counter False \n",
"26 5 0.000005 perf_counter False \n",
"28 5 0.000005 perf_counter False \n",
"30 5 0.000005 perf_counter False \n",
"32 5 0.000005 perf_counter False \n",
"34 5 0.000005 perf_counter False \n",
"36 5 0.000005 perf_counter False \n",
"38 5 0.000005 perf_counter False \n",
"40 5 0.000005 perf_counter False \n",
"42 5 0.000005 perf_counter False \n",
"44 5 0.000005 perf_counter False \n",
"46 5 0.000005 perf_counter False \n",
"\n",
" param ... stats.ops stats.outliers stats.q1 stats.q3 \\\n",
"0 shape0-numpy ... 55.982082 1;1 0.016357 0.018566 \n",
"2 shape1-numpy ... 0.396244 1;0 2.487194 2.558154 \n",
"4 shape2-numpy ... 0.087780 2;0 11.236303 11.509395 \n",
"6 shape0-numpy ... 2993.666132 1;0 0.000333 0.000335 \n",
"8 shape1-numpy ... 15.728330 1;0 0.063408 0.063785 \n",
"10 shape2-numpy ... 3.775666 1;1 0.254629 0.269749 \n",
"12 shape0-numpy ... 578.606617 1;0 0.001694 0.001755 \n",
"14 shape1-numpy ... 1.672443 1;0 0.581637 0.621958 \n",
"16 shape2-numpy ... 0.426598 2;0 2.328234 2.356486 \n",
"18 shape0-numpy ... 36.469401 1;1 0.026863 0.027667 \n",
"20 shape1-numpy ... 0.285577 2;0 3.486965 3.522032 \n",
"22 shape2-numpy ... 0.071214 1;0 13.920397 14.140934 \n",
"24 shape0-numpy ... 126.684055 1;1 0.007456 0.008072 \n",
"26 shape1-numpy ... 0.306723 2;0 3.222101 3.300049 \n",
"28 shape2-numpy ... 0.043946 1;0 22.721544 22.797102 \n",
"30 shape0-numpy ... 1931.480748 1;0 0.000195 0.000883 \n",
"32 shape1-numpy ... 7.320091 2;0 0.129142 0.143152 \n",
"34 shape2-numpy ... 1.572750 1;1 0.511375 0.679104 \n",
"36 shape0-numpy ... 1.832977 2;0 0.521671 0.574809 \n",
"38 shape1-numpy ... 0.103195 1;0 9.529022 9.817653 \n",
"40 shape2-numpy ... 0.027928 2;0 32.191616 39.850554 \n",
"42 shape0-numpy ... 356.499920 2;0 0.002740 0.002863 \n",
"44 shape1-numpy ... 1.649492 2;0 0.603097 0.609449 \n",
"46 shape2-numpy ... 0.405284 1;0 2.445619 2.493052 \n",
"\n",
" stats.rounds stats.stddev stats.stddev_outliers stats.total \\\n",
"0 5 0.003005 1 0.089314 \n",
"2 5 0.047411 1 12.618496 \n",
"4 5 0.187650 2 56.960521 \n",
"6 5 0.000002 1 0.001670 \n",
"8 5 0.000215 1 0.317898 \n",
"10 5 0.018232 1 1.324270 \n",
"12 5 0.000038 1 0.008641 \n",
"14 5 0.023297 1 2.989638 \n",
"16 5 0.019133 2 11.720640 \n",
"18 5 0.001161 1 0.137101 \n",
"20 5 0.024751 2 17.508391 \n",
"22 5 0.187442 1 70.211068 \n",
"24 5 0.000897 1 0.039468 \n",
"26 5 0.043322 2 16.301370 \n",
"28 5 0.059265 1 113.775839 \n",
"30 5 0.000472 1 0.002589 \n",
"32 5 0.007223 2 0.683052 \n",
"34 5 0.247003 1 3.179145 \n",
"36 5 0.031359 2 2.727803 \n",
"38 5 0.184939 1 48.452085 \n",
"40 5 4.417399 2 179.032636 \n",
"42 5 0.000107 2 0.014025 \n",
"44 5 0.004122 2 3.031236 \n",
"46 5 0.033832 1 12.337025 \n",
"\n",
" params.shape.0 params.shape.1 \n",
"0 1000 1000 \n",
"2 10000 10000 \n",
"4 20000 20000 \n",
"6 1000 1000 \n",
"8 10000 10000 \n",
"10 20000 20000 \n",
"12 1000 1000 \n",
"14 10000 10000 \n",
"16 20000 20000 \n",
"18 1000 1000 \n",
"20 10000 10000 \n",
"22 20000 20000 \n",
"24 1000 1000 \n",
"26 10000 10000 \n",
"28 20000 20000 \n",
"30 1000 1000 \n",
"32 10000 10000 \n",
"34 20000 20000 \n",
"36 1000 1000 \n",
"38 10000 1000 \n",
"40 20000 1000 \n",
"42 1000 1000 \n",
"44 10000 10000 \n",
"46 20000 20000 \n",
"\n",
"[24 rows x 31 columns]"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"numpy_df"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"operation_list = ['fft', 'sum', 'std', 'elementwise', 'dot', 'slicing', 'svd', 'stencil']"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"numpy_dict_df = {o: filter_by_str_col(numpy_df, 'name', o) for o in operation_list}\n",
"cupy_dict_df = {o: filter_by_str_col(cupy_df, 'name', o) for o in operation_list}"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"speedups_df = compute_speedup(numpy_dict_df, cupy_dict_df, ['params.shape.0', 'params.shape.1'], 'stats.median')"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>operation</th>\n",
" <th>speedup</th>\n",
" <th>params.shape.0</th>\n",
" <th>params.shape.1</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>fft</td>\n",
" <td>5.298226</td>\n",
" <td>1000</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>fft</td>\n",
" <td>207.288559</td>\n",
" <td>10000</td>\n",
" <td>10000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>fft</td>\n",
" <td>263.460941</td>\n",
" <td>20000</td>\n",
" <td>20000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>sum</td>\n",
" <td>0.438050</td>\n",
" <td>1000</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>sum</td>\n",
" <td>0.770300</td>\n",
" <td>10000</td>\n",
" <td>10000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>sum</td>\n",
" <td>0.777896</td>\n",
" <td>20000</td>\n",
" <td>20000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>std</td>\n",
" <td>1.139616</td>\n",
" <td>1000</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>std</td>\n",
" <td>3.493579</td>\n",
" <td>10000</td>\n",
" <td>10000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>std</td>\n",
" <td>3.480939</td>\n",
" <td>20000</td>\n",
" <td>20000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>elementwise</td>\n",
" <td>151.076508</td>\n",
" <td>1000</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>elementwise</td>\n",
" <td>267.870391</td>\n",
" <td>10000</td>\n",
" <td>10000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>elementwise</td>\n",
" <td>279.728574</td>\n",
" <td>20000</td>\n",
" <td>20000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>dot</td>\n",
" <td>18.291424</td>\n",
" <td>1000</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>dot</td>\n",
" <td>11.388307</td>\n",
" <td>10000</td>\n",
" <td>10000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>dot</td>\n",
" <td>9.948615</td>\n",
" <td>20000</td>\n",
" <td>20000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>slicing</td>\n",
" <td>3.616147</td>\n",
" <td>1000</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>slicing</td>\n",
" <td>190.317978</td>\n",
" <td>10000</td>\n",
" <td>10000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>slicing</td>\n",
" <td>195.739683</td>\n",
" <td>20000</td>\n",
" <td>20000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>svd</td>\n",
" <td>0.276047</td>\n",
" <td>1000</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>svd</td>\n",
" <td>0.541149</td>\n",
" <td>10000</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>svd</td>\n",
" <td>0.770166</td>\n",
" <td>20000</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>stencil</td>\n",
" <td>5.138235</td>\n",
" <td>1000</td>\n",
" <td>1000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>stencil</td>\n",
" <td>152.764097</td>\n",
" <td>10000</td>\n",
" <td>10000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>stencil</td>\n",
" <td>151.173126</td>\n",
" <td>20000</td>\n",
" <td>20000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" operation speedup params.shape.0 params.shape.1\n",
"0 fft 5.298226 1000 1000\n",
"1 fft 207.288559 10000 10000\n",
"2 fft 263.460941 20000 20000\n",
"3 sum 0.438050 1000 1000\n",
"4 sum 0.770300 10000 10000\n",
"5 sum 0.777896 20000 20000\n",
"6 std 1.139616 1000 1000\n",
"7 std 3.493579 10000 10000\n",
"8 std 3.480939 20000 20000\n",
"9 elementwise 151.076508 1000 1000\n",
"10 elementwise 267.870391 10000 10000\n",
"11 elementwise 279.728574 20000 20000\n",
"12 dot 18.291424 1000 1000\n",
"13 dot 11.388307 10000 10000\n",
"14 dot 9.948615 20000 20000\n",
"15 slicing 3.616147 1000 1000\n",
"16 slicing 190.317978 10000 10000\n",
"17 slicing 195.739683 20000 20000\n",
"18 svd 0.276047 1000 1000\n",
"19 svd 0.541149 10000 1000\n",
"20 svd 0.770166 20000 1000\n",
"21 stencil 5.138235 1000 1000\n",
"22 stencil 152.764097 10000 10000\n",
"23 stencil 151.173126 20000 20000"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"speedups_df"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>operation</th>\n",
" <th>speedup</th>\n",
" <th>shape0</th>\n",
" <th>shape1</th>\n",
" <th>shape</th>\n",
" <th>size</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>fft</td>\n",
" <td>5.0</td>\n",
" <td>1000</td>\n",
" <td>1000</td>\n",
" <td>1000x1000</td>\n",
" <td>small</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>fft</td>\n",
" <td>210.0</td>\n",
" <td>10000</td>\n",
" <td>10000</td>\n",
" <td>10000x10000</td>\n",
" <td>large</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>sum</td>\n",
" <td>-2.3</td>\n",
" <td>1000</td>\n",
" <td>1000</td>\n",
" <td>1000x1000</td>\n",
" <td>small</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>sum</td>\n",
" <td>-1.3</td>\n",
" <td>10000</td>\n",
" <td>10000</td>\n",
" <td>10000x10000</td>\n",
" <td>large</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>std</td>\n",
" <td>1.0</td>\n",
" <td>1000</td>\n",
" <td>1000</td>\n",
" <td>1000x1000</td>\n",
" <td>small</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>std</td>\n",
" <td>4.0</td>\n",
" <td>10000</td>\n",
" <td>10000</td>\n",
" <td>10000x10000</td>\n",
" <td>large</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>elementwise</td>\n",
" <td>150.0</td>\n",
" <td>1000</td>\n",
" <td>1000</td>\n",
" <td>1000x1000</td>\n",
" <td>small</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>elementwise</td>\n",
" <td>270.0</td>\n",
" <td>10000</td>\n",
" <td>10000</td>\n",
" <td>10000x10000</td>\n",
" <td>large</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>dot</td>\n",
" <td>18.0</td>\n",
" <td>1000</td>\n",
" <td>1000</td>\n",
" <td>1000x1000</td>\n",
" <td>small</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>dot</td>\n",
" <td>11.0</td>\n",
" <td>10000</td>\n",
" <td>10000</td>\n",
" <td>10000x10000</td>\n",
" <td>large</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>slicing</td>\n",
" <td>4.0</td>\n",
" <td>1000</td>\n",
" <td>1000</td>\n",
" <td>1000x1000</td>\n",
" <td>small</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>slicing</td>\n",
" <td>190.0</td>\n",
" <td>10000</td>\n",
" <td>10000</td>\n",
" <td>10000x10000</td>\n",
" <td>large</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>svd</td>\n",
" <td>-3.6</td>\n",
" <td>1000</td>\n",
" <td>1000</td>\n",
" <td>1000x1000</td>\n",
" <td>small</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>svd</td>\n",
" <td>-1.8</td>\n",
" <td>10000</td>\n",
" <td>1000</td>\n",
" <td>10000x1000</td>\n",
" <td>large</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>stencil</td>\n",
" <td>5.0</td>\n",
" <td>1000</td>\n",
" <td>1000</td>\n",
" <td>1000x1000</td>\n",
" <td>small</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>stencil</td>\n",
" <td>150.0</td>\n",
" <td>10000</td>\n",
" <td>10000</td>\n",
" <td>10000x10000</td>\n",
" <td>large</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" operation speedup shape0 shape1 shape size\n",
"0 fft 5.0 1000 1000 1000x1000 small\n",
"1 fft 210.0 10000 10000 10000x10000 large\n",
"3 sum -2.3 1000 1000 1000x1000 small\n",
"4 sum -1.3 10000 10000 10000x10000 large\n",
"6 std 1.0 1000 1000 1000x1000 small\n",
"7 std 4.0 10000 10000 10000x10000 large\n",
"9 elementwise 150.0 1000 1000 1000x1000 small\n",
"10 elementwise 270.0 10000 10000 10000x10000 large\n",
"12 dot 18.0 1000 1000 1000x1000 small\n",
"13 dot 11.0 10000 10000 10000x10000 large\n",
"15 slicing 4.0 1000 1000 1000x1000 small\n",
"16 slicing 190.0 10000 10000 10000x10000 large\n",
"18 svd -3.6 1000 1000 1000x1000 small\n",
"19 svd -1.8 10000 1000 10000x1000 large\n",
"21 stencil 5.0 1000 1000 1000x1000 small\n",
"22 stencil 150.0 10000 10000 10000x10000 large"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Remove dots from column names, altair doesn't seem to work with those.\n",
"speedups_df = speedups_df.rename(columns={'params.shape.0': 'shape0'})\n",
"speedups_df = speedups_df.rename(columns={'params.shape.1': 'shape1'})\n",
"\n",
"speedups_df.drop( speedups_df[ speedups_df['shape0'] == 20000 ].index , inplace=True)\n",
"\n",
"speedups_df['shape'] = speedups_df['shape0'].astype('str') + 'x' + speedups_df['shape1'].astype('str')\n",
"speedups_df['size'] = speedups_df['shape0'].apply(lambda row: 'large' if row == 10000 else 'small')\n",
"speedups_df['speedup'] = speedups_df['speedup'].apply(lambda r: 1.0/-r if r<1 else r)\n",
"speedups_df['speedup'] = speedups_df['speedup'].apply(significant_round, precision=2)\n",
"speedups_df"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.vegalite.v3+json": {
"$schema": "https://vega.github.io/schema/vega-lite/v3.3.0.json",
"config": {
"axis": {
"labelColor": "#666666",
"labelFontSize": 20,
"titleColor": "#666666",
"titleFontSize": 20
},
"axisX": {
"labelAngle": -30
},
"legend": {
"fillColor": "#fefefe",
"labelColor": "#666666",
"labelFontSize": 18,
"orient": "top-right",
"padding": 10,
"strokeColor": "gray",
"titleColor": "#666666",
"titleFontSize": 18
},
"mark": {
"tooltip": null
},
"text": {
"fontSize": 18
},
"view": {
"height": 300,
"width": 400
}
},
"data": {
"name": "data-875c08b46dab603967b6ed4308886cc5"
},
"datasets": {
"data-875c08b46dab603967b6ed4308886cc5": [
{
"operation": "fft",
"shape": "1000x1000",
"shape0": 1000,
"shape1": 1000,
"size": "small",
"speedup": 5
},
{
"operation": "fft",
"shape": "10000x10000",
"shape0": 10000,
"shape1": 10000,
"size": "large",
"speedup": 210
},
{
"operation": "sum",
"shape": "1000x1000",
"shape0": 1000,
"shape1": 1000,
"size": "small",
"speedup": -2.3
},
{
"operation": "sum",
"shape": "10000x10000",
"shape0": 10000,
"shape1": 10000,
"size": "large",
"speedup": -1.3
},
{
"operation": "std",
"shape": "1000x1000",
"shape0": 1000,
"shape1": 1000,
"size": "small",
"speedup": 1
},
{
"operation": "std",
"shape": "10000x10000",
"shape0": 10000,
"shape1": 10000,
"size": "large",
"speedup": 4
},
{
"operation": "elementwise",
"shape": "1000x1000",
"shape0": 1000,
"shape1": 1000,
"size": "small",
"speedup": 150
},
{
"operation": "elementwise",
"shape": "10000x10000",
"shape0": 10000,
"shape1": 10000,
"size": "large",
"speedup": 270
},
{
"operation": "dot",
"shape": "1000x1000",
"shape0": 1000,
"shape1": 1000,
"size": "small",
"speedup": 18
},
{
"operation": "dot",
"shape": "10000x10000",
"shape0": 10000,
"shape1": 10000,
"size": "large",
"speedup": 11
},
{
"operation": "slicing",
"shape": "1000x1000",
"shape0": 1000,
"shape1": 1000,
"size": "small",
"speedup": 4
},
{
"operation": "slicing",
"shape": "10000x10000",
"shape0": 10000,
"shape1": 10000,
"size": "large",
"speedup": 190
},
{
"operation": "svd",
"shape": "1000x1000",
"shape0": 1000,
"shape1": 1000,
"size": "small",
"speedup": -3.6
},
{
"operation": "svd",
"shape": "10000x1000",
"shape0": 10000,
"shape1": 1000,
"size": "large",
"speedup": -1.8
},
{
"operation": "stencil",
"shape": "1000x1000",
"shape0": 1000,
"shape1": 1000,
"size": "small",
"speedup": 5
},
{
"operation": "stencil",
"shape": "10000x10000",
"shape0": 10000,
"shape1": 10000,
"size": "large",
"speedup": 150
}
]
},
"height": 500,
"layer": [
{
"encoding": {
"color": {
"field": "size",
"scale": {
"domain": [
"large",
"small"
],
"range": [
"#7306ff",
"#36c9dd"
]
},
"type": "nominal"
},
"x": {
"field": "operation",
"sort": {
"field": "speedup",
"op": "sum",
"order": "descending"
},
"type": "nominal"
},
"y": {
"field": "speedup",
"scale": {
"type": "symlog"
},
"stack": null,
"type": "quantitative"
}
},
"mark": {
"fontSize": 18,
"opacity": 0.7,
"type": "bar"
}
},
{
"encoding": {
"color": {
"field": "size",
"scale": {
"domain": [
"large",
"small"
],
"range": [
"#7306ff",
"#36c9dd"
]
},
"type": "nominal"
},
"text": {
"field": "speedup",
"type": "quantitative"
},
"x": {
"field": "operation",
"sort": {
"field": "speedup",
"op": "sum",
"order": "descending"
},
"type": "nominal"
},
"y": {
"field": "speedup",
"scale": {
"type": "symlog"
},
"stack": null,
"type": "quantitative"
}
},
"mark": {
"dy": -5,
"type": "text"
}
}
],
"width": 500
},
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAkEAAAJyCAYAAADD6hSuAAAgAElEQVR4XuydCXhU1fn/v+cmM0nYieyCgIioVXEFFFEp1qXVulJtXapA7iDuCfqj1iXWFSVo/ygwN6BFq8W61bbuCyoqgmgtiooWXNiULeyQTGbO/zlDJk6SSTI5uTNzbvK9z9OnMHOW937f8w4f37MJ8KECVIAKUAEqQAWoQCtUQLTCd+YrUwEqQAWoABWgAlQAhCAOAipABagAFaACVKBVKkAIapVu50tTASpABagAFaAChCCOASpABagAFaACVKBVKkAIapVu50tTASpABagAFaAChKA0jYFiSP9WP84EcKQA+ktguWXhzSm7xevKhOsg87N8+F1D5oQFVt9fIZ5TZYohrW0+HA6B0yCRLwQWyQq8XgKxIU2vxG6oABWgAlSACnhaAUJQGtx3FWQHvw9PQ+AXVd1tA9A++meJaSUhcfV1fnmIBSxp0ByJN0tCYpQqU5gjZwmJsbXKrwpbGPHAbvFtGl6LXVABKkAFqAAV8LQChKA0uG9ijrxeStwL4LFdFZjQDdi9JRvHWBZeUDAkLPyi3W68u9WHQYnMEQIzAQwTAqdPKRcvFPnlbwE8AYnXfCGcvxzY2seP3wrgMQCfl1SIn6XhtdgFFaACVIAKUAFPK0AISoP7ivzynwDOQAW6xk9XFfnkFAgUAbijpELcnMiUQp8MKAgSwKQpFWKyKlPkl4sAHC0s7Dtlt/gmVq8wR74rJIZLiSOmhsR/0vBq7IIKUAEqQAWogGcVIASlwXVVEISSCvHr+O6KfHIqBK4DcGtJhfhTbVOKcmVfRKCmtpZ8X4EjnoIIA1IU+REB8FVJhaiROSrMkY6QKIBEoCQknDS8GrugAlSAClABKuBZBQhBGXLdtbmyX1YE0SxOJIIT768Ub9c2pdAv/yGAM6WFk6buFm+o729oI3uFK7EawAslFeL0+DqFOXKikLgPwM0lFeKODL0au6UCVIAKUAEq4AkFCEEZcNNEv7xAAipT0x4CTkm5CNQBIJ88XAh8XBt2CrPlscLCe2p9UUmFuKQGBPnluQJ4WkhMnRISapqNDxWgAlSAClABKlCPAoSgNA6Na/3ywCyJByHw82i3Ate2L8e0Ygg1vVXjKfTLxwRwkZAYNiUkFsa+vM4nh1gC6u//qjO95pcXAvhrfdNraXxVdkUFqAAVoAJUwHgFCEFpclGhT14qBB6p6u4xmYU/Tt0lVibqfmKu7C8jWJFo3U9D3xX65BVC4EFIXFESEtPT9GrshgpQASpABaiAJxUgBKXBbRNz5K+kxL8BbLMEzruvXLzaULdFfnkLgNtUpqikXPw5vux1kHmWHzvVZ+0r4CuGqIx9X+SXjwK42IrguPsqhZoy40MFqAAVoAJUgArUowAhKA1Do8gvXwZwSuycn8a6LPLLBepcoGwLfSfvFt/XLl/ol48L4Hfxu8CubSN7ZlVijQKt9hXIj4ejxvrj91SAClABKkAFWqMChKA4r0+ePPlWKWVx/EDo1q0bTjjhBO2xEakUmHlI/2j9/iftSNjOvr/YgUG/3h79rnyrhdlD+6Ft90r8/q06/BMts+7THDz9m72jfz4ysBltulbiv3/piK2rfDh56jrsd9qetvhQASpABagAFaACPykwYMCAGtxDCGpkdNxzzz1y0qRJ2joV+uRgIfBJI91UH5Z4XY481ZJ4KdHur/g2inKkujPsyerrN6I3cOCmqRXiTg54KkAFqAAVoAJUoKYCy5cvl4SgJo6KeAgq8snZEMhpYhMpKy7U/jKgUwTIFsBGdeRQczqTETwytXLPeUR8qAAVoAJUgAq0JAUIQRreTABB3TSa8UQVGcEDqYCg6/zyZ5Y6FkDiSAiUS+ALfznm3ANRlkiYQp883AIKsrJwT6I1UddB5gs/fgGJ4ywL30fCeG9qpXjfEyLTSCpABagAFciIAoSgRmRPtCZIVRk9enS05rw/dsWuTVkZcV46Oj30ki3ofcwuV7v69s22ePGK7tE2fW0jCO2won/Oyw/jzDlrkb9fRY3+ZAR4+Zru+Ob1tjjvqdXodnB5je83Lfdh7ul96tg45KoyHDUhIVO5+j5sjApQASpABbyrgPHTYbZt+4QQg5XEO3fu/OKxxx5LvJoYQFPKqvYmTJjQJxKJRGbOnKmunUjqYSYoKZkSFrIhfe39UJSzDRGcXlKJ+de2QQ8rhBuFwJVS4L2p5eI4VbkoWx4PC6MAnKYuh1WfRSSOvj8kFscatyHbtPfjQwAHATi7fQX+uRHYy+/HC1V1zi6pEP/Qt5g1qQAVoAJUoKUqYHQmaMKECT0qKytfBHB4LQe8YVnW72bOnLku9nlTyqo6tm3fCmAMgH2q2lDrZ/7sOM7tjTmbENSYQvV/f51PHmUJfAiJ+0tCojBWciJkN+nHj+rvuyrQfjrE9ok+OV0KXB7fWm0IqloM/qIUmD21XIyLlS3MlaNEBK9L4PmpFeIsfYtZkwpQASpABVqqAsZC0Pjx47tFIpFPAaj1NpVSyoVCiH0B9KxyxqqysrJ+Tz31VLgpZasASN3LNbOqnS8BhAH8rOrvtzQGQoQg/XCYmCPPiAD/ZwF3TykXKlsTfeLONMK2CrR1IKKHP8ae2KGPCSDoKkj8PzVDWVIhnq4unyv7IoJvVcappEJ00LeYNakAFaACVKClKmAsBNm2fQWAB7Fnh9MhjuOsVU4IBAK/lFJG//EUQowLBoOzm1hWZX6WA8iWUl5UWlr6eFW750gpn1F/DofD/WbPnv1dfU4nBLkdDlIU+VACgesg8VZJSIys3UN9EFTok9PUNFpEYuj9IbEoVm80ZNY+fkRPzt5WAb8DEXLbarZHBagAFaAC3lbAWAgqKCh4SghxnhCiKBgMTo2X2bbtrwHsB2CO4ziXNqVsIBC4SUqpprw+chznqFrtqrUmRwKozgZxYbT7C6PjNd+xPgtv39oV385rE10kfe6Tq5E/oC6vvDGpG5Y9367Owuh/je2Jle/n4XcvrkSn/jXrPXFaH2z+1oexC75DTieV7DPrWTyjM3I7hXHwb7fWMSy008LX/26HDV/6keWX2HvIbvQ8chdyOtY88UAtGt/wRQ6+n98Guzdb6H5oeXQhe25n897XLPVpDRWgAlRgjwJGLoy2bVtdFtpfCHFsMBhUV0ZUP4FA4Fkp5dlCiMeDweBFTSw7F8D5QohJwWBwci0IugPAHwG87TjOifUNEGaCmh86xZDZW3NwpZC4X7UmBeZLYMz95eJ/iVqvdzrML9X9a7+qPU2m2ijyS3UZbe/2Fcgphqi55az5r9CsFq73ySMiAh8B+FdJhfh1fGNVF+K+DkBN/8Y/K1CBoSUQG2IfFubIWUJibK1yq8IWRjywW6jpQD5UgApQASpQjwLGZoLq85ht2wMAqHU82UKIy4PBYGxtT50qicratr1ETa8BON1xnOo1KapyIBC4SEr5mLqp3XGcQYQgIBXnBF0D2T3bh7kQOBES66KXwlZgLiBkfZrXOx32EwTUWBNUBUGqPWPWBE2EbBvJQYGQUDsdL6161zoQVFQFdkJiqpWN+61d2FGRg8uERImCxanl4viq9/stgCcg8ZovhPOXA1v7+PFbAagx/HlJhYitc+MPIBWgAlSACiRQwFMQFAgE1LodtYYnF4C6RGs/x3ESrvWor6xt2+rQm9xIJHLMrFmzPojXJG690UbHcboQgtyHoKoM0JtCYoSazsyuwDWTIbY0Fp31QdBEv/yDBO4C8H8lFeLeWDvX58iBEYmvFCCUhMTJjbWfju9vyJO9w2Go7FT8UwOCroLs4Pcjqkf8AvFiSGubD2sh0C0MHPRAhfiiyC/VGqijhYV9p+wW38QaLcyR7wqJ4VLiiKkh8Z90vBv7oAJUgAp4UQFPQJBt22oxs8r4qPNi1PNldnb2ydOnT6/9D4ra+t5gWdu2o9mGSCQyeNasWSorVP0EAoEzpJT/VPeROo6z5zS/BA+nw/SHemG2PFZYeA/Ah+0rcGyyN9s3MB12AIAvAKzaVoFBsV1lhX55jwD+T0pcOTUkHtK3ODU1b8iRg8IymtGsAUHRk7SBzxLBW5Ffzq461uGikgo8UeSPXonyVUmFqJG1LMyRjpAogESgJCSc1LwBW6UCVIAKeF8B4yHItu0iAFOqpK4UQvxfz549HyguLq5zJ1YyZW3b3gygYyQSOX7WrFnz411YUFAwRgih/qFZ6jjOweo7Lox2d2H0fx7uiAX37YVO/ULoXOtk6JgvTp6yDlk5NWfG6lsYreq8ck13LH+1LXoetRv7/2o7Nn7lx2d/64AuB5Xj7L+ugS+v3lm2jEXw5m98eOKXfdBv5E78cvoP1XaUb7Uwe2i/6CLxsR98Byv7J9ufu7gX1i7OxYibNmLfX2zHnBP6ou8JO/GrmT/VVw3FNB56TRmOHM8TszPmZHZMBaiAJxQwcmG0Ui6266tKxTnhcLhw9uzZmxKpmmzZ2M4yKeXY0tLSh+Pbits59qrjOKcwE+T+dFihXz4rgLMbigxRgXZTIGqcCh7LBFkSR94XEh/H178OMs/y40kAZ8R9vgQWfl2yW9R71EEmo7O+TJCyKTadBYmScBYe9GVhdyQEG8BtUZslrpASn1Rl1B4rqRCXxL9LoV+eK4Cn1ZqiKSGh/iOCDxWgAlSACiRQwNhMUEFBwQQhqqcxTnEc59X6PNiUsrZtK/C5TAjxXDAYPCe+zdiiaSHE1cFgcBohqH4IKsyWoywL9U4ZZiLapEQHIbCPEFgtJZqdAplSIZ5I1Xs0BEHX+eUhFqJThu1r9b9NfSYiGBUW2G4JLEy0u6zILy8E8FcAt5ZUiD+l6h3YLhWgAlTA6woYC0GBQOAdKaVaPHuf4zg3NCR0U8oWFBQcK4RQ/8Cowxart9/btq0Wz76iPrcsq3dDd4lxTRCgIEhYuNbrAVCv/RLrSkKi9tZz1163IQhSnVRdIzJGAocIiY0RgXkWMAzADZEs9M6S8MsI1DESddcE+eQVQuBBlTEqCYnprhnNhqgAFaACLUwBUyFI2LatznXJBrBbXZtRj+6zHMcpbELZ61Q7tm2/BOBU1a4Q4mUAIXXuUFUfVzmOo06qrvchBBGCmvs7UB8EqV1gW7IxQghsrb2zq2o32AElFeh4HZBr+RG9WqR9BXzxC8yrpw4jOO6+yj3Az4cKUIHMKVBcXGzewsTMyeFaz8XFxaK5jRkJQYFA4CAp5dLGXk5K+ahlWZOTLVtaWvr7KgjyAVAXs54U14e6n2xGaWnp1fH9cmF04oXRqxbkYcmjHRtzkWe/z8sPY+Sd61Nmf30Lo6UEZhy0b3Rh9LiF30Fk7fntXPtRLp67qBcGnr4dv7hvz73Br13fLXqq9Im3bcBBv9lz6rQ6gXvO8X3r1E/Zi7BhKkAFGlXgsccewy233NJoORZIXoE//elPuPjii5Ov0EBJYxdGu/J2DTQyduzY/Ozs7BPD4fBmy7Lm13fmUO0mmAliJqi5Y7Oh6bBYJkcAT0UimAGBPtHpLTWFW4H9pkBEKajIJ4+GQOy+tLukxBohUKhOmpbABVMrhFoszocKUIEMK6AyQYQgd52gIKjFZoLclcr91ghBhKDmjqrYYY4SeH5qhTgrvr0iyC7wRxc2x+9Q/FxYuGbKbqGu06h+inLkaZDRnXHVi6glcNPUCnFnc21kfSpABdxRgBDkjo7xrRCC3Nc06RYJQa0bgor8svpk6qQHjUZBIZAvJTpKgc2iod1uEhaALhLwCURPla5zhlZTupcRvDK1UrzRlDosSwWoQP0KEILcHx2EIPc1TbrFVEDQZ1N/OCJ7s1V+wJ+61VkL9dWk9QeE20TUIvEaT/Z2KzTw3q7Lqj/Mglh30rauP56yo3e4fdjf/rPcjT2e77Cq7bc+dVWI1lPf3WGteXdYkU/OVtdXaAnqgUqpuC8u/rULffJwCyjIysI9k3cLdf1N9XOtXx6YLTEqkUyWhdfuLRfV4/06yHzhxy8gcZxl4ftIGO9NrRTve0BimtjKFCAEue9wQpD7mibdotsQtO7kbV2X3bx+qH9j1s6hZ/V9M96QiE+K99785leJjBNhETnuxP5qgXf0+eivK4/b2TfUKb6sKnPI1T3f7bgkd8/K2SY+hKC6ghGCmjiI4oqr3W9b/XhaHZgZkTj6/pBYHN/aRL/8PwncU08PF5VUCHV3IBQsZQGfJyjHs5H03cOaKVKAEOS+sIQg9zVN2GKqdodV5El8fPI2bOwVwqZee+6Abb8pC2fd37WGHZt6VuKFCRvQ58tcHPpm2xrfWWGBTuv2JIg+PXE7Phm1HW22ZuGXM/dC7g6BT0/Ygf/+fDuyyy389g69xMWhl3B3WO2BMe+PXbFrU1aaRmD6u6nP582xZM2HuVj1QR6+n98G6z7NiTZ13lOr0e3g8hrNzru5K754uj0ufGUlRK3Nr3l7heFrE0Fol8DTo/dG2XI/TnvwR/QbuQO7N2fhhfE9om2rz/qPqnHgeHNMZ10q0GwFuDus2RLWaYC7w9zXNOkW3cgEbT9wd7v/OGtOjO80USZo1e829/7m8k2H9Xmk82f9Hu78bX1GvvfqN6dE8qTv0Kt6vdPxk5+yPu+/+O3J4fYR/wG3dV/Y9fW2Td7zzUxQXcWZCUo6VKoLTvTJ6VLg8viaiTJB6soQSORNrRBH1tdL1WLwF6XA7KnlYlysXGGuHCUieD3RYvOmW8waVMA9BZgJck/LWEvMBLmvadItugFB8Z1tHrKr06cla49LBEHLblp30LpTtu+735QuiyvbRnwVvSrbtPnav6Xbq+3XZ+0S4Wg7Apj/zorTrQoRHj6qvzoIsvpZ/NeVx+3qG+rU7ZV2Kwbd0S3R9EGD700IIgQlHRhJFowdAZAIgor8cquCGAu4TwI/E8DOLAv/iV87VJQjr4LE/wMwuqRCPB3rtihX9kUE6j8UtpVUiA5JmsNiVCDlChCC3JeYEOS+pkm3mE4I+u/MNUO3/mx3zTkydbVHuagcdEfXxV3eardh+8Dytv95ePVIX1nWzmG/rrmmaOk9PwzeNHxnn04ftllzSGGPGhePJvPChCBCUDLjpCll6oOgSZCdQ34kvCAZwB3tK3BrMUSk0CenCYErIxJD7w+J2DlJGA2ZtY9/z+ny2yrgdyD2zDPzoQIZViAVELRjxw5EIhFkZWWhTZs2GX7D9HdPCEq/5tU9phOCFv7ju59X7BVuk73F2t395fbfhDpG/BtH7OgTbhvxq0XPR1/Q542yoTvzv5644cjc1dlbj75gn3fipfnm8o0DVv1uy4HtvsxZf3jB3urCzSY9hCBCUJMGTBKF64OgIp88EgLRhdICmASBzyIRnCoE1Env7SFwdUm5mFbkk69C4BdZAgfE7xZT9Yr8Uu0e299fgS53Q2xMwhwWoQIpVyAVEHTVVVchFAqhffv2uO+++1L+DqZ1QAjKoEfSCUGrLtq8T3m3ytz+0/f6n7Vb7Dn/RQAf/OO7UaH8cF7P5zt81f6LnC1fTVp/dKLptOXXbdh/zTlb9++0OHfNIdf1YiYo2XHTwAWqXBOUrIiJy9UHQde2kT2tSoyCxNL4e9MKfXKYEFiAPT7pXuSX/wbwq3qm01YC6N2+AjnF6nxtPlTAAAUIQe47odVB0KWXXpqbk5Ozr2VZa2fMmFHWmKSjR4/Oys/PP1FKWeY4Tr3/+E+YMKFPJBKJNHRrfO2+0glB9b3n1zesH/TDGdsGdliau67fzPwvl0xbc3yiNUFf3PbjwRt+vqNft9fbfTPotrpnEDWmIzNBzAQ1Nkaa+n1Da4Lqa6vIJ39UZzNlV6BTKAclQmJs7TVBVZkgddka1wQ11Sksn1IFUgFB77//PsrLy6NTYUOHDk2p/SY23uogKBAIXCWlVIsh/+g4zl2NOcW27ckAbgCw1HGcg2uXt237VgBjAOxT9Z1Knf/ZcZzb48umaot8fB8beofwUmBjnS3y2zuH8cWwncj/IRsD/pNX4xXeunAzVh6wGwMX5+Golzrgbzf/GP3+wuLuUFvnY4/aXq+22R//ZCf0/Sy3MdnqfM8t8nUl4xb5Jg+jGhXemNQNy55vV2eL/LdvtcH2tdnY//Tt8Lf/6dDr8q0WZg/tF21j/Gcr8MnsTvjg/nwcM3ETDh+7ubrtLd/58PipfdDn2F04Y/ba5hnJ2lTARQWaskVerfOZN28e3n77bWzYsCE63XXggQdG/zdkyBCIqrMjHMfB9u3bkZ+fj0svvRQffvgh5s+fX6/Vw4cPr4alzz77DC+99BLWrFkDy7Kw7777YtSoUTjggANcfOvUNtWqtsjbtt1THYUDYK9kICgQCBwvpXy7ygV1IMi27QCAmVXffwlA7bL6WdXfb6kNQrVdma5M0I5+obyPH1s5Sq39GfbrfV7N3poVXfQZyZHW+y9/e6rMltZ+U7t81PO5DmsXPfn9CeW9KtvH7wLbuV95248eWT1SSMhjf9H/Jau8ajqtCWOTmaC6YnE6rAkDKEHR+jJBE32yRKoLYCUCJSHhxKoW+uQlQmAOJN4sCYlRRX6pfqm/ALBqWwUGORA7VdlCv7xHAP8nJa6cGhIPNc9K1qYC7inQlEzQX/7yF3zwwQcJOx85ciTOP//86He11wT985//xIsvVp+dW6f+KaecgrPPPjtaRpVN9FxyySU49thj3XvxFLbUKjJBBQUF/08IMQRAfK6vwUzQ5Zdf3jkcDn8DoGMiCLJtW2V+lgPIllJeVFpaGj2BNhAInCOlfEb9ORwO95s9e/Z39fkvXRCk+l/03Pcjy7tUtrV2iVDXN9t9Z4VEZMPPt/cNdYjk+DZn7Rp2Rt/oHU/rTtvWbdmN65VW6LAk98ec9dm7NpywYx8FSr3/3vHL/tP2+p/OeCQEEYJ0xk1DdeqDoOt88ihL4MOqundJ4GMBHAggmp2VEQyPXYsx0S+flsC5UmC+iOAJAIdAYIKqs70CI2Jg5LbtbI8K6CiQLARt27YN119/fbSLbt264Xe/+x3Wrl2LZ599NroIWmVtpk2bFt0RVhuCvvzyS/z3v/+tNu/HH3/E55//dCrKeeedh8GDB+Pmm2+OllFtnXDCCerfO7z77rvRnWbqeeCBB5Cb2/RZAx1dmlOnVUCQbdtqi2vtO7MahCDbthUKnwZA3bZ9Uu3psEAgcJOUUv2ofuQ4zlHxTrBtW+1MUYe0NZgNioegq3pUPpMVimaotJ/Nh5W3//yuH47wb8jeddQle1dv+VUNlu8V9i2d/OPg3b1CNY6Lzlvt237QpO5LcjZmVW8DXn3elp7fX1q2v7R+mg7rtDhv3UG3dFP/1az1bD60/NG/zGv7cO3KvDus9d0dVuSXB2kNorqV7gbwa7WmB7WuvhACP5cR3AaB/OpqEpuQhT8ggndjn4UlcrOAEghUHzgqga8sC1fICNbo2llSIZp8lpZuX6zXehRIFoLU9JT6x109OTk5OOuss3DQQQehrKwsCkPqUZka9V1Du8O2bt2K2267DWobvXoOOeQQTJgwIToFFssCqayQyg6p58knn4xOwalHgdfxxx9vvHNaBQSNGzeueyQSid5P4PP55kopRzQ0HRY3zbVASnmLEOK12hBk2/ZcAOcLISYFg0G1bqj6sW37DtU+gLcdx6lxmnN8uXgIGjt85zJrt4hlnVI2cMq7V2bt7Fvhs3Zbsu03/lD2NivhTeEyC9h+QLk/nCtFxyU5FSIk1EJR7WfbwNCUuXM7TCEE/aRAa50OSxf4CsCSEu0A+AHshIC6ADjhOJaAXwAdILAdEru1B7qq2MCOwGa1y8qtXoFkIUgJ9Yc//CEKPfFPXl4eTj31VJx44olRAFJPfRCkFkvfeeedWLduXbRc3759o9ml7OxsPPzww1i0aM9/Z6tMkMooqUdlmWKPAiAFQqY/rQKCagGKOgn51Pog6PLLLx8UDofV+p7d2dnZ/UOh0MH1QNCSaOocON1xnBfi+wgEAhdJKR8D8JXjOIPqGwSZgKBMDUhCUF3lCUGZGo0p7pcQlGKBW2/zTYGglStX4vHHH8e339a9Jalz5864+26VSE0MQWpKa8qUKVixYkW0TJcuXXDTTTdVT289+OCDUIuiYxCUyCNqAfWFF15ovLMIQXEusm3bB0AdktYfwNmO4/yjoKDgpHogSP1XZW4kEjlm1qxZNVafBQKBX0opFRhtdBynCyEIIAQRgmIKpCsTlLFfX0JQxqRv6R0nC0EbN26M7ghTT6dOnaIg9Omnn+Ljjz+uXrNzzTXXRHeKJcoEzZo1C4sXR88bRdu2bXHrrbeiQ4efbpB5+umn8frraqUIMGnSJPTrt2fXpRcfQlBNCHoQwBVCiMeDweBF6qsGICiaVo9EIoNnzZqlskLVTyAQOENKqZbNr3McpzshiBCUaAwwE+TFn8wkbCYEJSESi+gokCwEKUBRoKKeYcOG4YILLohmcebOnYu33nor+vnvf/97HHPMMXUg6LnnnsMrr7xSbZ6q2737T/+MdezYMbolXoGSevr06YPLL788Oi2mdqSphdXqGT9+PA477DCd10xrHUJQldzjx48fHolE1IJJtX18pJRyu/pKCHEcgGkAvpdSnpmdnb1rxowZy2zbVgeLdIxEIsfPmjWrxqEKBQUFY4QQs+PXETV2TtCMG7qismzPvGpLfA67ZAtGjFDJs5rPqgV5WPJoypdCZUzSvPwwRt65PmH/rfWcoNbs84wNRHbcIhRI9pwglQW65ZZbqrM+6uV9Pl/1mh0FLHfddVc0S1Q7E3TjjTdi06b6rt5DdIG1qjN58uSEU22qL7UjLbYw23ThW9U5QcoZtm0nXBMUCAQuk1LW2b2UwIGrHMfpY9v21wD2k1KOLS0trVEvbufYq47j7Fk2n+DhmiCgNU+NMBNk+s+jpn3MBGkKx2qNKZBsJki1o9bszJkzB2q7fPyjDk287LLLojCjHjUtphZBx+4OawyCDj74YHut9h0AACAASURBVFx55ZXRHWMqs6QOV4x/Bg0ahHHjxkXb88LDTFCVl8aPHz8kEolMSOC03gBGqYXSagegygg5jnOLbdsKfC4TQjwXDAbPia9n23Z00bQQ4upgMKiySIQg7g6rMwYIQV74idSwkRCkIRqrJKNAUyBItacWOKtzftQaISkl9tprL/To0SM6deXWo2Bo9erV0b569+6Ndu3UhkzvPISgRnxl27aaDlPTXTVOjC4oKDhWCPGeqi6EODYYDC5Qf7Zt+2QA0QlVy7J6N3SXGDNBzASpe6y883PRNEt5QGbT9GJpKtCYAk2FoMba4/eITtsVFxf/dCiepijLly+XAwYMqNFOsxvVtKXBavVNh9VXqT4IqgKe2NRapRDiZXVMgpTy7Kq2rnIcRy20rvchBBGCCEGpiPIMt8lMUIYd0HK7JwS579vWCEGxk6D/4DjOPY1JGrdg+lPHcQ6NL1+1pV61p06Ujj2VUsoZpaWlVzfWNiGIEEQIaixKPPg9IciDTvOGyYQg9/3U6iDIfQmBsWPH5mdnZ58YDoc3W5Y133Gcn47NZCYoqgDPCao7ELgmKBXRaECbhCADnNAyTSAEue9XQpD7mibdIjNBzAQxE5R0uHinICHIO77ymKWEIPcdRghyX9OkWyQEEYIIQUmHi3cKEoK84yuPWUoIct9hhCD3NU3YIg9L5GGJtQcGD0tMU/CluZuGDshMsynsroUpkOxhiS3stVP6Oq3usMSUqtnExpkJYiaImaAmBo0XijMT5AUvedJGZoLcdxszQe5rmnSLhCBCECEo6XDxTkFCkHd85TFLCUHuO4wQ5L6mSbdICCIEEYKSDhfvFCQEecdXHrPUBAhS12yo589//rPH1EtsLiEog24kBBGCCEEZDMBUdU0ISpWyrb5dEyBIXZ6qrt0gBNUcjp45MdqkKCIEEYIIQSZFpEu2EIJcEpLN1FaAEOT+mGAmyH1Nk26REEQIIgQlHS7eKUgI8o6vPGapLgQ9ck5yt1hd9qxsVJFEmaDFixfjk08+wdKlS5Gbmwt1k/zgwYNx+OGHV7c3ffp0tGnTBiNHjsS//vUvrFmzBnfddVf0e3Xj/SuvvIIffvgBAwYMwPDhw7FixQps3boVF198cXUb69evxzPPPIPly5dHP1P9nHLKKejTp0+jdtdXgBCkLV3zKxKCCEGEoObHkXEtEIKMc0lLMchECJo3bx6efPLJqMTdu3eP/r+6uV49Y8aMwZAhQ6J/VvAUDoejf1Y3zufl5eH+++/H/Pnz8fjjj0c/b9++PXbv3o1QaM+lCzk5OdXTbgp8SkpKonV9Pl+07KZNm6JTcxMmTMDBBx+s5WZCkJZs7lQiBBGCCEHuxJJRrRCCjHJHSzLGRAi6/fbbsXr1atx4443YZ599onK/8847eOKJJ3DYYYdh/Pjx1RCk4KZz584455xzcOSRR6KiogKFhYVRsFH/v//++0dBKRgMYsmSJdUQJKXEzTffjA0bNkTrjho1CllZWdHs08yZM9GxY0dMnjxZy9WEIC3Z3KlECCIEEYLciSWjWiEEGeWOlmSMiRC0cOFCCCGqMz5K7xicHHDAAbj22mtrQNDVV1+Ngw46KPqZqvvII49g6NChuOyyy6pdtW3bNlx//fXVEKSmxu699160bds2mg2KfxTEqKm1W265Bb169WqyuwlBTZZMrwJPjOaJ0bVHDk+M1osl02vxxGjTPeRd+3RPjE71mqBvv/0Walrsu+++Q1lZGcrLy6Mi14YgleV56KGHotCkHrU26IUXXsB5552Hk046qYZjioqKUFlZGZ0Oe++996DeXU2D7b333jXKqSyUyjDFw1VTPMwTo5uilstlmQliJoiZIJeDyoTmmAkywQst0gbTMkFqmuqBBx7AsmXLonp369YNPXv2RI8ePaILnWtDUO2t9XPnzsVbb72F3//+9zjmmGNq+Cz+PKKXXnoJzz//fBSCVB+JngsuuAADBw5sst+ZCWqyZO5VIAQRgghB7sWTMS0RgoxxRUszxDQI+uqrrzB16tTo4mS106tTp05RyVeuXIk777yzUQh67bXXoru9FAApEIo9O3fujK4Rii2M/uijj1BaWop9990XN9xwQw23qsXR27dvj06FZWdnN9nlhKAmS+ZeBUIQIYgQ5F48GdMSIcgYV7Q0Q0yDoAULFmDOnDk48MADEcvcKM1jGZ7GMkFffvllNJOk1vrcd999UZhSz9///ne8+eab1RCkFkTfdNNN0e/U9JiCI/WoaTcFRer/FYypLfhNfQhBTVXMxfKEIEIQIcjFgDKlKUKQKZ5ocXaYBkFqQbKCCPWcfvrp0V1aH3/8Mb744ovoZ+rv48aNi05T1XfS9N133x1dS6QyOWo3mVoEreBIPfFb5B999FG8//770W34J598MtRU3IsvvhjdJj9ixAhceOGFWv4mBGnJ5k4lQhAhiBDkTiwZ1QohyCh3tCRjTICg2neHvfzyy9HFzbGzfdS6HQU+b7/9Nj7//HP069cPkyZNqs4U1b5uY8eOHdFzghQ8qUfVV4uk1Vohv99fvfVdbadX2+4/+OCDGi5VZc866yytqTDVECEogxFCCCIEEYIyGICp6poQlCplW327uhCUauHUOT9qfZDK/KiF0bFn7dq10amuDh06JDRBZXMU3Ki1PGoqTK3tUYcgql1kV1xxRfQAxCuvvLJGXXWKtNqNpsr37ds3Wr45DyGoOeo1sy4hiBBECGpmEJlYnRBkoldahE2mQpCuuKtWrcIdd9wR3fF12223VW+dj+0GU1Ns6n+pfAhBqVS3kbYJQYQgQlAGAzBVXROCUqVsq2+3pUGQygTdeuutWLduXXQaTB2iqBZBq7N/VIZHnRJdXxbJrcFACHJLSY12CEGEIEKQRuCYXoUQZLqHPGtfS4Mg5Qh1OrRaP/Tpp59Gt9bn5+dHL1E9++yzq7fcp9JhhKBUqstMULUC2waGpsyd22FKbUkKs+UoYWHPueot8WngH8Qin5xNCGqBTicEtUCnmvFKLRGCMq0sISiDHmAmiJkgQlAGAzBVXROCUqVsq2+XEOT+ECAEua9p0i0SgghBhKCkw8U7BQlB3vGVxywlBLnvMEKQ+5ombJEXqPIC1doDgxeopin40twNL1BNs+CtqDvdC1RbokS1zyuq/fdk35kXqCarVArKMRPETBAzQSkIrEw3yUxQpj3QYvtnJugn19Y+gbq+E6kbGwzMBDWmUAq/JwQRgghBKQywTDVNCMqU8i2+X0IQIahFDXJCECGIENSiQnrPyxCCWqBTzXglXQia+PWPSb3AlIHdGy2nrrl49tln8cknn2DXrl3o0qULDj/8cJx55pnVF6CqS1HV6dHDhw/Hq6++iq+//jq67V3d+aVOlP7b3/6GZcuWITc3N3pf2G9+85vqgxKVAYsXL462v3Tp0miZQYMGYfDgwdF+Yg8zQY26yvwChCBCECHI/DhtsoWEoCZLxgrJKZBpCFKHG6oTntVhhgpy1EGG6mwf9QwZMgRjxoyJ/nnChAlQV2nEHnXFhfq7+n91KaqCJ3WdhgIq9ZxyyinRc4HUM2/ePDz55JPRP6vLUtXz4497IE61r/pRDyEouTFjdClCECGIEGR0iOoZRwjS0421GlUg0xCk7gJT11soOFH/rx4FMsXFxdH/V5ejqpOfYxB0xBFH4KKLLkJWVhbuv//+6J1f6vuJEydG7/1St82rOr1798ZNN90Ube/222+PQtaNN96IffbZJ/rZO++8E708VWWNxo8fTwhqdKR4pAAhiBBECPJIsDbFTEJQU9Ri2SYokGkI+u6773D33XdHLS4sLMT+++8f/bO69kJdbKrAJh6Cpk6dijZt2kTL/Otf/4reNj9y5Eicf/750c9UZkldlKogadq0adHPFi5cGJ0ai2V81GdqamzmzJk44IADcO21e87WZSaoCQNHp+iYMWPa+/3+AwH4ysvLv3rkkUfWN9TOhAkT+kQikcjMmTNXJ9sfIYgQRAhKNlo8VI4Q5CFnecvUTEOQmtK66667oC4+VU9eXh4OPPDA6FqdI488snpNkMoExYONKvvaa6/hmWeewejRozFq1Khq4VVZ9UyfPr36M5UxUtNiCrrKyspQXl4e/Y4QlIbxWlxcbK1Zs6YEqHOVw3+zs7PPmD59+p4J0KrHtu1b1VQlgD15O2AjgD87jnN7Y+YSgghBhKDGosSD3xOCPOg0b5icaQhSKlVWVuKjjz6KTlEtX768Wjh159ctt9wSXciswEat+bnvvvuqv49B0AUXXIATTzwxIQSpzJBaVK0WTatH3S6vFlL36NEDr7zyCiEoHcPUtu0gALuqr7cBrAVwFoBcAP9zHEfl/6T63rbtAICZVWW/BBAG8LOqv9/SGAgRgghBhKB0RHWa+yAEpVnw1tNdpiFITXlt3rw5uiZILXBWQKR2cD366KPRNUGXXnophg0bpg1BX331FdQUmlpArTJOnTp1ijpXLb6+8847CUGpHuq2bR8A4AvVjxDirGAw+HwV7Kgsz3fqz5FI5PhZs2bNt21bfaYwOFtKeVFpaenj6vtAIHCOlPIZ9edwONxv9uzZ0XqJHkIQIYgQlOqozkD7hKAMiN46usw0BKnt7mp7/DnnnBPd7h575s6di7feeiu61ket+dHNBC1YsABz5syJTrHFToBWfcTa53RYise5bdtTAVwnhPh3MBg8I767QCBwm5RyOIA7HceZFwgEbpJSqimvjxzHOSq+rG3biwEcCaDBbBAhiBBECEpxUGeieUJQJlRvFX1mGoJ++OGH6E4wlalRINSrV6/ouh216FmtF4rtHNOFoDVr1kCd4Kye008/PboN/+OPP47uIlOP+vu4ceMwcOBALoxOxYi3bfsVAApvT3Ec59XLL7+8s5qW7N69+/Li4uLKWqAzF8D5QohJwWBwcq3v7gDwRwBvO47z0+RnLaMJQYQgQlAqIjnDbRKCMuyAltt9piFIKRt/jk9MaQVFF154YfRwRPUkgqDXX38dTz/9NGqvCVK7vMLhcPXC6Jdffjm6iywUCkXbUrvNFPi8/fbb+Pzzz9GvXz9MmjSpOlOkttirpzl3hxUXF4vmjprly5fLAQMG1Gin2Y0216im1rdtW01d7SOEOFdK+SCAnrE2hBCPSymvdRxng/rMtu0lAA5RwOo4zgu1skYXSSkfA/CV4ziD6rODEEQIIgQ1NUo9UJ4Q5AEnedNEXQhy+23V+h+1Q0ytD+rcuXP0nJ/YVng3+lJZJbU+SGV+1MLo2KPOKVILrtUhjW49vDssTknbthV6Zsd9tA7AJrUzr+qzr8rKyg566qmnwrZt71KLpSORyDGzZs36oBYE/VJKqcBoo+M4XQhBwLaBoSlz53aYUluLwmw5Slh1duK5Nb4z304D/yAW+eRsQlDmXeS6BYQg1yVlg3sUMAWCWpI/CEFV3hw/fny3SCQSu2BluxDi5GAwuKAq63McgPlVRQOO4zi2bUd3iEUikcGzZs1SWaHqJxAInCGl/Kc6Q8pxnHovY2EmiJkgQlBL+jmtehdCUAt0qhmvRAhy3w+EoCpNL7744rZ5eXnb40EnXm7bthcBOBrAI47jjLFte7NapxXbLRZftqCgYIwQYjaApY7jHKy+mzx58q1SyuLaLlQHR6lnxg1dUVmW5b6HDWnxsEu2YMQIlTyr+axakIclj3Y0xEr3zcjLD2PknYnP2Zz3x67Ytanl+vzQS7ag9zH0ufujii22VgUee+yx6Fk8fNxTQEHQxRdf7EqDLWFNUHSKSwhxUjAYfKMWBKnFzzcAeMNxnJNs2/4awH5SyrGlpaUPx5eN2zn2quM4p9SnLjNBzAQxE+TKb49ZjTATZJY/WpA1zAS570xmguI0tW17BYD+UspppaWlV9eCoPcBHAPgQcdxrrJtW4HPZUKI54LB4Dm1ykYXTQshrg4Gg3suREnwEIIIQYQg93/UMt4iISjjLmipBhCC3PcsIagmBBUBUIt3t+Tk5Owzbdq0rerrqoMRo4ceCiFOCwaDLxcUFBwrhHiv6rNj49YPqS32aqu9Okuhd0N3iRGCCEGEIPd/1DLeIiEo4y5oqQYQgtz3LCGoJgT5qq7J2EuBkDqoUghhSSnVhKG6NqPGuT+2bb8E4FR1nYoQ4mUAISnl2VVNXuU4jtpmX+9DCCIEEYLc/1HLeIuEoIy7oKUaQAhy37OEoFqaTpgwoUdlZeU/AAyt9dUTAAocx9kZ+9y2bQVNLwI4Ka5spZRyRu3pNE6HcYt87THALfLu/6AZ0SIhyAg3tEQjCEHue5UQVI+mVVNgRwDYGQqF/vPII48k3uIDYOzYsfnZ2dknhsPhzZZlzXccZ89Rl408zAQxE8RMUGNR4sHvCUEedJo3TCYEue8nQpD7mibdIiGIEEQISjpcvFOQEOQdX3nMUkKQ+w4jBLmvadItEoIIQYSgpMPFOwUJQd7xlccsJQS57zBCkPuaJt0iIYgQRAhKOly8U5AQ5B1fecxSQpD7DiMEua9p0i0SgghBhKCkw8U7BQlB3vGVxywlBLnvMEKQ+5om3SIhiBBECEo6XLxTkBDkHV95zFIFQR4z2RPmFhcXi+Yaunz5cun5azOaK0JT6xOCCEGEoKZGjQfKE4I84CSaSAXcVYAQpKEnIYgQRAjSCBzTqxCCTPcQ7aMCritACNKQlBBECCIEaQSO6VUIQaZ7iPZRAdcVIARpSEoIIgQRgjQCx/QqhCDTPUT7qIDrChCCNCQlBBGCCEEagWN6FUKQ6R6ifVTAdQUIQRqSEoIIQYQgjcAxvQohyHQP0T4q4LoChCANSQlBhCBCkEbgmF6FEGS6h2gfFXBdAUKQhqSEIEIQIUgjcEyvQggy3UO0jwq4rgAhSENSQhAhiBCkETimVyEEme4h2kcFXFeAEKQhKSGIEEQI0ggc06sQgkz3EO2jAq4rQAjSkJQQRAgiBGkEjulVCEGme4j2UQHXFSAENSLp5MmTb5VSFtcuNnr06OhHM27oisqyLNcdY0qDh12yBSNG7KpjzqoFeVjyaEdTzHTdjrz8MEbeuT5hu/P+2BW7NrVcnx96yRb0PoY+d31QsUEqQAWMVIB3hzXRLcwEMRPETFATg8YLxZkJ8oKXaCMVcFUBZoI05CQEEYIIQRqBY3oVQpDpHqJ9VMB1BQhBGpISgghBhCCNwDG9CiHIdA/RPirgugKEIA1JCUGEIEKQRuCYXoUQZLqHaB8VcF0BQpCGpIQgQhAhSCNwTK9CCDLdQ7SPCriuACFIQ1JCECGIEKQROKZXIQSZ7iHaRwVcV4AQpCEpIYgQRAjSCBzTqxCCTPcQ7aMCritACNKQlBBECCIEaQSO6VUIQaZ7iPZRAdcVIARpSEoIIgQRgjQCx/QqhCDTPUT7qIDrChCCNCQlBBGCCEEagWN6FUKQ6R6ifVTAdQUIQRqSEoIIQYQgjcAxvQohyHQP0T4q4LoChCANSQlBhCBCkEbgmF6FEGS6h2gfFXBdAUKQhqSEIEIQIUgjcEyvQggy3UO0jwq4rgAhSENSQhAhiBCkETimVyEEme4h2kcFXFeAEKQhKSGIEEQI0ggc06sQgkz3EO2jAq4rQAjSkJQQRAgiBGkEjulVCEGme4j2UQHXFSAEaUhKCCIEEYI0Asf0KoQg0z1E+6iA6woQgjQkJQQRgghBGoFjehVCkOkeon1UwHUFCEEakhKCCEGEII3AMb0KIch0D9E+KuC6AoQgDUkJQYQgQpBG4JhehRBkuodoHxVwXQFCkIakhCBCECFII3BMr0IIMt1DtI8KuK4AIUhDUkIQIYgQpBE4plchBJnuIdpHBVxXgBCkISkhiBBECNIIHNOrEIJM9xDtowKuK0AI0pCUEEQIIgRpBI7pVQhBpnuI9lEB1xUgBGlISggiBBGCNALH9CqEINM9RPuogOsKEII0JCUEEYIIQRqBY3oVQpDpHqJ9VMB1BQhBGpISgghBhCCNwDG9CiHIdA/RPirgugKEIA1JCUGEIEKQRuCYXoUQZLqHaB8VcF0BQpCGpIQgQhAhSCNwTK9CCDLdQ7SPCriuACFIQ1JCECGIEKQROKZXIQSZ7iHaRwVcV4AQpCEpIYgQRAjSCBzTq2QIgoZ+sGJuBPKHD4cNuLa2RAfNW9quXZvc26TEUCHQHpBfRix5z+KjB/7HdDlpHxXwggKEIA0vEYIIQYQgjcAxvUoGIOjoRf87VUjxEiBXLBq634B4iYZ+8HVvKaxlANokkK5w0dAB95suKe2jAqYrQAjS8BAhiBBECNIIHNOrpAmCDvvPN518ITlZSHkkAPU/JIKgIQuXvwlgJID54SxcBGBLVljeAIgbAUTCWWW5Hx11VMh0WWkfFTBZAUKQhncIQYQgQpBG4JheJU0QNGzBVwdGrKzPa8pRNxN09MLl6wTQVQrrxA+H9H87Vn7IwuXlAPxWxOr/wTH9vzVdVtpHBUxWgBCk4R1CECGIEKQROKZXSRMExcswbME3QyNW5IN6MkFPAThPSPHkwmH7XqDqHbVgxa8tSz4PYNuioQM6mC4p7aMCpitACNLwECGIEEQI0ggc06sYBkFDP1hxqBTyIwDZkNguBXapzFDV9NkNi4bud5/pktI+KmC6AoQgDQ8RgghBhCCNwDG9imEQNGzBN/3CIvyeEKJXLekiUuCqD4cMmG66pLSPCpiuACGoEQ9Nnjz5Villce1io0ePjn4044auqCzLMt3P2vYddskWjBixq079VQvysOTRjtrtml4xLz+MkXeuT2jmvD92xa5NLdfnh16yBb2Poc/TMUb/FwJu3gJ0syT+nC9qdHn5JmBzBNg7Czi3LbCXBby+G5i/e0+x2zsC+/nSYSX7oAItW4EBAwbUCL6akdiy313r7ZgJYiaImSCt0DG7kkGZoCMXf9szKxxeowQLZ2X1+uiofmtj4g1ZuPxrAPsJKUsXDtvPNltUWkcFzFaAmSAN/xCCCEGEII3AMb2KQRB09KIVZwgp/wmgbNHQAfnx0h29aPmDQuIKIfHswmEDzjVdVtpHBUxWgBCk4R1CECGIEKQROKZXMQiC4jNBQorBC4ftuyQmX2zrPCD+uGjovneZLivtowImK0AI0vAOIYgQRAjSCBzTqxgEQUqqIQuXq6sxDlMHIwJ4S0jxmRTyTAB9AewWMtJ94bCBW02XlfZRAZMVIARpeIcQRAgiBGkEjulVMgBBR324YogVkQsB/G/R0AED4yVSJ0v7KyIvADi2lnRlUsjTPxyy3/umS0r7qIDpChCCNDxECCIEEYI0Asf0Kg1A0JCFy2dlznzRXiDSNQLkWNLaEEF4oxCWyg659kiBv304ZMAbrjXIhqiARxQgBGk4ihBECCIEaQSO6VUagqAPls9u0T4XeIAQZPoApX2pUIAQpKEqIYgQ1KL/QYzggamVok5WoDBbjhIWrtUIGW9UIQQxE+SNkUorXVSAEKQhJiGIEEQI0ggc06sQgghBpo9R2ue6AoQgDUkJQYQgQpBG4JhehRBECDJ9jNI+1xUgBGlISggiBBGCNALH9CqEIEKQ6WOU9rmuACFIQ1JCECGIEKQROKZXIQQRgkwfo7TPdQUIQRqSEoIIQYQgjcAxvQohiBBk+hilfa4rQAjSkJQQRAgiBGkEjulVCEGEINPHKO1zXQFCkIakhCBCECFII3BMr0IIIgSZPkZpn+sKEII0JCUEEYIIQRqBY3oVQhAhyPQxSvtcV4AQpCEpIYgQRAjSCBzTqxCCCEGmj1Ha57oChCANSQlBhCBCkEbgmF6FEEQIMn2M0j7XFSAEaUhKCCIEEYI0Asf0KoQgQpDpY5T2ua4AIUhDUkIQIYgQpBE4plfJEAT5tlrZA+/teuC6UdvXbhi5Y0MimXo+16FnhyV5+ctu/XFpKmSUvEA1FbKyTQ8oQAjScBIhiBBECNIIHNOrZAiC+pbm99/n0U4/W3lR2effBspW1JbJv8nyHX5JnxP8W7Jy589f8e9UyEgISoWqbNMLChCCNLxECCIEEYI0Asf0KmmEoHZf+9t2e6V9z3Zf5HTuuCS3u5KmNgT1erLj3u2X5XTstCivlwIgVYYQZPogon1eU4AQpOExQhAhiBCkETimV0kjBPV6pkOvAQ90OSJektoQNPSsvj/3b8xqE1+GEGT6IKJ9XlOAEKThMUIQIYgQpBE4pldJIwTFS9H7r5369A/mD65vOkyVPebUfr/I3mHlEIJMH0S0z2sKEII0PEYIIgQRgjQCx/QqhCDuDjN9jNI+1xUgBGlISggiBBGCNALH9CqEIEKQ6WOU9rmuACFIQ1JCECGIEKQROKZXIQQRgkwfo7TPdQUIQRqSEoIIQYQgjcAxvQohiBBk+hilfa4rQAjSkJQQRAgiBGkEjulVCEGEINPHKO1zXQFCkIakhCBCECFII3BMr0IIIgSZPkZpn+sKEII0JCUEEYIIQRqBY3oVQhAhyPQxSvtcV4AQpCEpIYgQRAjSCBzTqzQAQWfetO6VcI7slIpX6Lwwr2u3V9v333DCju83Hr/jh0R97Hdf18OzdgvfspvXLUqFDe2W5j01d26HKalom21SAZMVIARpeIcQRAgiBGkEjulVGoCgscN3LrN2i46mv4KufdsGhqYQgnTVYz0vK0AI0vAeIYgQRAjSCBzTqxCCmAkyfYzSPtcVIARpSEoIIgQRgjQCx/QqhCBCkOljlPa5rgAhSENSQhAhiBCkETimVyEEEYJMH6O0z3UFCEEakhKCCEGEII3AMb0KIYgQZPoYpX2uK0AI0pCUEEQIIgRpBI7pVQhBhCDTxyjtc10BQpCGpIQgQhAhSCNwTK9CCCIEmT5GaZ/rChCCNCQlBBGCCEEagWN6FUIQIcj0MUr7XFeAEKQhKSGIEEQI0ggc06sQgghBpo9R2ue6AoQgDUkJQYQgQpBG4JhehRBECDJ9XS/0WQAAIABJREFUjNI+1xUgBGlISggiBBGCNALH9CqEIEKQ6WOU9rmuACFIQ1JCECGIEKQROKZXIQQRgkwfo7TPdQUIQRqSEoIIQYQgjcAxvQohiBBk+hilfa4rQAjSkJQQRAgiBGkEjulVCEGEINPHKO1zXQFCkIakhCBCECFII3BMr0IIIgSZPkZpn+sKEII0JCUEEYIIQRqBY3oVQhAhyPQxSvtcV4AQpCEpIYgQRAjSCBzTqxCCCEGmj1Ha57oChCANSQlBhCBCkEbgmF6FEEQIMn2M0j7XFSAEaUhKCCIEEYI0Asf0KoQgQpDpY5T2ua4AIUhDUkIQIYgQpBE4plchBBGCTB+jtM91BQhBGpISgghBhCCNwDG9CiGIEGT6GKV9ritACNKQlBBECCIEaQSO6VUIQYQg08co7XNdAUKQhqSEIEIQIUgjcEyvQggiBJk+Rmmf6woQgjQkJQQRgghBGoFjehVCECHI9DFK+1xXgBCkISkhiBBECNIIHNOrEIIIQaaPUdrnugKEIA1JCUGEIEKQRuCYXoUQRAgyfYzSPtcVIARpSEoIIgQRgjQCx/QqhCBCkOljlPa5rkCqIEiMGzdub8uy+gHY0KtXr/8VFxdXum59hhokBKUHgjYO35m/7pRtvRK5uccL7Vd3XtimLGVDoIF/EIt8cjYhKDXKm+rzscN3LrN2i46peevMt7ptYGjK3LkdCEGZdwUtSLMCrkKQbdtdAKhA+n2C9/hICHFVMBhckOZ3dL07QlB6IGjpvT8ctumYnb0TObDXsx2+GnB/l69cd26sQULQG7W1LcyWo4SFa1OmOQBTfU4ISqXX2TYVyJwCrkHQ2LFj87OyslYAaPC/loQQ5waDwWcz98rN75kQlB4I+uivK4/b2TfU6ZDres4X4Zp+y/vev9O/MSvUfG/W0wIhKCMQZKrPCUEpizQ2TAUyqoBrEBQIBP4qpbwwibepzMnJ2WvatGlbkyhrZBFCUHog6P0Xvz0Z2dI69uT+L6d9IBCCMgJBpvqcEJT2CGSHVCAtCrgGQbZtb47LAs21LOv+Hj16LF61alUvIcTJQoiHAORWvdUpjuO8mpY3TEEnhKD0QNC776z4Vc4P2dv6T8//fMthuztn7bAq899vs6HD0txtKXBrzSYJQRmBIFN9TghKecSxAyqQEQXchCA1NZENYJ3jON1rv00gEPitlPKJqs8DjuM4GXljFzolBKUegnbvXZnz4dzvf5HIXR2W5P0w+OqeHyEM6YI7EzdBCEo7BJnsc0JQyiKNDVOBjCrgJgS9COA0AN87jtM3AQSdI6V8Rn1uWVb/mTNnfpvRN29G54Sg1EPQulO2dVt20/ohyk35C9qsav9FTtnG43fsvWNARWcpILq81fa7A2/u/mkz3NhwVUJQ2iHIZJ8TglIWaWyYCmRUAdcgKBAInCml/EfV21zqOM6c2Jtdeumlnfx+/5sADlcbQBzHOTijb93MzglBqYegnfuVt1376217d1iSV9b19bbrYy778YytPb66YcNRiAg54oT+LzTTlfVXJwSlHYJM9jkhKGWRxoapQEYVcA2CCgoKbhFC/CFu3c86AF9U/X1w3OdLpZRq/VD1I6WcOGvWrA8yqkQTOicEpR6CGnLH/Le/+RUsKYact89rOT9mlzfBdckXJQSlHYJM9jkhKPnQYUkq4CUFXIMg27aXADhE5+W9tm2eEJR6CPp+TFm/nb1DbfsH8/8XDzrlPSpzFj21Z63QiJH9X0ClSM26IEJQ2iHIZJ8TgnR+2VmHCpivACFIw0eEoNRD0H9KVw/dfkB5126vtFsx6I5un8fctHzihkFrztw6MHuLtfuY0/u9ruG+5KoYBEERnxSflK4+RmZL68iL+ryb3Avol5IRPDC1UqQdgkz2OSFIfzw1tebEbHlixMLVVgQPTqkUahkFHyqQMgVcg6Dx48cPiUQiXXUsDYVCix555JHqdR86baSzDiEo9RAUv0i2w5LcHzt8lrNp+8BQx81H74xeo7HflC6Lez7f4YeU+d0gCPp06g9HRN871eugqsTMFASZ7HNCUMoirUbD10B2z/ZhibqWRkpcNjUk/pKentlLa1XANQhqTQISgoALLtg6scuC3N+l0u+rz9nadfVvtu6t1v9U9xMRcp/HO63s8a92G1PZd2Uetsz80j8yUR/pvDts9Xlbeq24ZuMRUTsyDEGt2eeEoFRG2562iyGtbX6oXcanqL8TglKvOXsAXIOgQCBwPIBuyYjq9/v/NW3atNQsaE3GgGaWIQTtgaD2X/smNlPKRqtLnxTb96vwhTpFrNw12ZVtVmZXIvITEzXagGaBSK7cMvu9NoMyCUE7+oXyPp6z6ue+7aIi1E76lS0p3RHXSCaoNfucEKQZSE2oNjFHXi8l7hXAUxIYTQhqgngsqq2AaxDUxIXRfR3H+V7b6gxXJASlD4Iy5eqMQ5AAFj733c9D+eG8wRN6vfPJQ2vVf2S0Cggy0eeEoNR6pdAnhwmBBUJiagT4rxCYQwhKreZsfY8ChCCNkUAIIgSpNQsaQyfpKl/c/uMhG07c0bfXMx2WDXigy9fRYwEIQUnrp1OwIfAlBOkomlydSZCdQ36o3cVbIxU4SvgwmhCUnHYs1XwF3ISgIICjE5ikFkv3jvt8XlZW1rkzZswoa775mWmBEEQISiUExRYI56zJ3jbk/H3eVqOcEJT6WCcEdZiSepXr9jDRL/+upr8EMHhKhVhS6JOXEIIy4YnW2adrENSQfBMmTGhXWVn5FoAjAbzhOM5JXpabEEQIShUElXer9H/45MqTpAVx9O/6vJ67es9hkISg1P9iEILSD0GFPhkQAjOlwHVTy8UDysuEoNSPdfbwkwJpgSDVXSAQOENK+U/1Z8uyDpk5c+ZnXnUEIYgQlCoIWl64Yf81Z2/dX4RFxF+WtSsWI+VdKtuqP+dsyN6Ru9K39VB1gWyKnvq2yKdrYXSKXqvRZglB6YegIr9cqWYKJPC82v+onCSAAQAOBbBEAssFcFNJhag+K6xRR7IAFWiCAmmDINu2AwBmKtuklOeXlpb+vQl2GlWUEEQIShUEfRvYtO+q3245oPaAl1nSiv4DERaRnPVZO44evWeaLBUPIaiuqlwTlIqRBhT55YJayyVURx0BtAewDcCWiMS594fEotRYwFZbuwKuQZBt29cBqLOlWEqZLYTYF0D1mStSyuGlpaXve1V8QhAhKFUQVF9MvDvvm1+qKbLWsEU+U78LzASlPxOUyNcT/fICCfyNu8MyFQmtq183ISjpu8NycnJyeU6QNwbatoGhKXPn1v1xbM1TI+k8LDE2SghBqY8XQhAhKPWjjD2YpkDaIUgIcVYwGFTzv559mAliJoiZIM+Gb72GE4LMgKBCvzxfAHOZCWp5MWbiG7kJQVdKKfdP9JJCiG1CiJVZWVkvTJ8+XS2E8/RDCGrdENRa14e05uxfa/V5YbYcZVm4xtM/2A0YLyXWl4TE2Jb6fnyvxhVwDYIa76rllCAEEYKs3UIt3myRD6dA67q1NUOQsHBtixzo6qUauCi5xb4zX6yGAtoQNGbMmF5ZWVn9dPTce++9FxUXF1fq1DWhDiGIEEQIMiES3bWB02F1p8NUJogQ5O44Y2tmKaANQYFA4C4p5R80X4d3h2kKl+5qzAowKxBTgNNhrS/7RwhK9y8u+0u3AoQgDcWZCWImiJkgjcAxvAozQcwEGT5EaV4KFGgOBF2VIBPUs5aNawGou8Oy4z5XJ92e6jjOhhS8T1qaJAQRgghBaQm1tHZCCCIEpXXAsTMjFNCGoNrWx1+LAeDBsrKyoqeeeqrCtm2fZVnDI5HIEwAUJL3kOI66EVsaoYCGEYQgQhAhSCNwDK9CCCIEGT5EaV4KFHANgmzbjh2WuMVxnM61Ice2bQU+/1bvwLvDUuDJFDXJNUFcE8Q1QQB3h6XoBybTzXJ3WKY9kPH+3YSgWGbnK8dx6lyfYdv2yQBeUW8shLg8GAxG7xHz4sNMEDNBzAR5MXIbtpmZIGaCWt6o5hs1poCbEKTW+OxV1eEfwuGwM3v27E2KeQKBwKFSyqcB7EcIaswlZn3PTBAzQcwEMRNk1q+Si9YwE+SimN5syk0IUpBzbi0ZVgHoUWthNCorK/d++OGH13hTMoCZIGaCmAnyavTWbzczQcwEtbxRzTdqTAHXIOiyyy7r6vP5vgbQ2Em6tziOc3tjhpn8PSGIEEQIMjlC9WwjBBGC9EYOa3lZAdcgSIkwduzYvtnZ2fdKKX+TQJQtAK5xHGeOlwVTthOCCEGEIK9HcV37CUGEoJY3qvlGjSngKgTFOrviiiv2qqys3D8SiexrWVZlOBz+wrKsLxzHCTVmkBe+JwQRgghBXojUptlICCIENW3EsHRLUMB1CCouLs7+4YcfjotEIsMBqK3y74ZCofdyc3PzZ8yYsawliEYIIgQRglpCJNd8B0IQIajljWq+UWMKuApBBQUFPxNCvB23SwxSytlZWVl/jUQi84QQf/f7/ZdMmzatvDHDTP6eEEQIIgSZHKF6thGCCEF6I4e1vKyAaxA0fvz4vSORyNLaC6PjIahKKMdxnICXRSMEEYIIQV6O4MS2E4IIQS1vVPONGlPANQgqKCh4SghxXlyHuwHkVkHQQ5FI5OPYd+FwuN/s2bO/a8w4U78nBBGCCEGmRqe+XYQgQpD+6GFNryrgGgTZtq3O/VF3g1ValtUvEolcA+B6BUGlpaXjbNsuAjBFCSWEODcYDD7rVdEIQYQgQpBXo7d+uwlBhKCWN6r5Ro0p4AoEjR49Oqtz586VVZ294DjO6bZt3xsPQQUFBfsLIaILo6WUN5aWlt7dmHGmfk8IIgQRgkyNTn27CEGEIP3Rw5peVcAVCFIvb9v2LjX9BWBLr1698tesWXNPrUyQDSBYlQm6IBgMPulV0QhBhCBCkFejl5mgRArUdz1OYbYcJSxc2/K8XfVGvDajxbo22RdzE4LeB3BMVcffA1BrgvYH8JGU8m0hRGHMKMuy+s+cOfPbZI00rRwhiBBECDItKptvDzNBzAQ1fxSxBa8p4BoEjR8/fkgkElnYmABCiMeDweBFjZUz+XtCECGIEGRyhOrZRggiBOmNHNbysgKuQVDVlNg4ADNqX5gaJ9C8rKysc2fMmFHmZdEIQYQgQpCXIzix7YQgQlDLG9V8o8YUcBWCVGdVF6lOAHAIgH2FENvV+UGWZb0RDAbVTfOefwhBhCBCkOfDuM4LEIIIQS1vVPONGlPAdQjitRmNSe6t7+tbMHnBBVsntv/aN9Fbb5O8tfwHse4/iPS56Jj8CPJWSS6M9pa/aK17CrgKQbw2wz3HmNISIaiuJ8YO37mMmSBTRqh7dhB8mQlybzSxJa8o4BoE8doMr7i8aXYSgghBMQWYCWImqGm/Hh4ozS3yHnBSak10DYJ4bUZqHZWp1glBhCBCENBas388JyhTv7zsN10KuAZBvDYjXS5Lbz+EIEIQIYgQlN5fnTT2xkxQGsU2sytXIIjXZrS+NDmnRuhzM3/S9K3imiCuCdIfPazpVQVcgSD18rw2w6tDoGG7mQliJoiZIGaCWuavm7rIEutKQmJsi30/vlijCrgJQbw2o1G5vVeAEEQIIgQRgrz3y5WkxYSgJIVqucVcgyBem9EyBwkhiBBECCIEtcxfN2aCWqxfm/BirkFQ1ZQYr81ogvheKEoIIgQRgghBXvit0rKRmSAt2VpSJVchSAnDazNa0vAACEGEIEIQIahl/arFvQ0hqMW6NtkXcx2CqjoW48aN29uyrH4ANvTq1et/xcXFlckaZXo53h3Gu8N4YrTpUdp0+7g7jLvDmj5qWMPrCrgKQbZtdwEwBcDvEwjzkRDiqmAwuMDrohGCCEGEIK9HcV37CUGEoJY3qvlGjSngGgSNHTs2PysrawWABi8ZFEKcGwwGn23MMJO/JwQRgghBJkeonm2EIEKQ3shhLS8r4BoEBQKBv0opL0xCjMqcnJy9pk2btjWJskYWIQQRgghBRoZms4wiBBGCmjWAWNmTCrgGQbZtb47LAs21LOv+Hj16LF61alUvIcTJQoiHAORWqXSK4zivelIxAIQgQhAhyKvRW7/dhKDMQ9D6k3Z0XXlx2cD97u3yaYeludtSPsq4MDrlEpvegZsQFAKQDWCd4zjda794IBD4rZTyiarPA47jOKaLU599hCBCECHIq9FLCEqkQH27QNN6gWoWxKKnvz+xvEtl20F3dF3U7ZX261I+yghBKZfY9A7chKAXAZwG4HvHcfomgKBzpJTPqM8ty+o/c+bMb00XhxDELfKJxkBrvVGc98W1vvvi0gFBa8/b0mvDiJ29th64e69InvSpmCMEefVfR+/Z7RoEBQKBM6WU/6iS4FLHcebE5Lj00ks7+f3+NwEcDmCp4zgHe0+qnyxmJoiZIGaCvBzBiW3ndFhmpsM+nrPq2B37VuTHe4UQ1PLiy9Q3cg2CCgoKbhFC/CFu3Y9KZX5R9ffBcZ8vlVKq9UPVj5Ry4qxZsz4wVaTadhGCCEGEIK9Ea/J2EoIyA0HxHvpw7vfH7967sgMhKPlxy5LNU8A1CLJtewmAQ3TM8dq2eUIQIYgQpBPpZtchBBGCzB6htC4VChCCNFQlBBGCCEEagWN4FUIQIcjwIUrzUqCAaxBUdYt8Vx0bQ6HQokceeWS9Tt1M1CEEEYIIQZmIvNT2SQgiBKV2hLF1ExVwDYIaerkxY8a037Zt286nnnoqbKIITbWJEEQIIgQ1NWrML08IIgSZP0ppodsKuApBBQUF+wO4QQix23GcKwOBwEFSyn8D6F9l+D8rKysvevjhh1N/CJbbSsW1RwgiBBGCUhhgGWqaEEQIytDQY7cZVMA1CLr88ssHhcPhz6oOTFzQq1ev49esWfM9gJ613u8Nx3FOyuA7N7trQhAhiBDU7DAyrgFCECHIuEFJg1KugGsQVFBQcLsQ4qYqi9VN8XcCUFmgOo8Q4mfBYPDzlL9dijogBBGCCEEpCq4MNksIIgRlcPix6wwp4BoE2ba9CMDRALYD+DWAywBcXPVeLwCYEQdFFzqOE7tCI0Ovrt8tIYgQRAjSjx9TaxKC6kLQZT/fdVnH/+Zcki6f/ad01VG79g61239y1yVd3m63KdX9hrMim6atyz431f2wfXMVcAWCiouLs9esWbOraiqsxHGcibZtrwTQW726EOKkYDD4pm3bkSop/ug4zl3mytKwZYQgQhAhyKvRW7/dhKC6ENSar0ppeSOcb5RIAVcgyLZtdd9LhepASnljOByek52dvTrWYVlZWU7Xrl39lZWVsQXR1zmO84BXXUIIIgQRgrwavYSgRArUd4EqIajljXO+UU0FXIEg1aRt2xsA7FU1HbYGgNopph61PmgMgD8DOLkqM3RWMBh83qvOIAQRgghBXo1eQhAh6CcFGsr+tbwRzjdKWSaoCoLuBXB9gk7GSyn3F0IUVn1X6fP5ejz00EMbveoSQhAhiBDk1eglBBGCCEEtL3r138i1TNDFF1/cNi8vb37VTfExi/4HQJ0VdE8MgoQQNweDwTv0Tc58TUIQIYgQlPk4dNsCrgnimiC3xxTbM18B1yBIvWpxcbG1du3acyKRyGAp5bxZs2bNU8uEAoGAygKdpXaIBYPBv5kvS8MWEoIIQYQgr0dxXfsJQYSgljeq+UaNKeAqBDXWWUv5nhBECCIEtZRoTm5qZOzwncvo89bl85b3tnyjRAoQgjTGBSGIEMR/EDUCx/AqzAQxE2T4EKV5KVCAEKQhKiGIEEQI0ggcw6sQgghBhg9RmpcCBQhBGqISgghBhCCNwDG8CiGIEGT4EKV5KVCAEKQhKiGIEEQI0ggcw6sQgghBhg9RmpcCBQhBGqISgghBhCCNwDG8CiGIEGT4EKV5KVCAEKQhKiGIEEQI0ggcw6sQgghBhg9RmpcCBQhBGqISgghBhCCNwDG8CiGIEGT4EKV5KVCAEKQhKiGIEEQI0ggcw6sQgghBhg9RmpcCBQhBGqISgghBhCCNwDG8CiGIEGT4EKV5KVCAEKQhKiGIEEQI0ggcw6sQgghBhg9RmpcCBQhBGqISgghBhCCNwDG8CiGIEGT4EKV5KVCAEKQhKiGIEEQI0ggcw6sQgghBhg9RmpcCBQhBGqISgghBhCCNwDG8CiGIEGT4EKV5KVCAEKQhKiGIEEQI0ggcw6sQgghBhg9RmpcCBQhBGqISgghBhCCNwDG8CiGIEGT4EKV5KVCAEKQhKiGIEEQI0ggcw6sQgghBhg9RmpcCBQhBGqISgghBhCCNwDG8CiGIEGT4EKV5KVCAEKQhKiGIEEQI0ggcw6sQgghBhg9RmpcCBQhBGqISgghBhCCNwDG8CiGIEGT4EKV5KVCAEKQhKiGIEEQI0ggcw6sQgghBhg9RmpcCBQhBGqISgghBhCCNwDG8CiGIEGT4EKV5KVCAEKQhKiGIEEQI0ggcw6sQgghBhg9RmpcCBQhBGqISgghBhCCNwDG8CiGIEGT4EKV5KVCAEKQhKiGIEEQI0ggcw6sQgghBhg9RmpcCBQhBGqISgghBhCCNwDG8CiGIEGT4EKV5KVCAEKQhKiGIEEQI0ggcw6sQgghBhg9RmpcCBQhBGqISgghBhCCNwDG8CiGIEGT4EKV5KVCAEKQhKiGIEEQI0ggcw6sQgghBhg9RmpcCBQhBGqISgghBhCCNwDG8CiGIEGT4EKV5KVCAEKQhKiGIEEQI0ggcw6sQgghBhg9RmpcCBQhBGqISgghBhCCNwDG8CiGIEGT4EKV5KVCAEKQhKiGIEEQI0ggcw6sQgghBhg9RmpcCBQhBGqLGQ9DvT9v2qkYTnqlS3lG+Ondu4h/HnC3iZM+8iIahc15qn/D96HMNMT1ShT6v6agLLtg6sbXG+QUXbi7wyLDVNnPu451Ka1dube9NCGpk+EyePPlWKWVx7WKjR4/WHnisSAWoABWgAmYrMOOGrqgsyzLbyGZYd9glWzBixK46Lcyfn4dPHu3YjJbNrprdOYzL711fw8gBAwaI+A9q/MXs18mMdfGZoMxYwF6pABWgAlQglQqMHb5zGae9U6lwZtquPe3NTJCGHwhBGqKxChWgAlTAQwoQgjzkrCaYSghqglj1FSUEuSAim6ACVIAKGKwAIchg5zTDNEJQM8SLVSUEuSAim6ACVIAKGKwAIchg5zTDNEJQM8QjBLkgHpugAlSACnhAAUKQB5ykYSIhSEO02lWYCXJBRDZBBagAFTBYAUKQwc5phmmEoGaIx0yQC+KxCSpABaiABxQgBHnASRomEoI0RGMmyAXR2AQVoAJUwEMKEII85KwmmEoIaoJY9RXldJgLIrIJKkAFqIDBChCCDHZOM0wjBDVDPE6HuSAem6ACVIAKeEABQpAHnKRhIiFIQzROh7kgGpugAlSACnhIAUKQh5zVBFMJQU0Qi9NhLojFJqgAFaACHlSAEORBpyVhMiEoCZEaK8I1QY0pxO+pABWgAt5WgBDkbf/VZz0hyAW/EoJcEJFNUAEqQAUMVoAQZLBzmmEaIagZ4sWqEoJcEJFNUAEqQAUMVoAQZLBzmmEaIagZ4hGCXBCPTVABKkAFPKAAIcgDTtIwkRCkIVrtKswEuSAim6ACVIAKGKwAIchg5zTDNEJQM8RjJsgF8dgEFaACVMADChCCPOAkDRMJQRqiMRPkgmhsggpQASrgIQUIQR5yVhNMJQQ1Qaz6inI6zAUR2QQVoAJUwGAFCEEGO6cZphGCmiEep8NcEI9NUAEqQAU8oAAhyANO0jCREKQhGqfDXBCNTVABKkAFPKQAIchDzmqCqYSgJojF6TAXxGITVIAKUAEPKkAI8qDTkjCZEJSESI0V4ZqgxhTi91SAClABbytACPK2/+qznhDkgl8JQS6IyCaoABWgAgYrQAgy2DnNMI0Q1AzxYlUJQS6IyCaoABWgAgYrQAgy2DnNMI0Q1AzxCEEuiMcmqAAVoAIeUIAQ5AEnaZhICNIQrXYVZoJcEJFNUAEqQAUMVoAQZLBzmmEaIagZ4jET5IJ4bIIKUAEq4AEFCEEecJKGiYQgDdGYCfr/7Z0JmBxVuffft7p7erJBEiCQTgiBsAq4ASoiiLugoFfF7YpAkj41CcTrFb34ucZ9vW4RmDo9YZGrV4wrqChXuCJ6QXBDRUQIyJIEAskkkGRmerrr/Z63OTVUOpOZ7kpnUj3zr+dRJtPnnDrnd85U/+ucd2kBNDQBAiAAAm1EACKojSaria5CBDUBa2dFcRzWAohoAgRAAARSTAAiKMWTswtdgwjaBXg4DmsBPDQBAiAAAm1AACKoDSYpQRchghJAw3FYC6ChCRAAARBoIwIQQW00WU10FSKoCVg4DmsBLDQBAiAAAm1IACKoDSetgS5DBDUAabQisAkajRA+BwEQAIH2JrA7RVBmWybbsdGbPLB/ZWuYk2ojpLJPZjoy2zjnlTlLGapWJsvg4F6VAfIaqb1jmScPG/zit7+91xfrP3nrW59477R7cu9N1mr6a0EEtWCOIIJaABFNgAAIgECKCexOETTpgdz03BOZ/JYF5Y3h5HBwNAz5R3JT8o9lpmo58UQ4ZNafq5OlvO3ggU3ikYzWRv3nEEFPEVm9erUsWLCgxjO6tvtHs2AnQnmIoIkwyxgjCIDARCbQahGU3eJ1ZLZ4HdktmY5MH+eUbSMiKNPvZafc07FPtVMG++aVN4d5qXoDnJn8QMd0b4CzfXMGnxicWe1rdq4ggiCCml0zQ+UhghKjQ0UQAAEQaAsCrRZBkx7O7ZXrzUyKD74REdSxITupc212r765g5sHZ1T7o/q5jdnOSWuye5f3rW7tnz24pVmoEEEQQc2uGYigxMRQEQRAAATai0CrRVB89JMeyu2d25TpbEQEZbdkctzPucre1X7JSRi107kuN7Xj8cyUvoNplSoNAAAgAElEQVQGNw3uVR1oli5EEERQs2sGIigxMVQEARAAgfYikBYRFKeW2ebl9FjN6+Oc2hSFealsPXRgI2yCGl9bMIxunNVOS+I4rAUQ0QQIgAAIpJhAEhHEVWIJaciuVn+QHA3t3kTDbWYnKI6o87Hc5I5HMtOi35VnVPv6Zw8+SRkYRje6lCCCGiU1QjmIoBZARBMgAAIgkGICSURQ55rctI6NmcnxYT1xdP+j9W7sSUWQiiyv7GWyuiO0MTMp08+5wRnVvr65g080ixLHYU8Rg3dYsyuHiCCCEkBDFRAAARBoIwJJRFDu8ezkjs1ePj7MrQvKvfXDbkoEDZLHzCTZp+2BtL3M1kxuyn25mZKR8MlnDDzWLFqIIIigZtfMUHmIoMToUBEEQAAE2oJAEhHU6MCaEUFT787v65U588SR/Y9R7GiNQ+Jpd3bO0ns++Yz+9dLkkRhEEERQo+t1h3IQQYnRoSIIgAAItAWBPSWCuMKeHnuFOaqSJzT5gY69s094nX1zKpsHZ1aGXOSzmzKdkx/K7R12SHXLEQOPNwsVIggiqNk1g52gxMRQEQRAAATai8CeEkFT7snPVFufyH0+OvZSeuX9KlurHVLVoIsdmzOd+rv6+EGNUt5TIkijX+vRXnnfSkMBHnXHK9eb7dQAkyLElKNKeUalX4NGNjrWeDkYRiehVlcHO0EtgIgmQAAEQCDFBN729s2/DTvCWqqKVl/73Dxljh6JPf6KLff17/f07o7eZ//r9jo41+tNWv+KLfeV3WdT7snvPeP2SXPi/VAh8cSx/Y8+edTADjZHjfSX+zOXj3XuMHXxn7K6Y2ZlWjiwbX5502j95Ap5U1bnZ+pxYH3ZvgMrmwanV5qOjwQRNBr1Bj6HCGoAEoqAAAiAQBsTeN6tq1cSU83mJg1XZouXmfaPjqkdGzMdA7OqA1sOKW+tTg0T7YboeITpK7c/b8EN9WNrdQJVPdrL9WYnZfu8bHaTV4uY3agIirztyjPCbQP7l7dqPKTc5kznpDW5vTSH2pajBtZLkwlkIYJasJohgloAEU2AAAiAQIoJpE0EtRrVWIkgb5AyU//euW+8/42KoMmrO2ZqOICth5Y3VCeFlaiNqXd17utVKPPkkQOPxaNoN8IIIqgRSqOUgQhqAUQ0AQIgAAIpJgAR1PrJiZLBNiqC1H4o/1hm6sB+1S0DBwxu1R5ltnq5Kfd1zNRo2VsOH9jQbC8hgpolNkx5iKAWQEQTIAACIJBiAhBBrZ+cZkUQD3Bm6uqOmVxlT0VPmBHRnSHtWd+Bg5sHpz+dULbR3kIENUpqhHIQQS2AiCZAAARAIMUEIIKanJzBurjYHkl9Oo+mRdAge5MfzO2d2eZ1xHuj9kD9cyubB/duPnEsRFCT8zpccYigFkBEEyAAAiCQYgIQQY1PjsY2mnZXfr94jYFZlS0D+1dqR1jR1awImrK6Y4YKoMpeYf/APpU+ylKY3ezl8+uzNa+9rYeVN1Q7n7YVaqTHEEGNUBqlDERQCyCiCRAAARBIMQGIoMYnR13ZNahjvEZ5ZrVvcMb2x1XNiCBtc9pdnTVh9eRR/Y9J9ulEtJP/2TE9+6SX759debK8b2Vb4z0lgghqhtZOykIEtQAimgABEACBFBPYLSKIaSaHNEeYphNxKCRPEvPdLDJqvBthnsMis4hkGgv3C5NGib5fvd2TYBwr77CkO0GRAXR1kgxuPXRgY7ydjsezkzvXZacN7FfZOnBAZUsz44cIaoYWRFALaKEJEAABEGg/Aq0WQUJ0MBMd7UiocOGhn5luIaHtvujriB1HRLPr6wrTAFXlf9njIffxRkmnTQRpPCE9Vgs9Ec2Rtt1O0OEDj0ssQnTkOp8kWjZEUKMrZIRy2AlqAUQ0AQIgAAIpJtBKEcSkWcDo9FqMQqE/CtNaFpkixM8ipplCVGai64fDIUwzWOgkEqkQe78h3T0i0qOnE4koSyL3EvPfm0WZNhGUeyKTn/RAbnrcfT5KNKuG0OXpYZ/kw2r2iUxHdquXD3NS3XLYwIZ64+vROEAEjUaogc8hghqAhCIgAAIg0MYEWiqChGYJ0/OI5HEivnUIi9BkYnrpU//mnxPJ4I7I5CgiXkBEdxPRPdHnLHSEMB1GRI8S0e3Noh5JBE29L3ths+01Uj474GWm3JXfb3Cv6sC2Q8rbpfvIPpHJT7mvY0b8M80b1rmmY1rHhszkePvVSeFg30HlzdVOaX4HLEdPrPzN5COi9lavXi0LFiyIduWemolGBjORy0AETeTZx9hBAAQmAoFWiiBimi9ChxPRP5jon08LGZkizC956t/yM6Jhj7Vmk9A+RHQfMcWNgE/QVGMs8hdhfqDZOdmZCDrhttUvY6F3N9ve7izfuTabn7o6PyWzlbPbDipv23JYeatkk9lCkdD6216wYBFE0C7MGETQLsBDVRAAARBoAwItFUE7Ha+8gIg1pYQaRv/PaFiEaRYLFYhoBhFN0TRcEsovWmkTlEYRNBqXpj6HCGoK17CFIYJ2nSFaAAEQAIE0E0gmgiRHxNm6cfXVj7NmD8T8fCLSYx4RkluYeCTD6KeaYHomCc2L2hOSTczerTV7oSavdtoJanJoIxeHCNp1nBBBu84QLYAACIBAmgkkFEEnErEeXcWvn8Tc2FmIjmV6SsiodxcL3UZEmxtjoSKL9tJjsJoYYhVc3Eskv2ms/tOlIIKeYgGboGZXDhFBBCWAhiogAAIg0EYEEokgoWOI6YD4MFnoBuGa/Yru+pxERHkniv4RN3QeAc0kYtIWtgsKyEKzhUld59Xj7KfuHg0ThgiCCGp4sdQXhAhKjA4VQQAEQKAtCCQSQTsfGQvTy1lqAmiz7v7UYvw0dp2mydOJ6AbNGxpVYaGMMOlnIxlV7/QOEEEQQY0tv2FKQQQlRoeKIAACINAWBFoqgnR3SOj4p1zgWeMB7TzKM9NkEs4wyVYhClnkVGHWXFm6c6T/c5csIOKjiKhKRNc1CxUiCCKo2TUzVB4iKDE6VAQBEACBtiDQUhFE9CwiOtAJlv7hAEgoN9e8vERerbY+brdofezYS22I1rHQFhI5gJinaTvM/HfRgIlNXhBBEEFNLpmni0MEJUaHiiAAAiDQFgRaLII0FpC6tI9wyc+JeJBIXkXEOWG6jYXW14TO04ER4/WFiO8nkr8lAQoRBBGUZN3U6kAEJUaHiiAAAiDQFgSOv+WeM1PVUc+b4oUacFH2FaJHhav3knhNZVCPj4cz3tbbn7dA7Yy2uxAnCBGjR133EEGjIkIBEAABEACBNiQAEQQRNOqyhQgaFREKgAAIgAAItCEBiCCIoFGXLUTQqIhQAARAAARAoA0JQARBBI26bCGCRkWEAiAAAiAAAm1IACIIImjUZQsRNCoiFAABEAABEGhDAhBBEEGjLluIoFERoQAIgAAIgEAbEoAIgggaddlCBI2KCAVAAARAAATakMBuEUGiedNkHhHPJCaPiLYQyWoifrIxRLI3kTeXiPZlkQqRPCLMqxurW1cKWeQTYduuEkTQrjNECyAAAiAAAukjsBtE0N5EfBKRqPipVyR3PhXwcYSL+XASOdyV0HQj7H7eSET/1zRBiKCmke1QASJo1xmiBRAAARAAgfQRaLkIEnmxS/Gh0a3vItKdIO8IIjnY5VD7yQgU9iaik59KNyK/1p0jFpolTMfVksoy/R8JqRhq/IIIapzVzkpCBO06Q7QAAiAAAiCQPgItF0FEr6kl/iD5aTRaFmJhPq22OyTh9cReeSckXkRE04noT0T08NNleB6JzGWie4TpsaYoQgQ1hWvYwhBBu84QLYAACIAACKSPQCtFEAtlhOgoYdrCRP8cGq3aCDG9lNS+h/lnO6MgRK9kohwRqYCaJkwzWGgbC20U1t2hBBdEUAJodVUggnadIVoAARAAARBIH4FWiqBhRneMME1h4X2cjdDdRHTPCBReQyJVJuoX5qlROSEKPaE/CdPapglCBDWNbIcKEEG7zhAtgAAIgAAIpI/ALoigSduPRgaJuFI3wtfG/q1Gzn8gonXDURDmPIu84unP5AkWflSY9nNHZFr/l0S0tSmKEEFN4Rq2METQrjNECyAAAiAAAukjkEgEMU0moZfWjWYNEf2xThhNY+IZQnQAEc166jO+iUh2cJVnob2Fa0bRWkaNqu+M2mKRU93OkB6x/bUpihBBTeGCCNp1XGgBBEAABECgTQgkEUFu18YJlqGBPkAk9xNxnkjKRDxYh+DlRNRJJPcR8d92xCM5In6V+/0NRNQ3VEZd5tV1nmqeYc25yUME7fpKxE7QrjNECyAAAiAAAukjkEQE7WwULLJAmI8ikseJ+Na6cs8morkk9Agx/W4nbbymFhdI6EZi2vb0ThAdKUyHEtGjRHR7UxQhgprChZ2gXceFFkAABEAABNqEQCtFEJHsQ8QnapwfFro+8uh6ykWeXl2L9UOku0D3EUmWyJtEpBGhh3Z9TiGivYhIAyoOHYc95VmmUaijuk3AhQhqAtZOimInaNcZogUQAAEQAIH0EWitCKqNr3bsJUwDGuuHRY/AaH8iyhJRRUL5BXtcYZGDhPlYotqOz42OTBQsUVXTWvLoCRFRe6Lpzr3+5y7gYuMgIYIaZ7WzkhBBu84QLYAACIAACKSPwFMiiDWac2suj2ZRSBcSycztGmTeIMQXs8hDtd97fDKF4TtJgx8KfyAqy0wnhCKLuRZp+qlLiDYx8ReIaH2STt72/EN6onqrV6+WBQsWRKk4ar/e7h9JbjDe60AEjfcZxvhAAARAAARaRkCET7j93mcQec/2QqmyhHfceuLhmkKjoesZd97ZMWXr5BO9UOYJy29ve/6CfzRUsYFCEEENQKovAhGUABqqgAAIgAAIgEDKCEAEJZgQiKAE0FAFBEAABEAABFJGACIowYRABCWAhiogAAIgAAIgkDICEEEJJgQiKAE0VAEBEAABEACBlBGACEowIRBBCaChCgiAAAiAAAikjABEUIIJgQhKAA1VQAAEQAAEQCBlBCCCEkwIRFACaKgCAiAAAiAAAikjABGUYEIgghJAQxUQAAEQAAEQSBkBiKAEEwIRlAAaqoAACIAACIBAyghABCWYEIigBNBQBQRAAARAAARSRgAiKMGEQAQlgIYqIAACIAACIJAyAhBBCSYEIigBNFQBARAAARAAgZQRgAhKMCEQQQmgoQoIgAAIgAAIpIwARFCCCYEISgANVUAABEAABEAgZQQgghJMCERQAmioAgIgAAIgAAIpIwARlGBCIIISQEMVEAABEAABEEgZAYigBBMCEZQAGqqAAAiAAAiAQMoIQAQlmBCIoATQUAUEQAAEQAAEUkYAIijBhEAEJYCGKiAAAiAAAiCQMgIQQQkmBCIoATRUAQEQAAEQAIGUEYAISjAhEEEJoKEKCIAACIAACKSMAERQggmBCEoADVVAAARAAARAIGUEIIISTAhEUAJoqAICIAACIAACKSMAEZRgQiCCEkBDFRAAARAAARBIGQGIoAQTAhGUABqqgAAIgAAIgEDKCEAEJZgQiKAE0FAFBEAABEAABFJGACIowYRABCWAhiogAAIgAAIgkDICEEEJJgQiKAE0VAEBEAABEACBlBGACEowIRBBCaChCgiAAAiAAAikjABEUIIJgQhKAA1VQAAEQAAEQCBlBCCCEkwIRFACaKgCAiAAAiAAAikjABGUYEIgghJAQxUQAAEQAAEQSBkBiKAEEwIRlAAaqoAACIAACIBAyghABCWYEIigBNBQBQRAAARAAARSRgAiKMGEQAQlgIYqIAACIAACIJAyAhBBCSYEIigBNFQBARAAARAAgZQRgAhKMCEQQQmgoQoIgAAIgAAIpIwARFCCCYEISgANVUAABEAABEAgZQQgghJMCERQAmioAgIgAAIgAAIpIwARlGBCIIISQEMVEAABEAABEEgZAYigBBMCEZQAGqqAAAiAAAiAQMoIQAQlmBCIoATQUAUEQAAEQAAEUkYAIijBhEAEJYCGKiAAAiAAAiCQMgIQQQkmBCIoATRUAQEQAAEQAIGUEYAISjAhEEEJoKEKCIAACIAACKSMAERQggmBCEoADVVAAARAAARAIGUEIIISTAhEUAJoqAICIAACIAACKSMAEZRgQiCCEkBDFRAAARAAARBIGQGIoAQTAhGUABqqgAAIgAAIgEDKCEAEJZgQiKAE0FAFBEAABEAABFJGACIowYRABCWAhiogAAIgAAIgkDICEEEJJgQiKAE0VAEBEAABEACBlBGACEowIRBBCaChCgiAAAiAAAikjABEUIIJgQhKAA1VQAAEQAAEQCBlBCCCEkwIRFACaKgCAiAAAiAAAikjABGUYEIgghJAQxUQAAEQAAEQSBkBiKAEEwIRlAAaqoAACIAACIBAyghABCWYEIigBNBQBQRAAARAAARSRgAiKMGEQAQlgIYqIAACIAACIJAyAhBBCSYEIigBNFQBARAAARAAgZQRgAhKMCEQQQmgoQoIgAAIgAAIpIwARFCCCYEISgANVUAABEAABEAgZQQgghJMCERQAmioAgIgAAIgAAIpIwARlGBCIIISQEMVEAABEAABEEgZAYigBBMCEZQAGqqAAAiAAAiAQMoIQAQlmBCIoATQUAUEQAAEQAAEUkYAIijBhEAEJYCGKiAAAiAAAiCQMgIQQQkmBCIoATRUAQEQAAEQAIGUEYAISjAhEEEJoKEKCIAACIAACKSMAERQ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",
"text/plain": [
"<VegaLite 3 object>\n",
"\n",
"If you see this message, it means the renderer has not been properly enabled\n",
"for the frontend that you are using. For more information, see\n",
"https://altair-viz.github.io/user_guide/troubleshooting.html\n"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import altair as alt\n",
"\n",
"rapids_color = {\n",
" 'text': '#666666',\n",
" 'fg_1': '#7306ff',\n",
" 'fg_2': '#36c9dd',\n",
" 'bg_1': '#fefefe',\n",
"}\n",
"\n",
"domain=['large', 'small']\n",
"range_=[rapids_color['fg_1'], rapids_color['fg_2']]\n",
"\n",
"bars = alt.Chart(speedups_df).mark_bar(opacity=0.7, fontSize=18).encode(\n",
" x=alt.X(\n",
" 'operation',\n",
" sort=alt.EncodingSortField(\n",
" field='speedup',\n",
" op='sum',\n",
" order='descending'\n",
" )\n",
" ),\n",
" y=alt.Y(\n",
" 'speedup',\n",
" scale=alt.Scale(\n",
" type='symlog'\n",
" ),\n",
" stack=None,\n",
" ),\n",
" color=alt.Color(\n",
" 'size:N',\n",
" scale=alt.Scale(\n",
" domain=domain,\n",
" range=range_\n",
" )\n",
" )\n",
")\n",
"\n",
"text = bars.mark_text(dy = -5).encode(\n",
" text='speedup'\n",
")\n",
"\n",
"(bars + text).configure(\n",
" text=alt.TextConfig(fontSize=18),\n",
").configure_axis(\n",
" labelFontSize=20,\n",
" labelColor=rapids_color['text'],\n",
" titleFontSize=20,\n",
" titleColor=rapids_color['text'],\n",
").configure_axisX(\n",
" labelAngle=-30,\n",
").configure_legend(\n",
" titleFontSize=18,\n",
" titleColor=rapids_color['text'],\n",
" labelFontSize=18,\n",
" labelColor=rapids_color['text'],\n",
" strokeColor='gray',\n",
" fillColor=rapids_color['bg_1'],\n",
" padding=10,\n",
" orient='top-right'\n",
").properties(height=500, width=500)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.vegalite.v3+json": {
"$schema": "https://vega.github.io/schema/vega-lite/v3.3.0.json",
"config": {
"axis": {
"grid": false,
"labelColor": "#666666",
"labelFontSize": 20,
"titleColor": "#666666",
"titleFontSize": 20
},
"axisX": {
"labelAngle": -30,
"labelColor": "#666666",
"labelFontSize": 0,
"titleColor": "#666666",
"titleFontSize": 0
},
"header": {
"labelAngle": -30,
"labelColor": "#666666",
"labelFontSize": 20,
"titleColor": "#666666",
"titleFontSize": 20
},
"legend": {
"fillColor": "#fefefe",
"labelColor": "#666666",
"labelFontSize": 18,
"padding": 10,
"strokeColor": "gray",
"titleColor": "#666666",
"titleFontSize": 18
},
"mark": {
"tooltip": null
},
"view": {
"height": 300,
"width": 400
}
},
"data": {
"name": "data-875c08b46dab603967b6ed4308886cc5"
},
"datasets": {
"data-875c08b46dab603967b6ed4308886cc5": [
{
"operation": "fft",
"shape": "1000x1000",
"shape0": 1000,
"shape1": 1000,
"size": "small",
"speedup": 5
},
{
"operation": "fft",
"shape": "10000x10000",
"shape0": 10000,
"shape1": 10000,
"size": "large",
"speedup": 210
},
{
"operation": "sum",
"shape": "1000x1000",
"shape0": 1000,
"shape1": 1000,
"size": "small",
"speedup": -2.3
},
{
"operation": "sum",
"shape": "10000x10000",
"shape0": 10000,
"shape1": 10000,
"size": "large",
"speedup": -1.3
},
{
"operation": "std",
"shape": "1000x1000",
"shape0": 1000,
"shape1": 1000,
"size": "small",
"speedup": 1
},
{
"operation": "std",
"shape": "10000x10000",
"shape0": 10000,
"shape1": 10000,
"size": "large",
"speedup": 4
},
{
"operation": "elementwise",
"shape": "1000x1000",
"shape0": 1000,
"shape1": 1000,
"size": "small",
"speedup": 150
},
{
"operation": "elementwise",
"shape": "10000x10000",
"shape0": 10000,
"shape1": 10000,
"size": "large",
"speedup": 270
},
{
"operation": "dot",
"shape": "1000x1000",
"shape0": 1000,
"shape1": 1000,
"size": "small",
"speedup": 18
},
{
"operation": "dot",
"shape": "10000x10000",
"shape0": 10000,
"shape1": 10000,
"size": "large",
"speedup": 11
},
{
"operation": "slicing",
"shape": "1000x1000",
"shape0": 1000,
"shape1": 1000,
"size": "small",
"speedup": 4
},
{
"operation": "slicing",
"shape": "10000x10000",
"shape0": 10000,
"shape1": 10000,
"size": "large",
"speedup": 190
},
{
"operation": "svd",
"shape": "1000x1000",
"shape0": 1000,
"shape1": 1000,
"size": "small",
"speedup": -3.6
},
{
"operation": "svd",
"shape": "10000x1000",
"shape0": 10000,
"shape1": 1000,
"size": "large",
"speedup": -1.8
},
{
"operation": "stencil",
"shape": "1000x1000",
"shape0": 1000,
"shape1": 1000,
"size": "small",
"speedup": 5
},
{
"operation": "stencil",
"shape": "10000x10000",
"shape0": 10000,
"shape1": 10000,
"size": "large",
"speedup": 150
}
]
},
"facet": {
"column": {
"field": "operation",
"sort": {
"field": "speedup",
"op": "sum",
"order": "descending"
},
"type": "nominal"
}
},
"spec": {
"layer": [
{
"encoding": {
"color": {
"field": "size",
"scale": {
"domain": [
"large",
"small"
],
"range": [
"#7306ff",
"#36c9dd"
]
},
"type": "nominal"
},
"x": {
"field": "size",
"type": "nominal"
},
"y": {
"axis": {
"tickCount": 21,
"title": "GPU vs CPU Speedup"
},
"field": "speedup",
"scale": {
"domain": [
-1000,
1200
],
"rangeStep": 100,
"type": "symlog"
},
"stack": null,
"type": "quantitative"
}
},
"height": 500,
"mark": {
"fontSize": 18,
"opacity": 1,
"type": "bar"
},
"width": 80
},
{
"layer": [
{
"encoding": {
"color": {
"field": "size",
"scale": {
"domain": [
"large",
"small"
],
"range": [
"#7306ff",
"#36c9dd"
]
},
"type": "nominal"
},
"text": {
"field": "speedup",
"type": "quantitative"
},
"x": {
"field": "size",
"type": "nominal"
},
"y": {
"axis": {
"tickCount": 21,
"title": "GPU vs CPU Speedup"
},
"field": "speedup",
"scale": {
"domain": [
-1000,
1200
],
"rangeStep": 100,
"type": "symlog"
},
"stack": null,
"type": "quantitative"
}
},
"height": 500,
"mark": {
"dy": -5,
"type": "text"
},
"width": 80
},
{
"encoding": {
"color": {
"field": "size",
"scale": {
"domain": [
"large",
"small"
],
"range": [
"#7306ff",
"#36c9dd"
]
},
"type": "nominal"
},
"text": {
"field": "speedup",
"type": "quantitative"
},
"x": {
"field": "size",
"type": "nominal"
},
"y": {
"axis": {
"tickCount": 21,
"title": "GPU vs CPU Speedup"
},
"field": "speedup",
"scale": {
"domain": [
-1000,
1200
],
"rangeStep": 100,
"type": "symlog"
},
"stack": null,
"type": "quantitative"
}
},
"height": 500,
"mark": {
"dy": 7,
"type": "text"
},
"width": 80
}
]
}
]
}
},
"image/png": "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",
"text/plain": [
"<VegaLite 3 object>\n",
"\n",
"If you see this message, it means the renderer has not been properly enabled\n",
"for the frontend that you are using. For more information, see\n",
"https://altair-viz.github.io/user_guide/troubleshooting.html\n"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import altair as alt\n",
"\n",
"rapids_color = {\n",
" 'text': '#666666',\n",
" 'fg_1': '#7306ff',\n",
" 'fg_2': '#36c9dd',\n",
" 'bg_1': '#fefefe',\n",
"}\n",
"\n",
"domain=['large', 'small']\n",
"range_=[rapids_color['fg_1'], rapids_color['fg_2']]\n",
"\n",
"bars = alt.Chart(speedups_df).mark_bar(opacity=1.0, fontSize=18).encode(\n",
" x=alt.X(\n",
" 'size',\n",
" ),\n",
" y=alt.Y(\n",
" 'speedup',\n",
" scale=alt.Scale(\n",
" type='symlog',\n",
" domain=(-1000, 1200),\n",
" rangeStep=100\n",
" ),\n",
" axis=alt.Axis(\n",
" title=\"GPU vs CPU Speedup\",\n",
" tickCount=21\n",
" ),\n",
" stack=None,\n",
" ),\n",
" color=alt.Color(\n",
" 'size:N',\n",
" scale=alt.Scale(\n",
" domain=domain,\n",
" range=range_\n",
" )\n",
" ),\n",
").properties(height=500, width=80)\n",
"\n",
"text = bars.mark_text(\n",
" dy=-5,\n",
").encode(\n",
" text='speedup'\n",
")\n",
"\n",
"text_neg = bars.mark_text(\n",
" dy=7,\n",
").encode(\n",
" text='speedup'\n",
")\n",
"\n",
"text = text + text_neg\n",
"\n",
"alt.layer(\n",
" bars,\n",
" text,\n",
" data=speedups_df\n",
").facet(\n",
" column=alt.Column(\n",
" 'operation',\n",
" sort=alt.EncodingSortField(\n",
" field='speedup',\n",
" op='sum',\n",
" order='descending'\n",
" )\n",
" )\n",
").configure_header(\n",
" labelFontSize=20,\n",
" labelColor=rapids_color['text'],\n",
" titleFontSize=20,\n",
" titleColor=rapids_color['text'],\n",
" labelAngle=-30,\n",
").configure_axis(\n",
" labelFontSize=20,\n",
" labelColor=rapids_color['text'],\n",
" titleFontSize=20,\n",
" titleColor=rapids_color['text'],\n",
" grid=False,\n",
").configure_axisX(\n",
" labelAngle=-30,\n",
" labelFontSize=0,\n",
" labelColor=rapids_color['text'],\n",
" titleFontSize=0,\n",
" titleColor=rapids_color['text'],\n",
").configure_legend(\n",
" titleFontSize=18,\n",
" titleColor=rapids_color['text'],\n",
" labelFontSize=18,\n",
" labelColor=rapids_color['text'],\n",
" strokeColor='gray',\n",
" fillColor=rapids_color['bg_1'],\n",
" padding=10,\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"# speedups_df.to_csv(\"array_speedup.csv\")"
]
}
],
"metadata": {
"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.7.3"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment