{ "cells": [ { "cell_type": "markdown", "id": "5f724ab5", "metadata": { "papermill": { "duration": 0.009042, "end_time": "2024-09-06T18:35:17.255792", "exception": false, "start_time": "2024-09-06T18:35:17.246750", "status": "completed" }, "tags": [] }, "source": [ "# Statistical and Visualization Functions: Thicket Tutorial\n", "\n", "Thicket is a python-based toolkit for Exploratory Data Analysis (EDA) of parallel performance data that enables performance optimization and understanding of applications’ performance on supercomputers. It bridges the performance tool gap between being able to consider only a single instance of a simulation run (e.g., single platform, single measurement tool, or single scale) and finding actionable insights in multi-dimensional, multi-scale, multi-architecture, and multi-tool performance datasets.\n", "\n", "## 1. Import Necessary Packages\n", "\n", "To explore the structure and various capabilities of thicket components, we begin by importing necessary packages. " ] }, { "cell_type": "code", "execution_count": 1, "id": "90484b9c", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:17.271801Z", "iopub.status.busy": "2024-09-06T18:35:17.271626Z", "iopub.status.idle": "2024-09-06T18:35:17.880762Z", "shell.execute_reply": "2024-09-06T18:35:17.880457Z" }, "papermill": { "duration": 0.618144, "end_time": "2024-09-06T18:35:17.881479", "exception": false, "start_time": "2024-09-06T18:35:17.263335", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "application/javascript": [ "var Roundtrip_Obj = {};\n", "var refresh_cycle = false;\n", "var clicked_cell = null;\n", "var cached_cells = Jupyter.notebook.get_cell_elements();\n", "\n", "/**\n", " * @name unindentPyCode\n", " * @description Removes leading indentations from a python code string.\n", " * \n", " * @param {string} code Python code in string form\n", " * @returns Passed code string but with no leading indentations\n", " */\n", "function unindentPyCode(code){\n", " let uicode = code.split('\\n');\n", " let indent = 0;\n", "\n", " uicode.forEach((l,i, arr)=>{\n", " if(i == 0){\n", " indent = l.search(/\\S/);\n", " }\n", " arr[i] = l.slice(indent);\n", " })\n", " uicode = uicode.join('\\n');\n", " return uicode;\n", "}\n", "\n", "/**\n", " * @name buildPythonAssignment\n", " * @description Builds up a python code string which assigns javascript data back into jypyter notebook namespace\n", " * \n", " * @param {string} val This is data assigned back to the python code\n", " * @param {string} py_var This is the variable into which val is assigned\n", " * @param {string} converter This is a definition of a python function which translates data back to the desired format\n", " * @returns The python code to be run in the jupyter shell\n", " */\n", "function buildPythonAssignment(val, py_var, converter){\n", " // console.log(val, py_var, converter);\n", " var holder = `'${val}'`;\n", " var code = `${unindentPyCode(converter.code)}`\n", " code += `\\ntmp = ${holder}`;\n", " code += `\\n${py_var} = ${converter.name}(tmp)`\n", "\n", " return code\n", "}\n", "\n", "/**\n", " * @name manageNewCell\n", " * \n", " * @description Increments all two way bound cell ids by the number of new cells which proceed them. \n", " * Ex. Adding one cell at position 2 will increment a bound cell at position 3 from 3->4. \n", " * \n", " * @param {array} newCells A list of our current cells in the notebook to be compared against cached cells\n", " * @param {} obj The current roundtrip object containing all data bindings\n", " */\n", "function manageNewCell(newCells, obj){\n", " let newIds = [];\n", "\n", " Object.keys(newCells).forEach(function(i){\n", " if(!Object.values(cached_cells).includes(newCells[i]) && !isNaN(i)){\n", " newIds.push(i);\n", " }\n", " });\n", "\n", " //increment all bindings past each new id\n", " for(let js_var in obj){\n", " for(let id of newIds){\n", " for(let key in obj[js_var][\"two_way\"]){\n", " obj[js_var][\"two_way\"][key].forEach((two_way_id, i) => {\n", " if(two_way_id > id){\n", " obj[js_var][\"two_way\"][key][i] += 1;\n", " }\n", " });\n", " }\n", " } \n", " }\n", "\n", " cached_cells = newCells;\n", "}\n", "\n", "function manageDeletedCell(newCells, obj){\n", " let deletedId = null;\n", " \n", " for(i of Object.keys(cachedCells)){\n", " if (cached_cells[i] !== newCells[i]){\n", " deletedId = i;\n", " break;\n", " }\n", " }\n", "\n", "}\n", "\n", "\n", "function bindClickDetectToCells(){\n", " let cells = Jupyter.notebook.get_cell_elements();\n", "\n", " for(let i in Object.keys(cells)){\n", " let cell = cells[i];\n", "\n", " if(cell !== undefined){\n", " cell.addEventListener('mousedown', () => {\n", " clicked_cell = i;\n", " }, true)\n", " }\n", " }\n", "}\n", "\n", "bindClickDetectToCells();\n", "\n", "/**\n", " * @name RT_Handler\n", " * @description A wrapper for our roundtrip object. It is called as a proxy for the\n", " * roundtrip object defined above. This enables us to define custom call backs for\n", " * gets and sets on the roundtrip object. The custom set handles necessary data conversion,\n", " * the registering of two-way bound variables and automatic updating of watched cells. The get\n", " * allows users to interact with the underlying object without worrying about the proxy.\n", " */\n", "var RT_Handler = {\n", " set(obj, prop, value){\n", " //Do cell housekeeping\n", "\n", "\n", " //Initial pass of value into roundtrip object\n", " // from python code; there may be multiple different\n", " // visualizations of the same type we need to catch\n", " if (typeof value === 'object' && value.hasOwnProperty('origin') && value.origin == 'INIT'){\n", " \n", " /**\n", " * In this code block we need to check if there is already a \n", " * an array of id's which are two way bound already defined and \n", " * add to it or remove from it\n", " */\n", " let ida = Jupyter.notebook.get_selected_index()-1;\n", " value.id = ida;\n", " let new_val = value;\n", "\n", " // Block updating bindings while jupyter is running\n", " if(refresh_cycle){\n", " new_val = obj[prop];\n", " new_val.data = value.data;\n", " return Reflect.set(obj, prop, new_val);\n", " }\n", "\n", " /**\n", " * The broad case where we are updating bindings \n", " * on existing data\n", " */\n", " if(obj[prop] != undefined){\n", " new_val = obj[prop];\n", " new_val.data = value.data;\n", " new_val.converter = value.converter;\n", "\n", " // If there is no two way array, create one\n", " // Else push on our new id\n", " if(value.two_way === true){\n", " if(!Object.keys(new_val.two_way).includes(value['python_var'])){\n", " new_val.two_way[value['python_var']] = [];\n", " }\n", "\n", " let pybinding = new_val.two_way[value['python_var']];\n", "\n", " if(!pybinding.includes(value.id)){\n", " pybinding.push(value.id);\n", " }\n", "\n", " }\n", "\n", " //Deregister a cell id from being two-way bound now\n", " else if(value.two_way === false && Object.keys(new_val.two_way).includes(value['python_var'])){\n", " let pybinding = new_val.two_way[value['python_var']];\n", " const index = pybinding.indexOf(value.id);\n", " \n", " if (index > -1) {\n", " pybinding.splice(index, 1);\n", " }\n", " }\n", " }\n", "\n", " //Initalize a new two-way object if\n", " // one did not exist\n", " else{\n", " if(new_val.two_way == true){\n", " new_val.two_way = {};\n", " new_val.two_way[value['python_var']] = [value.id];\n", " }\n", " else{\n", " new_val.two_way = {};\n", " }\n", " delete new_val.id;\n", " delete new_val.from_py;\n", " delete new_val.python_var;\n", " }\n", "\n", " return Reflect.set(obj, prop, new_val);\n", " }\n", " //Assignment from javascript code\n", " else {\n", " // TODO: make the py/js data identification object a\n", " // formal class\n", " if(obj[prop] === undefined){\n", " obj[prop] = {\n", " two_way: {},\n", " origin: \"JS\",\n", " data: null,\n", " python_var: \"\",\n", " converter: null,\n", " type: typeof(value)\n", " }\n", " }\n", "\n", " var execable_cells = [];\n", " let origin = 'STANDARD';\n", " let python_var = '';\n", "\n", " if (typeof value === 'object' && \n", " value.hasOwnProperty('origin') && \n", " value.origin == 'PYASSIGN'){\n", "\n", " origin = value.origin;\n", " python_var = value.python_var;\n", " value = value.data;\n", " }\n", "\n", " //TODO: Replace with imported, webpacked D3\n", " require(['https://d3js.org/d3.v4.min.js'], function(d3) {\n", "\n", " // When 2 way bound this calls automatically when something changes\n", " if (obj[prop] !== undefined && Object.keys(obj[prop][\"two_way\"]).length > 0){\n", "\n", " let current_cell = Number(clicked_cell);\n", " let py_var = '';\n", "\n", " //ust set the data without updating if our current cell is not two way bound\n", " if(origin == 'STANDARD'){\n", " let found = false;\n", " for(let key in obj[prop][\"two_way\"]){\n", " if (obj[prop][\"two_way\"][key].includes(current_cell)){\n", " found = true;\n", " py_var = key;\n", " }\n", " }\n", "\n", " if(!found){\n", " return Reflect.set(obj[prop], \"data\", value);\n", " }\n", " }\n", "\n", "\n", " if(origin == 'PYASSIGN'){\n", " py_var = python_var;\n", " }\n", "\n", "\n", " /**\n", " * We now have a list of registered cells we can execute.\n", " * So we look through our javascript variables to see if they\n", " * are bound to the same py variable as our current assignment\n", " * TODO: Make this list update when cells are moved up or down\n", " */\n", "\n", " for(let js_var in obj){\n", " let boundpyvars = Object.keys(obj[js_var][\"two_way\"]);\n", "\n", " if(boundpyvars.includes(py_var)){\n", " let clls = obj[js_var][\"two_way\"][py_var].filter(x => x != current_cell );\n", " execable_cells = execable_cells.concat(clls);\n", " }\n", " }\n", "\n", " if(origin == 'STANDARD'){\n", " // TODO:THROW AN ERROR IF CONVERTER == NONE\n", " const code = buildPythonAssignment(value, py_var, obj[prop][\"converter\"]);\n", " \n", " //TODO: Turn this into a function that manages error reporting and printing\n", " Jupyter.notebook.kernel.execute(code, { \n", " shell:{\n", " reply: function(r){\n", " //consider putting this in a reserved jupyter variable\n", " if(r.content.status == 'error'){\n", " console.error(`${r.content.ename} in JS->Python coversion:\\n ${r.content.evalue}`)\n", " }\n", " }\n", " }\n", " });\n", " }\n", "\n", " refresh_cycle = true;\n", " Jupyter.notebook.execute_cells(execable_cells);\n", "\n", " /**\n", " * Test every half second to see if some of the\n", " * jupyter cells are still running. Avoids a race condition\n", " * where incorrect ids were stored in our roundtrip object.\n", " */\n", " const test_running = function(){\n", " let runtest = d3.selectAll(\".running\");\n", " if(runtest.empty()){\n", " refresh_cycle = false;\n", " return;\n", " }\n", " else{\n", " setTimeout(test_running, 500);\n", " }\n", " }\n", "\n", " test_running();\n", " }\n", "\n", " });\n", " } \n", "\n", " return Reflect.set(obj[prop], \"data\", value);\n", " },\n", " get(obj, prop, reciever){\n", " let ret = obj[prop].data\n", " return ret; \n", " }\n", "}\n", "\n", "window.Roundtrip = new Proxy(Roundtrip_Obj, RT_Handler);\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "import pandas as pd\n", "import numpy as np\n", "from IPython.display import display\n", "from IPython.display import HTML\n", "import hatchet as ht\n", "\n", "import thicket as th\n", "\n", "pd.set_option(\"display.max_rows\", None)\n", "pd.set_option(\"display.max_columns\", None)" ] }, { "cell_type": "code", "execution_count": 2, "id": "6586fbfb", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:17.894171Z", "iopub.status.busy": "2024-09-06T18:35:17.894019Z", "iopub.status.idle": "2024-09-06T18:35:17.896932Z", "shell.execute_reply": "2024-09-06T18:35:17.896620Z" }, "papermill": { "duration": 0.009727, "end_time": "2024-09-06T18:35:17.897489", "exception": false, "start_time": "2024-09-06T18:35:17.887762", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "# Disable the Pandas 3 Future Warnings for now\n", "import warnings\n", "warnings.filterwarnings(\"ignore\", category=FutureWarning) " ] }, { "cell_type": "markdown", "id": "85d6bf44", "metadata": { "papermill": { "duration": 0.005667, "end_time": "2024-09-06T18:35:17.908824", "exception": false, "start_time": "2024-09-06T18:35:17.903157", "status": "completed" }, "tags": [] }, "source": [ "## 2. Read in Performance Profiles\n", "\n", "For this notebook, we select profiles generated on Lawrence Livermore National Lab (LLNL) machine, quartz. We create two thicket objects, one containing data generated using the clang compiler and the other containing data generated with the GCC compiler." ] }, { "cell_type": "code", "execution_count": 3, "id": "d2385473", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:17.920433Z", "iopub.status.busy": "2024-09-06T18:35:17.920343Z", "iopub.status.idle": "2024-09-06T18:35:18.491942Z", "shell.execute_reply": "2024-09-06T18:35:18.491537Z" }, "papermill": { "duration": 0.578377, "end_time": "2024-09-06T18:35:18.492860", "exception": false, "start_time": "2024-09-06T18:35:17.914483", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "clang = \"../data/quartz/clang14.0.6_BaseSeq_8388608/\"\n", "gcc = \"../data/quartz/GCC_10.3.1_BaseSeq_08388608/O3\"\n", "\n", "# create thickets for each dataset originating from clang and gcc compilers\n", "clang_th = th.Thicket.from_caliperreader(clang, disable_tqdm=True)\n", "gcc_th = th.Thicket.from_caliperreader(gcc, disable_tqdm=True)" ] }, { "cell_type": "markdown", "id": "62bd944c", "metadata": { "papermill": { "duration": 0.005774, "end_time": "2024-09-06T18:35:18.504936", "exception": false, "start_time": "2024-09-06T18:35:18.499162", "status": "completed" }, "tags": [] }, "source": [ "## 3. More Information on a Function\n", "\n", "You can use the `help()` method within Python to see the information for a given object. You can do this by typing `help(object)`. \n", "This will allow you to see the arguments for the function, and what will be returned. An example is below." ] }, { "cell_type": "code", "execution_count": 4, "id": "76878f91", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:18.516824Z", "iopub.status.busy": "2024-09-06T18:35:18.516719Z", "iopub.status.idle": "2024-09-06T18:35:18.519906Z", "shell.execute_reply": "2024-09-06T18:35:18.519604Z" }, "papermill": { "duration": 0.009737, "end_time": "2024-09-06T18:35:18.520487", "exception": false, "start_time": "2024-09-06T18:35:18.510750", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Help on function median in module thicket.stats.median:\n", "\n", "median(thicket, columns=None)\n", " Calculate the median for each node in the performance data table.\n", " \n", " Designed to take in a thicket, and append one or more columns to the\n", " aggregated statistics table for the median calculation for each node.\n", " \n", " Arguments:\n", " thicket (thicket): Thicket object\n", " columns (list): List of hardware/timing metrics to perform median calculation\n", " on. Note, if using a columnar joined thicket a list of tuples must be passed\n", " in with the format (column index, column name).\n", "\n" ] } ], "source": [ "help(th.stats.median)" ] }, { "cell_type": "markdown", "id": "cc92a407", "metadata": { "papermill": { "duration": 0.00553, "end_time": "2024-09-06T18:35:18.531780", "exception": false, "start_time": "2024-09-06T18:35:18.526250", "status": "completed" }, "tags": [] }, "source": [ "## 4. Creating a Combined Thicket\n", "\n", "To demonstrate the functions on both a thicket and a combined thicket, we create a combined thicket." ] }, { "cell_type": "code", "execution_count": 5, "id": "2ac69440", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:18.543584Z", "iopub.status.busy": "2024-09-06T18:35:18.543483Z", "iopub.status.idle": "2024-09-06T18:35:18.609781Z", "shell.execute_reply": "2024-09-06T18:35:18.609452Z" }, "papermill": { "duration": 0.073087, "end_time": "2024-09-06T18:35:18.610438", "exception": false, "start_time": "2024-09-06T18:35:18.537351", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ClangGCCname
nidtimetime (exc)ProblemSizeRepsIterations/RepBytes/RepKernels/RepFlops/RepRetiringFrontend boundBackend boundBad speculationBranch mispredictMachine clearsFrontend latencyFrontend bandwidthMemory boundCore boundExternal MemoryL1 boundL2 boundL3 boundnidtimetime (exc)ProblemSizeRepsIterations/RepBytes/RepKernels/RepFlops/RepRetiringFrontend boundBackend boundBad speculationBranch mispredictMachine clearsFrontend latencyFrontend bandwidthMemory boundCore boundExternal MemoryL1 boundL2 boundL3 bound
nodeprofile
{'name': 'RAJAPerf', 'type': 'function'}01.01.905843e+124729399.08388608.050.08388608.01.073742e+091.00.00.1067870.3981060.4213870.0737200.9960680.0039320.3787150.6212850.3211280.4621230.057753-0.1073040.0082840.0158741.01.966339e+125297509.08388608.050.08388608.01.073742e+091.00.00.1577080.4586130.3300700.0536090.9982810.0017190.3844320.6155680.5136340.1825910.0541580.138238-0.0199950.016286RAJAPerf
11.01.913321e+124814351.08388608.050.08388608.01.073742e+091.00.00.1728060.4812970.2646120.0812840.9982360.0017640.4343920.5656080.3845830.2123360.0502620.049129-0.0286250.0122471.01.943775e+125431988.08388608.050.08388608.01.073742e+091.00.00.1509840.4301330.3123630.1065200.9959330.0040670.3828770.6171230.4924160.4417510.0639720.0050420.0218940.017674RAJAPerf
21.01.906939e+124854684.08388608.050.08388608.01.073742e+091.00.00.1436080.6597930.1034380.0931620.9976140.0023860.4881830.5118170.5381170.1371470.0784900.083822-0.1091640.0140291.01.947811e+125238545.08388608.050.08388608.01.073742e+091.00.00.1413250.3044900.4919960.0621900.9981040.0018960.2562950.7437050.3787930.3431420.054910-0.0723120.0517930.014941RAJAPerf
31.01.910519e+124716924.08388608.050.08388608.01.073742e+091.00.00.1864940.3686870.3313370.1134810.9984890.0015110.3487290.6512710.3432370.3519910.0493070.019792-0.0317460.0100441.01.945722e+125199698.08388608.050.08388608.01.073742e+091.00.00.1359930.2643520.5099420.0897130.9965960.0034040.2837150.7162850.3462090.4243620.041255-0.0043420.0545360.007233RAJAPerf
41.01.901803e+124840942.08388608.050.08388608.01.073742e+091.00.00.1494820.3621300.4526640.0357230.9964180.0035820.3411090.6588910.3795000.4593450.055345-0.020517-0.0049360.0175401.01.967202e+125446490.08388608.050.08388608.01.073742e+091.00.00.1675470.4180460.3087300.1056770.9980920.0019080.4132770.5867230.4403810.2800110.0489190.109049-0.0217310.010631RAJAPerf
\n", "
" ], "text/plain": [ " Clang \\\n", " nid time \n", "node profile \n", "{'name': 'RAJAPerf', 'type': 'function'} 0 1.0 1.905843e+12 \n", " 1 1.0 1.913321e+12 \n", " 2 1.0 1.906939e+12 \n", " 3 1.0 1.910519e+12 \n", " 4 1.0 1.901803e+12 \n", "\n", " \\\n", " time (exc) ProblemSize Reps \n", "node profile \n", "{'name': 'RAJAPerf', 'type': 'function'} 0 4729399.0 8388608.0 50.0 \n", " 1 4814351.0 8388608.0 50.0 \n", " 2 4854684.0 8388608.0 50.0 \n", " 3 4716924.0 8388608.0 50.0 \n", " 4 4840942.0 8388608.0 50.0 \n", "\n", " \\\n", " Iterations/Rep Bytes/Rep \n", "node profile \n", "{'name': 'RAJAPerf', 'type': 'function'} 0 8388608.0 1.073742e+09 \n", " 1 8388608.0 1.073742e+09 \n", " 2 8388608.0 1.073742e+09 \n", " 3 8388608.0 1.073742e+09 \n", " 4 8388608.0 1.073742e+09 \n", "\n", " \\\n", " Kernels/Rep Flops/Rep \n", "node profile \n", "{'name': 'RAJAPerf', 'type': 'function'} 0 1.0 0.0 \n", " 1 1.0 0.0 \n", " 2 1.0 0.0 \n", " 3 1.0 0.0 \n", " 4 1.0 0.0 \n", "\n", " \\\n", " Retiring Frontend bound \n", "node profile \n", "{'name': 'RAJAPerf', 'type': 'function'} 0 0.106787 0.398106 \n", " 1 0.172806 0.481297 \n", " 2 0.143608 0.659793 \n", " 3 0.186494 0.368687 \n", " 4 0.149482 0.362130 \n", "\n", " \\\n", " Backend bound \n", "node profile \n", "{'name': 'RAJAPerf', 'type': 'function'} 0 0.421387 \n", " 1 0.264612 \n", " 2 0.103438 \n", " 3 0.331337 \n", " 4 0.452664 \n", "\n", " \\\n", " Bad speculation \n", "node profile \n", "{'name': 'RAJAPerf', 'type': 'function'} 0 0.073720 \n", " 1 0.081284 \n", " 2 0.093162 \n", " 3 0.113481 \n", " 4 0.035723 \n", "\n", " \\\n", " Branch mispredict \n", "node profile \n", "{'name': 'RAJAPerf', 'type': 'function'} 0 0.996068 \n", " 1 0.998236 \n", " 2 0.997614 \n", " 3 0.998489 \n", " 4 0.996418 \n", "\n", " \\\n", " Machine clears \n", "node profile \n", "{'name': 'RAJAPerf', 'type': 'function'} 0 0.003932 \n", " 1 0.001764 \n", " 2 0.002386 \n", " 3 0.001511 \n", " 4 0.003582 \n", "\n", " \\\n", " Frontend latency \n", "node profile \n", "{'name': 'RAJAPerf', 'type': 'function'} 0 0.378715 \n", " 1 0.434392 \n", " 2 0.488183 \n", " 3 0.348729 \n", " 4 0.341109 \n", "\n", " \\\n", " Frontend bandwidth \n", "node profile \n", "{'name': 'RAJAPerf', 'type': 'function'} 0 0.621285 \n", " 1 0.565608 \n", " 2 0.511817 \n", " 3 0.651271 \n", " 4 0.658891 \n", "\n", " \\\n", " Memory bound Core bound \n", "node profile \n", "{'name': 'RAJAPerf', 'type': 'function'} 0 0.321128 0.462123 \n", " 1 0.384583 0.212336 \n", " 2 0.538117 0.137147 \n", " 3 0.343237 0.351991 \n", " 4 0.379500 0.459345 \n", "\n", " \\\n", " External Memory L1 bound \n", "node profile \n", "{'name': 'RAJAPerf', 'type': 'function'} 0 0.057753 -0.107304 \n", " 1 0.050262 0.049129 \n", " 2 0.078490 0.083822 \n", " 3 0.049307 0.019792 \n", " 4 0.055345 -0.020517 \n", "\n", " GCC \\\n", " L2 bound L3 bound nid \n", "node profile \n", "{'name': 'RAJAPerf', 'type': 'function'} 0 0.008284 0.015874 1.0 \n", " 1 -0.028625 0.012247 1.0 \n", " 2 -0.109164 0.014029 1.0 \n", " 3 -0.031746 0.010044 1.0 \n", " 4 -0.004936 0.017540 1.0 \n", "\n", " \\\n", " time time (exc) \n", "node profile \n", "{'name': 'RAJAPerf', 'type': 'function'} 0 1.966339e+12 5297509.0 \n", " 1 1.943775e+12 5431988.0 \n", " 2 1.947811e+12 5238545.0 \n", " 3 1.945722e+12 5199698.0 \n", " 4 1.967202e+12 5446490.0 \n", "\n", " \\\n", " ProblemSize Reps \n", "node profile \n", "{'name': 'RAJAPerf', 'type': 'function'} 0 8388608.0 50.0 \n", " 1 8388608.0 50.0 \n", " 2 8388608.0 50.0 \n", " 3 8388608.0 50.0 \n", " 4 8388608.0 50.0 \n", "\n", " \\\n", " Iterations/Rep Bytes/Rep \n", "node profile \n", "{'name': 'RAJAPerf', 'type': 'function'} 0 8388608.0 1.073742e+09 \n", " 1 8388608.0 1.073742e+09 \n", " 2 8388608.0 1.073742e+09 \n", " 3 8388608.0 1.073742e+09 \n", " 4 8388608.0 1.073742e+09 \n", "\n", " \\\n", " Kernels/Rep Flops/Rep \n", "node profile \n", "{'name': 'RAJAPerf', 'type': 'function'} 0 1.0 0.0 \n", " 1 1.0 0.0 \n", " 2 1.0 0.0 \n", " 3 1.0 0.0 \n", " 4 1.0 0.0 \n", "\n", " \\\n", " Retiring Frontend bound \n", "node profile \n", "{'name': 'RAJAPerf', 'type': 'function'} 0 0.157708 0.458613 \n", " 1 0.150984 0.430133 \n", " 2 0.141325 0.304490 \n", " 3 0.135993 0.264352 \n", " 4 0.167547 0.418046 \n", "\n", " \\\n", " Backend bound \n", "node profile \n", "{'name': 'RAJAPerf', 'type': 'function'} 0 0.330070 \n", " 1 0.312363 \n", " 2 0.491996 \n", " 3 0.509942 \n", " 4 0.308730 \n", "\n", " \\\n", " Bad speculation \n", "node profile \n", "{'name': 'RAJAPerf', 'type': 'function'} 0 0.053609 \n", " 1 0.106520 \n", " 2 0.062190 \n", " 3 0.089713 \n", " 4 0.105677 \n", "\n", " \\\n", " Branch mispredict \n", "node profile \n", "{'name': 'RAJAPerf', 'type': 'function'} 0 0.998281 \n", " 1 0.995933 \n", " 2 0.998104 \n", " 3 0.996596 \n", " 4 0.998092 \n", "\n", " \\\n", " Machine clears \n", "node profile \n", "{'name': 'RAJAPerf', 'type': 'function'} 0 0.001719 \n", " 1 0.004067 \n", " 2 0.001896 \n", " 3 0.003404 \n", " 4 0.001908 \n", "\n", " \\\n", " Frontend latency \n", "node profile \n", "{'name': 'RAJAPerf', 'type': 'function'} 0 0.384432 \n", " 1 0.382877 \n", " 2 0.256295 \n", " 3 0.283715 \n", " 4 0.413277 \n", "\n", " \\\n", " Frontend bandwidth \n", "node profile \n", "{'name': 'RAJAPerf', 'type': 'function'} 0 0.615568 \n", " 1 0.617123 \n", " 2 0.743705 \n", " 3 0.716285 \n", " 4 0.586723 \n", "\n", " \\\n", " Memory bound Core bound \n", "node profile \n", "{'name': 'RAJAPerf', 'type': 'function'} 0 0.513634 0.182591 \n", " 1 0.492416 0.441751 \n", " 2 0.378793 0.343142 \n", " 3 0.346209 0.424362 \n", " 4 0.440381 0.280011 \n", "\n", " \\\n", " External Memory L1 bound \n", "node profile \n", "{'name': 'RAJAPerf', 'type': 'function'} 0 0.054158 0.138238 \n", " 1 0.063972 0.005042 \n", " 2 0.054910 -0.072312 \n", " 3 0.041255 -0.004342 \n", " 4 0.048919 0.109049 \n", "\n", " name \n", " L2 bound L3 bound \n", "node profile \n", "{'name': 'RAJAPerf', 'type': 'function'} 0 -0.019995 0.016286 RAJAPerf \n", " 1 0.021894 0.017674 RAJAPerf \n", " 2 0.051793 0.014941 RAJAPerf \n", " 3 0.054536 0.007233 RAJAPerf \n", " 4 -0.021731 0.010631 RAJAPerf " ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "combined_th = th.Thicket.concat_thickets(\n", " axis=\"columns\",\n", " thickets=[clang_th, gcc_th],\n", " headers=[\"Clang\", \"GCC\"],\n", " disable_tqdm=True,\n", ")\n", "combined_th.dataframe.head(5)" ] }, { "cell_type": "markdown", "id": "cb21574b", "metadata": { "papermill": { "duration": 0.006017, "end_time": "2024-09-06T18:35:18.622809", "exception": false, "start_time": "2024-09-06T18:35:18.616792", "status": "completed" }, "tags": [] }, "source": [ "**NOTE**\n", "- Single indexed statistical functions append columns to the right.\n", "- Columnar joined thickets are ordered in alphabetical order by column index and also by the columns underneath a column index. " ] }, { "cell_type": "markdown", "id": "177c033a", "metadata": { "papermill": { "duration": 0.006065, "end_time": "2024-09-06T18:35:18.634889", "exception": false, "start_time": "2024-09-06T18:35:18.628824", "status": "completed" }, "tags": [] }, "source": [ "## 5. Aggregated Statistic Functions" ] }, { "cell_type": "markdown", "id": "a08bc5a3", "metadata": { "papermill": { "duration": 0.005856, "end_time": "2024-09-06T18:35:18.646750", "exception": false, "start_time": "2024-09-06T18:35:18.640894", "status": "completed" }, "tags": [] }, "source": [ "### 5.1 Maximum\n", "The `maximum` function will determine the maximum value for each node in the performance data table. In other terms, the maximum is the highest observation for a node and its associated profiles.
\n", "\n", "The maximum value will be appended to the aggregated statistics table and will be denoted with `_max` at the end of column name i.e. `column_max`." ] }, { "cell_type": "markdown", "id": "f0fb7c67", "metadata": { "papermill": { "duration": 0.005966, "end_time": "2024-09-06T18:35:18.658734", "exception": false, "start_time": "2024-09-06T18:35:18.652768", "status": "completed" }, "tags": [] }, "source": [ "**Single Index Thicket Example**" ] }, { "cell_type": "code", "execution_count": 6, "id": "acf6f1a8", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:18.682145Z", "iopub.status.busy": "2024-09-06T18:35:18.682021Z", "iopub.status.idle": "2024-09-06T18:35:18.684613Z", "shell.execute_reply": "2024-09-06T18:35:18.684315Z" }, "papermill": { "duration": 0.009511, "end_time": "2024-09-06T18:35:18.685120", "exception": false, "start_time": "2024-09-06T18:35:18.675609", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "# define metrics to calculate the maximum on\n", "metrics = [\"time (exc)\", \"Machine clears\"]" ] }, { "cell_type": "code", "execution_count": 7, "id": "72b5d453", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:18.698674Z", "iopub.status.busy": "2024-09-06T18:35:18.698555Z", "iopub.status.idle": "2024-09-06T18:35:18.704784Z", "shell.execute_reply": "2024-09-06T18:35:18.704335Z" }, "papermill": { "duration": 0.014389, "end_time": "2024-09-06T18:35:18.705482", "exception": false, "start_time": "2024-09-06T18:35:18.691093", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
nametime (exc)_maxMachine clears_max
node
{'name': 'RAJAPerf', 'type': 'function'}RAJAPerf4.922397e+060.003932
{'name': 'Algorithm', 'type': 'function'}Algorithm5.576280e+050.019851
{'name': 'Algorithm_MEMCPY', 'type': 'function'}Algorithm_MEMCPY2.008037e+090.997907
{'name': 'Algorithm_MEMSET', 'type': 'function'}Algorithm_MEMSET2.036565e+090.997923
{'name': 'Algorithm_REDUCE_SUM', 'type': 'function'}Algorithm_REDUCE_SUM4.511030e+080.996756
\n", "
" ], "text/plain": [ " name \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} RAJAPerf \n", "{'name': 'Algorithm', 'type': 'function'} Algorithm \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} Algorithm_MEMCPY \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} Algorithm_MEMSET \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... Algorithm_REDUCE_SUM \n", "\n", " time (exc)_max \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.922397e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.576280e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.008037e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.036565e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.511030e+08 \n", "\n", " Machine clears_max \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.003932 \n", "{'name': 'Algorithm', 'type': 'function'} 0.019851 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.997907 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.997923 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.996756 " ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "th.stats.maximum(clang_th, columns=metrics)\n", "# view the first 5 entries of the aggregated statistics table\n", "clang_th.statsframe.dataframe.head(5)" ] }, { "cell_type": "markdown", "id": "8538da85", "metadata": { "papermill": { "duration": 0.006774, "end_time": "2024-09-06T18:35:18.719774", "exception": false, "start_time": "2024-09-06T18:35:18.713000", "status": "completed" }, "tags": [] }, "source": [ "**Multi-Indexed Thicket Example**\n", "\n", "Example demonstrates how to pass a columnar joined thicket object. When passing a columnar joined thicket object, the columns argument will now take a list of tuples. Each tuple will consist of two elements. The first element will always be the column index, and the second element will be an associated column under the column index you passed.
\n", "\n", " - Example: (column_index, column_name) -> (\"GCC\", \"Machine clears\")" ] }, { "cell_type": "code", "execution_count": 8, "id": "90f7e799", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:18.734681Z", "iopub.status.busy": "2024-09-06T18:35:18.734542Z", "iopub.status.idle": "2024-09-06T18:35:18.736774Z", "shell.execute_reply": "2024-09-06T18:35:18.736377Z" }, "papermill": { "duration": 0.010708, "end_time": "2024-09-06T18:35:18.737456", "exception": false, "start_time": "2024-09-06T18:35:18.726748", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "metrics = [(\"Clang\", \"time (exc)\"), (\"GCC\", \"Machine clears\")]" ] }, { "cell_type": "code", "execution_count": 9, "id": "7a1e0fb7", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:18.752040Z", "iopub.status.busy": "2024-09-06T18:35:18.751907Z", "iopub.status.idle": "2024-09-06T18:35:18.759858Z", "shell.execute_reply": "2024-09-06T18:35:18.759454Z" }, "papermill": { "duration": 0.016436, "end_time": "2024-09-06T18:35:18.760604", "exception": false, "start_time": "2024-09-06T18:35:18.744168", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ClangGCCname
time (exc)_maxMachine clears_max
node
{'name': 'RAJAPerf', 'type': 'function'}4.922397e+060.004523RAJAPerf
{'name': 'Algorithm', 'type': 'function'}5.576280e+050.014205Algorithm
{'name': 'Algorithm_MEMCPY', 'type': 'function'}2.008037e+090.992988Algorithm_MEMCPY
{'name': 'Algorithm_MEMSET', 'type': 'function'}2.036565e+090.997550Algorithm_MEMSET
{'name': 'Algorithm_REDUCE_SUM', 'type': 'function'}4.511030e+080.994624Algorithm_REDUCE_SUM
\n", "
" ], "text/plain": [ " Clang \\\n", " time (exc)_max \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.922397e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.576280e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.008037e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.036565e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.511030e+08 \n", "\n", " GCC \\\n", " Machine clears_max \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.004523 \n", "{'name': 'Algorithm', 'type': 'function'} 0.014205 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.992988 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.997550 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.994624 \n", "\n", " name \n", " \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} RAJAPerf \n", "{'name': 'Algorithm', 'type': 'function'} Algorithm \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} Algorithm_MEMCPY \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} Algorithm_MEMSET \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... Algorithm_REDUCE_SUM " ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "th.stats.maximum(combined_th, columns=metrics)\n", "combined_th.statsframe.dataframe.head(5)" ] }, { "cell_type": "markdown", "id": "b6e77f42", "metadata": { "papermill": { "duration": 0.00701, "end_time": "2024-09-06T18:35:18.774617", "exception": false, "start_time": "2024-09-06T18:35:18.767607", "status": "completed" }, "tags": [] }, "source": [ "### 5.2 Minimum\n", "\n", "The `minimum` function will determine the minimum value for each node in the performance data table. In other terms, the minimum is the lowest observation for a node and its associated profiles.
\n", "\n", "The minimum value will be appended to the aggregated statistics table and will be denoted with `_min` at the end of column name i.e. `column_min`." ] }, { "cell_type": "markdown", "id": "514a9554", "metadata": { "papermill": { "duration": 0.006628, "end_time": "2024-09-06T18:35:18.788165", "exception": false, "start_time": "2024-09-06T18:35:18.781537", "status": "completed" }, "tags": [] }, "source": [ "**Single Index Thicket Example**" ] }, { "cell_type": "code", "execution_count": 10, "id": "63b72829", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:18.803489Z", "iopub.status.busy": "2024-09-06T18:35:18.803357Z", "iopub.status.idle": "2024-09-06T18:35:18.805915Z", "shell.execute_reply": "2024-09-06T18:35:18.805322Z" }, "papermill": { "duration": 0.011035, "end_time": "2024-09-06T18:35:18.806722", "exception": false, "start_time": "2024-09-06T18:35:18.795687", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "metrics = [\"time (exc)\", \"Machine clears\"]" ] }, { "cell_type": "code", "execution_count": 11, "id": "c3184956", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:18.821146Z", "iopub.status.busy": "2024-09-06T18:35:18.821035Z", "iopub.status.idle": "2024-09-06T18:35:18.827638Z", "shell.execute_reply": "2024-09-06T18:35:18.827307Z" }, "papermill": { "duration": 0.014626, "end_time": "2024-09-06T18:35:18.828502", "exception": false, "start_time": "2024-09-06T18:35:18.813876", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
nametime (exc)_maxMachine clears_maxtime (exc)_minMachine clears_min
node
{'name': 'RAJAPerf', 'type': 'function'}RAJAPerf4.922397e+060.0039324.696939e+060.001099
{'name': 'Algorithm', 'type': 'function'}Algorithm5.576280e+050.0198515.176070e+050.000000
{'name': 'Algorithm_MEMCPY', 'type': 'function'}Algorithm_MEMCPY2.008037e+090.9979071.982438e+090.990401
{'name': 'Algorithm_MEMSET', 'type': 'function'}Algorithm_MEMSET2.036565e+090.9979232.006252e+090.988505
{'name': 'Algorithm_REDUCE_SUM', 'type': 'function'}Algorithm_REDUCE_SUM4.511030e+080.9967564.467119e+080.954967
\n", "
" ], "text/plain": [ " name \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} RAJAPerf \n", "{'name': 'Algorithm', 'type': 'function'} Algorithm \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} Algorithm_MEMCPY \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} Algorithm_MEMSET \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... Algorithm_REDUCE_SUM \n", "\n", " time (exc)_max \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.922397e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.576280e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.008037e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.036565e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.511030e+08 \n", "\n", " Machine clears_max \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.003932 \n", "{'name': 'Algorithm', 'type': 'function'} 0.019851 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.997907 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.997923 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.996756 \n", "\n", " time (exc)_min \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.696939e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.176070e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.982438e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.006252e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.467119e+08 \n", "\n", " Machine clears_min \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.001099 \n", "{'name': 'Algorithm', 'type': 'function'} 0.000000 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.990401 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.988505 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.954967 " ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "th.stats.minimum(clang_th, columns=metrics)\n", "clang_th.statsframe.dataframe.head(5)" ] }, { "cell_type": "markdown", "id": "2bf1fd03", "metadata": { "papermill": { "duration": 0.007155, "end_time": "2024-09-06T18:35:18.843168", "exception": false, "start_time": "2024-09-06T18:35:18.836013", "status": "completed" }, "tags": [] }, "source": [ "**Multi-Indexed Thicket Example**\n", "\n", "Example will show how to pass a columnar joined thicket object. When passing a columnar joined thicket object, the columns argument will now take a list of tuples. Each tuple will consist of two elements. The first element will always be the column index, and the second element will be an associated column under the column index you passed.
\n", "\n", " - Example: (column_index, column_name) -> (\"GCC\", \"Machine clears\")" ] }, { "cell_type": "code", "execution_count": 12, "id": "07168bd4", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:18.858078Z", "iopub.status.busy": "2024-09-06T18:35:18.857953Z", "iopub.status.idle": "2024-09-06T18:35:18.860764Z", "shell.execute_reply": "2024-09-06T18:35:18.860294Z" }, "papermill": { "duration": 0.011028, "end_time": "2024-09-06T18:35:18.861441", "exception": false, "start_time": "2024-09-06T18:35:18.850413", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "metrics = [(\"Clang\", \"time (exc)\"), (\"GCC\", \"Machine clears\")]" ] }, { "cell_type": "code", "execution_count": 13, "id": "2ad5985d", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:18.876878Z", "iopub.status.busy": "2024-09-06T18:35:18.876758Z", "iopub.status.idle": "2024-09-06T18:35:18.885687Z", "shell.execute_reply": "2024-09-06T18:35:18.885285Z" }, "papermill": { "duration": 0.01795, "end_time": "2024-09-06T18:35:18.886675", "exception": false, "start_time": "2024-09-06T18:35:18.868725", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ClangGCCname
time (exc)_maxtime (exc)_minMachine clears_maxMachine clears_min
node
{'name': 'RAJAPerf', 'type': 'function'}4.922397e+064.696939e+060.0045230.001071RAJAPerf
{'name': 'Algorithm', 'type': 'function'}5.576280e+055.176070e+050.0142050.000000Algorithm
{'name': 'Algorithm_MEMCPY', 'type': 'function'}2.008037e+091.982438e+090.9929880.956393Algorithm_MEMCPY
{'name': 'Algorithm_MEMSET', 'type': 'function'}2.036565e+092.006252e+090.9975500.980433Algorithm_MEMSET
{'name': 'Algorithm_REDUCE_SUM', 'type': 'function'}4.511030e+084.467119e+080.9946240.770469Algorithm_REDUCE_SUM
\n", "
" ], "text/plain": [ " Clang \\\n", " time (exc)_max \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.922397e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.576280e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.008037e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.036565e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.511030e+08 \n", "\n", " \\\n", " time (exc)_min \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.696939e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.176070e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.982438e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.006252e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.467119e+08 \n", "\n", " GCC \\\n", " Machine clears_max \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.004523 \n", "{'name': 'Algorithm', 'type': 'function'} 0.014205 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.992988 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.997550 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.994624 \n", "\n", " \\\n", " Machine clears_min \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.001071 \n", "{'name': 'Algorithm', 'type': 'function'} 0.000000 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.956393 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.980433 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.770469 \n", "\n", " name \n", " \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} RAJAPerf \n", "{'name': 'Algorithm', 'type': 'function'} Algorithm \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} Algorithm_MEMCPY \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} Algorithm_MEMSET \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... Algorithm_REDUCE_SUM " ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "th.stats.minimum(combined_th, columns=metrics)\n", "combined_th.statsframe.dataframe.head(5)" ] }, { "cell_type": "markdown", "id": "164d7769", "metadata": { "papermill": { "duration": 0.00798, "end_time": "2024-09-06T18:35:18.902358", "exception": false, "start_time": "2024-09-06T18:35:18.894378", "status": "completed" }, "tags": [] }, "source": [ "### 5.3 Median\n", "\n", "The `median` function will determine the median for each node in the performance data table.
\n", "\n", "The median value will be appended to the aggregated statistics table and will be denoted with `_median` at the end of column name i.e. `column_median`." ] }, { "cell_type": "markdown", "id": "ac3ace3d", "metadata": { "papermill": { "duration": 0.007372, "end_time": "2024-09-06T18:35:18.917324", "exception": false, "start_time": "2024-09-06T18:35:18.909952", "status": "completed" }, "tags": [] }, "source": [ "**Single Index Thicket Example**" ] }, { "cell_type": "code", "execution_count": 14, "id": "d77c4e73", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:18.933445Z", "iopub.status.busy": "2024-09-06T18:35:18.933305Z", "iopub.status.idle": "2024-09-06T18:35:18.935934Z", "shell.execute_reply": "2024-09-06T18:35:18.935296Z" }, "papermill": { "duration": 0.011657, "end_time": "2024-09-06T18:35:18.936630", "exception": false, "start_time": "2024-09-06T18:35:18.924973", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "metrics = [\"time (exc)\", \"Machine clears\"]" ] }, { "cell_type": "code", "execution_count": 15, "id": "ab9a8a66", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:18.952728Z", "iopub.status.busy": "2024-09-06T18:35:18.952611Z", "iopub.status.idle": "2024-09-06T18:35:18.960668Z", "shell.execute_reply": "2024-09-06T18:35:18.960318Z" }, "papermill": { "duration": 0.017029, "end_time": "2024-09-06T18:35:18.961397", "exception": false, "start_time": "2024-09-06T18:35:18.944368", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
nametime (exc)_maxMachine clears_maxtime (exc)_minMachine clears_mintime (exc)_medianMachine clears_median
node
{'name': 'RAJAPerf', 'type': 'function'}RAJAPerf4.922397e+060.0039324.696939e+060.0010994.792514e+060.002209
{'name': 'Algorithm', 'type': 'function'}Algorithm5.576280e+050.0198515.176070e+050.0000005.386245e+050.004722
{'name': 'Algorithm_MEMCPY', 'type': 'function'}Algorithm_MEMCPY2.008037e+090.9979071.982438e+090.9904012.001818e+090.996143
{'name': 'Algorithm_MEMSET', 'type': 'function'}Algorithm_MEMSET2.036565e+090.9979232.006252e+090.9885052.018832e+090.993871
{'name': 'Algorithm_REDUCE_SUM', 'type': 'function'}Algorithm_REDUCE_SUM4.511030e+080.9967564.467119e+080.9549674.498193e+080.990938
\n", "
" ], "text/plain": [ " name \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} RAJAPerf \n", "{'name': 'Algorithm', 'type': 'function'} Algorithm \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} Algorithm_MEMCPY \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} Algorithm_MEMSET \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... Algorithm_REDUCE_SUM \n", "\n", " time (exc)_max \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.922397e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.576280e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.008037e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.036565e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.511030e+08 \n", "\n", " Machine clears_max \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.003932 \n", "{'name': 'Algorithm', 'type': 'function'} 0.019851 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.997907 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.997923 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.996756 \n", "\n", " time (exc)_min \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.696939e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.176070e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.982438e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.006252e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.467119e+08 \n", "\n", " Machine clears_min \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.001099 \n", "{'name': 'Algorithm', 'type': 'function'} 0.000000 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.990401 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.988505 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.954967 \n", "\n", " time (exc)_median \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.792514e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.386245e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.001818e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.018832e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.498193e+08 \n", "\n", " Machine clears_median \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.002209 \n", "{'name': 'Algorithm', 'type': 'function'} 0.004722 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.996143 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.993871 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.990938 " ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "th.stats.median(clang_th, columns=metrics)\n", "clang_th.statsframe.dataframe.head(5)" ] }, { "cell_type": "markdown", "id": "2ae0b6f8", "metadata": { "papermill": { "duration": 0.007488, "end_time": "2024-09-06T18:35:18.976786", "exception": false, "start_time": "2024-09-06T18:35:18.969298", "status": "completed" }, "tags": [] }, "source": [ "**Multi-Indexed Thicket Example**\n", "\n", "Example will show how to pass a columnar joined thicket object. When passing a columnar joined thicket object, the columns argument will now take a list of tuples. Each tuple will consist of two elements. The first element will always be the column index, and the second element will be an associated column under the column index you passed.
\n", "\n", " - Example: (column_index, column_name) -> (\"GCC\", \"Machine clears\") " ] }, { "cell_type": "code", "execution_count": 16, "id": "107d8d80", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:18.993425Z", "iopub.status.busy": "2024-09-06T18:35:18.993275Z", "iopub.status.idle": "2024-09-06T18:35:18.995788Z", "shell.execute_reply": "2024-09-06T18:35:18.995340Z" }, "papermill": { "duration": 0.012167, "end_time": "2024-09-06T18:35:18.996606", "exception": false, "start_time": "2024-09-06T18:35:18.984439", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "metrics = [(\"Clang\", \"time (exc)\"), (\"GCC\", \"Machine clears\")]" ] }, { "cell_type": "code", "execution_count": 17, "id": "8ef12866", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:19.012321Z", "iopub.status.busy": "2024-09-06T18:35:19.012168Z", "iopub.status.idle": "2024-09-06T18:35:19.021818Z", "shell.execute_reply": "2024-09-06T18:35:19.021406Z" }, "papermill": { "duration": 0.018369, "end_time": "2024-09-06T18:35:19.022646", "exception": false, "start_time": "2024-09-06T18:35:19.004277", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ClangGCCname
time (exc)_maxtime (exc)_mediantime (exc)_minMachine clears_maxMachine clears_medianMachine clears_min
node
{'name': 'RAJAPerf', 'type': 'function'}4.922397e+064.792514e+064.696939e+060.0045230.0030610.001071RAJAPerf
{'name': 'Algorithm', 'type': 'function'}5.576280e+055.386245e+055.176070e+050.0142050.0048100.000000Algorithm
{'name': 'Algorithm_MEMCPY', 'type': 'function'}2.008037e+092.001818e+091.982438e+090.9929880.9843560.956393Algorithm_MEMCPY
{'name': 'Algorithm_MEMSET', 'type': 'function'}2.036565e+092.018832e+092.006252e+090.9975500.9914640.980433Algorithm_MEMSET
{'name': 'Algorithm_REDUCE_SUM', 'type': 'function'}4.511030e+084.498193e+084.467119e+080.9946240.9259870.770469Algorithm_REDUCE_SUM
\n", "
" ], "text/plain": [ " Clang \\\n", " time (exc)_max \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.922397e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.576280e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.008037e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.036565e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.511030e+08 \n", "\n", " \\\n", " time (exc)_median \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.792514e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.386245e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.001818e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.018832e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.498193e+08 \n", "\n", " \\\n", " time (exc)_min \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.696939e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.176070e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.982438e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.006252e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.467119e+08 \n", "\n", " GCC \\\n", " Machine clears_max \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.004523 \n", "{'name': 'Algorithm', 'type': 'function'} 0.014205 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.992988 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.997550 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.994624 \n", "\n", " \\\n", " Machine clears_median \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.003061 \n", "{'name': 'Algorithm', 'type': 'function'} 0.004810 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.984356 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.991464 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.925987 \n", "\n", " \\\n", " Machine clears_min \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.001071 \n", "{'name': 'Algorithm', 'type': 'function'} 0.000000 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.956393 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.980433 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.770469 \n", "\n", " name \n", " \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} RAJAPerf \n", "{'name': 'Algorithm', 'type': 'function'} Algorithm \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} Algorithm_MEMCPY \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} Algorithm_MEMSET \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... Algorithm_REDUCE_SUM " ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "th.stats.median(combined_th, columns=metrics)\n", "combined_th.statsframe.dataframe.head(5)" ] }, { "cell_type": "markdown", "id": "7445a168", "metadata": { "papermill": { "duration": 0.007803, "end_time": "2024-09-06T18:35:19.038100", "exception": false, "start_time": "2024-09-06T18:35:19.030297", "status": "completed" }, "tags": [] }, "source": [ "### 5.4 Mean\n", "\n", "The `mean` function will determine the mean for each node in the performance data table.
\n", "\n", "The mean value will be appended to the aggregated statistics table and will be denoted with `_mean` at the end of column name i.e. `column_mean`." ] }, { "cell_type": "markdown", "id": "3475ced2", "metadata": { "papermill": { "duration": 0.007625, "end_time": "2024-09-06T18:35:19.053772", "exception": false, "start_time": "2024-09-06T18:35:19.046147", "status": "completed" }, "tags": [] }, "source": [ "**Single Index Thicket Example**" ] }, { "cell_type": "code", "execution_count": 18, "id": "d20f8bfc", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:19.069483Z", "iopub.status.busy": "2024-09-06T18:35:19.069358Z", "iopub.status.idle": "2024-09-06T18:35:19.071777Z", "shell.execute_reply": "2024-09-06T18:35:19.071353Z" }, "papermill": { "duration": 0.011685, "end_time": "2024-09-06T18:35:19.072665", "exception": false, "start_time": "2024-09-06T18:35:19.060980", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "metrics = [\"time (exc)\", \"Machine clears\"]" ] }, { "cell_type": "code", "execution_count": 19, "id": "131e85ea", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:19.091109Z", "iopub.status.busy": "2024-09-06T18:35:19.090986Z", "iopub.status.idle": "2024-09-06T18:35:19.098962Z", "shell.execute_reply": "2024-09-06T18:35:19.098524Z" }, "papermill": { "duration": 0.019588, "end_time": "2024-09-06T18:35:19.099646", "exception": false, "start_time": "2024-09-06T18:35:19.080058", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
nametime (exc)_maxMachine clears_maxtime (exc)_minMachine clears_mintime (exc)_medianMachine clears_mediantime (exc)_meanMachine clears_mean
node
{'name': 'RAJAPerf', 'type': 'function'}RAJAPerf4.922397e+060.0039324.696939e+060.0010994.792514e+060.0022094.788171e+060.002266
{'name': 'Algorithm', 'type': 'function'}Algorithm5.576280e+050.0198515.176070e+050.0000005.386245e+050.0047225.383793e+050.007061
{'name': 'Algorithm_MEMCPY', 'type': 'function'}Algorithm_MEMCPY2.008037e+090.9979071.982438e+090.9904012.001818e+090.9961431.997560e+090.995425
{'name': 'Algorithm_MEMSET', 'type': 'function'}Algorithm_MEMSET2.036565e+090.9979232.006252e+090.9885052.018832e+090.9938712.020861e+090.993798
{'name': 'Algorithm_REDUCE_SUM', 'type': 'function'}Algorithm_REDUCE_SUM4.511030e+080.9967564.467119e+080.9549674.498193e+080.9909384.492754e+080.981222
\n", "
" ], "text/plain": [ " name \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} RAJAPerf \n", "{'name': 'Algorithm', 'type': 'function'} Algorithm \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} Algorithm_MEMCPY \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} Algorithm_MEMSET \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... Algorithm_REDUCE_SUM \n", "\n", " time (exc)_max \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.922397e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.576280e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.008037e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.036565e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.511030e+08 \n", "\n", " Machine clears_max \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.003932 \n", "{'name': 'Algorithm', 'type': 'function'} 0.019851 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.997907 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.997923 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.996756 \n", "\n", " time (exc)_min \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.696939e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.176070e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.982438e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.006252e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.467119e+08 \n", "\n", " Machine clears_min \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.001099 \n", "{'name': 'Algorithm', 'type': 'function'} 0.000000 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.990401 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.988505 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.954967 \n", "\n", " time (exc)_median \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.792514e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.386245e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.001818e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.018832e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.498193e+08 \n", "\n", " Machine clears_median \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.002209 \n", "{'name': 'Algorithm', 'type': 'function'} 0.004722 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.996143 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.993871 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.990938 \n", "\n", " time (exc)_mean \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.788171e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.383793e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.997560e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.020861e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.492754e+08 \n", "\n", " Machine clears_mean \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.002266 \n", "{'name': 'Algorithm', 'type': 'function'} 0.007061 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.995425 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.993798 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.981222 " ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "th.stats.mean(clang_th, columns=metrics)\n", "clang_th.statsframe.dataframe.head(5)" ] }, { "cell_type": "markdown", "id": "38e5d7e0", "metadata": { "papermill": { "duration": 0.007644, "end_time": "2024-09-06T18:35:19.115655", "exception": false, "start_time": "2024-09-06T18:35:19.108011", "status": "completed" }, "tags": [] }, "source": [ "**Multi-Indexed Thicket Example**\n", "\n", "Example will show how to pass a columnar joined thicket object. When passing a columnar joined thicket object, the columns argument will now take a list of tuples. Each tuple will consist of two elements. The first element will always be the column index, and the second element will be an associated column under the column index you passed.
\n", "\n", " - Example: (column_index, column_name) -> (\"GCC\", \"Machine clears\") " ] }, { "cell_type": "code", "execution_count": 20, "id": "3e067986", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:19.131180Z", "iopub.status.busy": "2024-09-06T18:35:19.131053Z", "iopub.status.idle": "2024-09-06T18:35:19.133859Z", "shell.execute_reply": "2024-09-06T18:35:19.133460Z" }, "papermill": { "duration": 0.011642, "end_time": "2024-09-06T18:35:19.134646", "exception": false, "start_time": "2024-09-06T18:35:19.123004", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "metrics = [(\"Clang\", \"time (exc)\"), (\"GCC\", \"Machine clears\")]" ] }, { "cell_type": "code", "execution_count": 21, "id": "ea3e8c66", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:19.150099Z", "iopub.status.busy": "2024-09-06T18:35:19.149970Z", "iopub.status.idle": "2024-09-06T18:35:19.159837Z", "shell.execute_reply": "2024-09-06T18:35:19.159444Z" }, "papermill": { "duration": 0.018413, "end_time": "2024-09-06T18:35:19.160521", "exception": false, "start_time": "2024-09-06T18:35:19.142108", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ClangGCCname
time (exc)_maxtime (exc)_meantime (exc)_mediantime (exc)_minMachine clears_maxMachine clears_meanMachine clears_medianMachine clears_min
node
{'name': 'RAJAPerf', 'type': 'function'}4.922397e+064.788171e+064.792514e+064.696939e+060.0045230.0028530.0030610.001071RAJAPerf
{'name': 'Algorithm', 'type': 'function'}5.576280e+055.383793e+055.386245e+055.176070e+050.0142050.0052490.0048100.000000Algorithm
{'name': 'Algorithm_MEMCPY', 'type': 'function'}2.008037e+091.997560e+092.001818e+091.982438e+090.9929880.9789260.9843560.956393Algorithm_MEMCPY
{'name': 'Algorithm_MEMSET', 'type': 'function'}2.036565e+092.020861e+092.018832e+092.006252e+090.9975500.9909340.9914640.980433Algorithm_MEMSET
{'name': 'Algorithm_REDUCE_SUM', 'type': 'function'}4.511030e+084.492754e+084.498193e+084.467119e+080.9946240.9228180.9259870.770469Algorithm_REDUCE_SUM
\n", "
" ], "text/plain": [ " Clang \\\n", " time (exc)_max \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.922397e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.576280e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.008037e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.036565e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.511030e+08 \n", "\n", " \\\n", " time (exc)_mean \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.788171e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.383793e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.997560e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.020861e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.492754e+08 \n", "\n", " \\\n", " time (exc)_median \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.792514e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.386245e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.001818e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.018832e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.498193e+08 \n", "\n", " \\\n", " time (exc)_min \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.696939e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.176070e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.982438e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.006252e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.467119e+08 \n", "\n", " GCC \\\n", " Machine clears_max \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.004523 \n", "{'name': 'Algorithm', 'type': 'function'} 0.014205 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.992988 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.997550 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.994624 \n", "\n", " \\\n", " Machine clears_mean \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.002853 \n", "{'name': 'Algorithm', 'type': 'function'} 0.005249 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.978926 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.990934 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.922818 \n", "\n", " \\\n", " Machine clears_median \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.003061 \n", "{'name': 'Algorithm', 'type': 'function'} 0.004810 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.984356 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.991464 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.925987 \n", "\n", " \\\n", " Machine clears_min \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.001071 \n", "{'name': 'Algorithm', 'type': 'function'} 0.000000 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.956393 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.980433 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.770469 \n", "\n", " name \n", " \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} RAJAPerf \n", "{'name': 'Algorithm', 'type': 'function'} Algorithm \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} Algorithm_MEMCPY \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} Algorithm_MEMSET \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... Algorithm_REDUCE_SUM " ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "th.stats.mean(combined_th, columns=metrics)\n", "combined_th.statsframe.dataframe.head(5)" ] }, { "cell_type": "markdown", "id": "6728822e", "metadata": { "papermill": { "duration": 0.007731, "end_time": "2024-09-06T18:35:19.176145", "exception": false, "start_time": "2024-09-06T18:35:19.168414", "status": "completed" }, "tags": [] }, "source": [ "### 5.5 Variance\n", "\n", "The `variance` function will determine the variance for each node in the performance data table. Variance will allow a user to see the spread of tdata within a node and that nodes associated profiles.
\n", "\n", "The variance value will be appended to the aggregated statistics table and will be denoted with `_var` at the end of column name i.e. `column_var`." ] }, { "cell_type": "markdown", "id": "a29fdccf", "metadata": { "papermill": { "duration": 0.007601, "end_time": "2024-09-06T18:35:19.191733", "exception": false, "start_time": "2024-09-06T18:35:19.184132", "status": "completed" }, "tags": [] }, "source": [ "**Single Index Thicket Example**" ] }, { "cell_type": "code", "execution_count": 22, "id": "31126524", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:19.207990Z", "iopub.status.busy": "2024-09-06T18:35:19.207858Z", "iopub.status.idle": "2024-09-06T18:35:19.210931Z", "shell.execute_reply": "2024-09-06T18:35:19.210326Z" }, "papermill": { "duration": 0.011998, "end_time": "2024-09-06T18:35:19.211653", "exception": false, "start_time": "2024-09-06T18:35:19.199655", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "metrics = [\"time (exc)\", \"Machine clears\"]" ] }, { "cell_type": "code", "execution_count": 23, "id": "b48ae8c9", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:19.228192Z", "iopub.status.busy": "2024-09-06T18:35:19.228046Z", "iopub.status.idle": "2024-09-06T18:35:19.236672Z", "shell.execute_reply": "2024-09-06T18:35:19.236303Z" }, "papermill": { "duration": 0.017956, "end_time": "2024-09-06T18:35:19.237471", "exception": false, "start_time": "2024-09-06T18:35:19.219515", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
nametime (exc)_maxMachine clears_maxtime (exc)_minMachine clears_mintime (exc)_medianMachine clears_mediantime (exc)_meanMachine clears_meantime (exc)_varMachine clears_var
node
{'name': 'RAJAPerf', 'type': 'function'}RAJAPerf4.922397e+060.0039324.696939e+060.0010994.792514e+060.0022094.788171e+060.0022665.320529e+099.199162e-07
{'name': 'Algorithm', 'type': 'function'}Algorithm5.576280e+050.0198515.176070e+050.0000005.386245e+050.0047225.383793e+050.0070611.773236e+084.328011e-05
{'name': 'Algorithm_MEMCPY', 'type': 'function'}Algorithm_MEMCPY2.008037e+090.9979071.982438e+090.9904012.001818e+090.9961431.997560e+090.9954259.221915e+135.530862e-06
{'name': 'Algorithm_MEMSET', 'type': 'function'}Algorithm_MEMSET2.036565e+090.9979232.006252e+090.9885052.018832e+090.9938712.020861e+090.9937988.949541e+139.666489e-06
{'name': 'Algorithm_REDUCE_SUM', 'type': 'function'}Algorithm_REDUCE_SUM4.511030e+080.9967564.467119e+080.9549674.498193e+080.9909384.492754e+080.9812222.442450e+122.613859e-04
\n", "
" ], "text/plain": [ " name \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} RAJAPerf \n", "{'name': 'Algorithm', 'type': 'function'} Algorithm \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} Algorithm_MEMCPY \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} Algorithm_MEMSET \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... Algorithm_REDUCE_SUM \n", "\n", " time (exc)_max \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.922397e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.576280e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.008037e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.036565e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.511030e+08 \n", "\n", " Machine clears_max \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.003932 \n", "{'name': 'Algorithm', 'type': 'function'} 0.019851 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.997907 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.997923 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.996756 \n", "\n", " time (exc)_min \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.696939e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.176070e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.982438e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.006252e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.467119e+08 \n", "\n", " Machine clears_min \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.001099 \n", "{'name': 'Algorithm', 'type': 'function'} 0.000000 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.990401 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.988505 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.954967 \n", "\n", " time (exc)_median \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.792514e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.386245e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.001818e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.018832e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.498193e+08 \n", "\n", " Machine clears_median \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.002209 \n", "{'name': 'Algorithm', 'type': 'function'} 0.004722 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.996143 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.993871 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.990938 \n", "\n", " time (exc)_mean \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.788171e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.383793e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.997560e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.020861e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.492754e+08 \n", "\n", " Machine clears_mean \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.002266 \n", "{'name': 'Algorithm', 'type': 'function'} 0.007061 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.995425 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.993798 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.981222 \n", "\n", " time (exc)_var \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 5.320529e+09 \n", "{'name': 'Algorithm', 'type': 'function'} 1.773236e+08 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 9.221915e+13 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 8.949541e+13 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 2.442450e+12 \n", "\n", " Machine clears_var \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 9.199162e-07 \n", "{'name': 'Algorithm', 'type': 'function'} 4.328011e-05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 5.530862e-06 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 9.666489e-06 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 2.613859e-04 " ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "th.stats.variance(clang_th, columns=metrics)\n", "clang_th.statsframe.dataframe.head(5)" ] }, { "cell_type": "markdown", "id": "6abc05b1", "metadata": { "papermill": { "duration": 0.007843, "end_time": "2024-09-06T18:35:19.253480", "exception": false, "start_time": "2024-09-06T18:35:19.245637", "status": "completed" }, "tags": [] }, "source": [ "**Multi-Indexed Thicket Example**\n", "\n", "Example will show how to pass a columnar joined thicket object. When passing a columnar joined thicket object, the columns argument will now take a list of tuples. Each tuple will consist of two elements. The first element will always be the column index, and the second element will be an associated column under the column index you passed.
\n", "\n", " - Example: (column_index, column_name) -> (\"GCC\", \"Machine clears\") " ] }, { "cell_type": "code", "execution_count": 24, "id": "47db4ce6", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:19.270304Z", "iopub.status.busy": "2024-09-06T18:35:19.270160Z", "iopub.status.idle": "2024-09-06T18:35:19.272776Z", "shell.execute_reply": "2024-09-06T18:35:19.272365Z" }, "papermill": { "duration": 0.012271, "end_time": "2024-09-06T18:35:19.273566", "exception": false, "start_time": "2024-09-06T18:35:19.261295", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "metrics = [(\"Clang\", \"time (exc)\"), (\"GCC\", \"Machine clears\")]" ] }, { "cell_type": "code", "execution_count": 25, "id": "a50744d5", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:19.290428Z", "iopub.status.busy": "2024-09-06T18:35:19.290311Z", "iopub.status.idle": "2024-09-06T18:35:19.301740Z", "shell.execute_reply": "2024-09-06T18:35:19.301299Z" }, "papermill": { "duration": 0.020767, "end_time": "2024-09-06T18:35:19.302481", "exception": false, "start_time": "2024-09-06T18:35:19.281714", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ClangGCCname
time (exc)_maxtime (exc)_meantime (exc)_mediantime (exc)_mintime (exc)_varMachine clears_maxMachine clears_meanMachine clears_medianMachine clears_minMachine clears_var
node
{'name': 'RAJAPerf', 'type': 'function'}4.922397e+064.788171e+064.792514e+064.696939e+065.320529e+090.0045230.0028530.0030610.0010710.000001RAJAPerf
{'name': 'Algorithm', 'type': 'function'}5.576280e+055.383793e+055.386245e+055.176070e+051.773236e+080.0142050.0052490.0048100.0000000.000019Algorithm
{'name': 'Algorithm_MEMCPY', 'type': 'function'}2.008037e+091.997560e+092.001818e+091.982438e+099.221915e+130.9929880.9789260.9843560.9563930.000161Algorithm_MEMCPY
{'name': 'Algorithm_MEMSET', 'type': 'function'}2.036565e+092.020861e+092.018832e+092.006252e+098.949541e+130.9975500.9909340.9914640.9804330.000029Algorithm_MEMSET
{'name': 'Algorithm_REDUCE_SUM', 'type': 'function'}4.511030e+084.492754e+084.498193e+084.467119e+082.442450e+120.9946240.9228180.9259870.7704690.005237Algorithm_REDUCE_SUM
\n", "
" ], "text/plain": [ " Clang \\\n", " time (exc)_max \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.922397e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.576280e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.008037e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.036565e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.511030e+08 \n", "\n", " \\\n", " time (exc)_mean \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.788171e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.383793e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.997560e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.020861e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.492754e+08 \n", "\n", " \\\n", " time (exc)_median \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.792514e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.386245e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.001818e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.018832e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.498193e+08 \n", "\n", " \\\n", " time (exc)_min \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.696939e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.176070e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.982438e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.006252e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.467119e+08 \n", "\n", " \\\n", " time (exc)_var \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 5.320529e+09 \n", "{'name': 'Algorithm', 'type': 'function'} 1.773236e+08 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 9.221915e+13 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 8.949541e+13 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 2.442450e+12 \n", "\n", " GCC \\\n", " Machine clears_max \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.004523 \n", "{'name': 'Algorithm', 'type': 'function'} 0.014205 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.992988 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.997550 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.994624 \n", "\n", " \\\n", " Machine clears_mean \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.002853 \n", "{'name': 'Algorithm', 'type': 'function'} 0.005249 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.978926 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.990934 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.922818 \n", "\n", " \\\n", " Machine clears_median \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.003061 \n", "{'name': 'Algorithm', 'type': 'function'} 0.004810 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.984356 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.991464 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.925987 \n", "\n", " \\\n", " Machine clears_min \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.001071 \n", "{'name': 'Algorithm', 'type': 'function'} 0.000000 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.956393 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.980433 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.770469 \n", "\n", " \\\n", " Machine clears_var \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.000001 \n", "{'name': 'Algorithm', 'type': 'function'} 0.000019 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.000161 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.000029 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.005237 \n", "\n", " name \n", " \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} RAJAPerf \n", "{'name': 'Algorithm', 'type': 'function'} Algorithm \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} Algorithm_MEMCPY \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} Algorithm_MEMSET \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... Algorithm_REDUCE_SUM " ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "th.stats.variance(combined_th, columns=metrics)\n", "combined_th.statsframe.dataframe.head(5)" ] }, { "cell_type": "markdown", "id": "046c07fc", "metadata": { "papermill": { "duration": 0.008447, "end_time": "2024-09-06T18:35:19.319037", "exception": false, "start_time": "2024-09-06T18:35:19.310590", "status": "completed" }, "tags": [] }, "source": [ "### 5.6 Standard Deviation\n", "\n", "The `std` function will determine the standard deviation for each node in the performance data table. Standard deviation describes how dispersed the data is in relation to the mean.
\n", "\n", "The standard deviation value will be appended to the aggregated statistics table and will be denoted with `_std` at the end of column name i.e. `column_std`." ] }, { "cell_type": "markdown", "id": "d38d9667", "metadata": { "papermill": { "duration": 0.008022, "end_time": "2024-09-06T18:35:19.335078", "exception": false, "start_time": "2024-09-06T18:35:19.327056", "status": "completed" }, "tags": [] }, "source": [ "**Single Index Thicket Example**" ] }, { "cell_type": "code", "execution_count": 26, "id": "8313149b", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:19.352525Z", "iopub.status.busy": "2024-09-06T18:35:19.352398Z", "iopub.status.idle": "2024-09-06T18:35:19.354862Z", "shell.execute_reply": "2024-09-06T18:35:19.354418Z" }, "papermill": { "duration": 0.012499, "end_time": "2024-09-06T18:35:19.355752", "exception": false, "start_time": "2024-09-06T18:35:19.343253", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "metrics = [\"time (exc)\", \"Machine clears\"]" ] }, { "cell_type": "code", "execution_count": 27, "id": "38dd48da", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:19.372446Z", "iopub.status.busy": "2024-09-06T18:35:19.372322Z", "iopub.status.idle": "2024-09-06T18:35:19.380699Z", "shell.execute_reply": "2024-09-06T18:35:19.380309Z" }, "papermill": { "duration": 0.017466, "end_time": "2024-09-06T18:35:19.381280", "exception": false, "start_time": "2024-09-06T18:35:19.363814", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
nametime (exc)_maxMachine clears_maxtime (exc)_minMachine clears_mintime (exc)_medianMachine clears_mediantime (exc)_meanMachine clears_meantime (exc)_varMachine clears_vartime (exc)_stdMachine clears_std
node
{'name': 'RAJAPerf', 'type': 'function'}RAJAPerf4.922397e+060.0039324.696939e+060.0010994.792514e+060.0022094.788171e+060.0022665.320529e+099.199162e-077.294195e+040.000959
{'name': 'Algorithm', 'type': 'function'}Algorithm5.576280e+050.0198515.176070e+050.0000005.386245e+050.0047225.383793e+050.0070611.773236e+084.328011e-051.331629e+040.006579
{'name': 'Algorithm_MEMCPY', 'type': 'function'}Algorithm_MEMCPY2.008037e+090.9979071.982438e+090.9904012.001818e+090.9961431.997560e+090.9954259.221915e+135.530862e-069.603080e+060.002352
{'name': 'Algorithm_MEMSET', 'type': 'function'}Algorithm_MEMSET2.036565e+090.9979232.006252e+090.9885052.018832e+090.9938712.020861e+090.9937988.949541e+139.666489e-069.460201e+060.003109
{'name': 'Algorithm_REDUCE_SUM', 'type': 'function'}Algorithm_REDUCE_SUM4.511030e+080.9967564.467119e+080.9549674.498193e+080.9909384.492754e+080.9812222.442450e+122.613859e-041.562834e+060.016167
\n", "
" ], "text/plain": [ " name \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} RAJAPerf \n", "{'name': 'Algorithm', 'type': 'function'} Algorithm \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} Algorithm_MEMCPY \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} Algorithm_MEMSET \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... Algorithm_REDUCE_SUM \n", "\n", " time (exc)_max \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.922397e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.576280e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.008037e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.036565e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.511030e+08 \n", "\n", " Machine clears_max \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.003932 \n", "{'name': 'Algorithm', 'type': 'function'} 0.019851 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.997907 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.997923 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.996756 \n", "\n", " time (exc)_min \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.696939e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.176070e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.982438e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.006252e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.467119e+08 \n", "\n", " Machine clears_min \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.001099 \n", "{'name': 'Algorithm', 'type': 'function'} 0.000000 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.990401 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.988505 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.954967 \n", "\n", " time (exc)_median \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.792514e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.386245e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.001818e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.018832e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.498193e+08 \n", "\n", " Machine clears_median \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.002209 \n", "{'name': 'Algorithm', 'type': 'function'} 0.004722 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.996143 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.993871 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.990938 \n", "\n", " time (exc)_mean \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.788171e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.383793e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.997560e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.020861e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.492754e+08 \n", "\n", " Machine clears_mean \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.002266 \n", "{'name': 'Algorithm', 'type': 'function'} 0.007061 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.995425 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.993798 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.981222 \n", "\n", " time (exc)_var \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 5.320529e+09 \n", "{'name': 'Algorithm', 'type': 'function'} 1.773236e+08 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 9.221915e+13 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 8.949541e+13 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 2.442450e+12 \n", "\n", " Machine clears_var \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 9.199162e-07 \n", "{'name': 'Algorithm', 'type': 'function'} 4.328011e-05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 5.530862e-06 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 9.666489e-06 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 2.613859e-04 \n", "\n", " time (exc)_std \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 7.294195e+04 \n", "{'name': 'Algorithm', 'type': 'function'} 1.331629e+04 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 9.603080e+06 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 9.460201e+06 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 1.562834e+06 \n", "\n", " Machine clears_std \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.000959 \n", "{'name': 'Algorithm', 'type': 'function'} 0.006579 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.002352 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.003109 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.016167 " ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "th.stats.std(clang_th, columns=metrics)\n", "clang_th.statsframe.dataframe.head(5)" ] }, { "cell_type": "markdown", "id": "279b893a", "metadata": { "papermill": { "duration": 0.008624, "end_time": "2024-09-06T18:35:19.398734", "exception": false, "start_time": "2024-09-06T18:35:19.390110", "status": "completed" }, "tags": [] }, "source": [ "**Multi-Indexed Thicket Example**\n", "\n", "Example will show how to pass a columnar joined thicket object. When passing a columnar joined thicket object, the columns argument will now take a list of tuples. Each tuple will consist of two elements. The first element will always be the column index, and the second element will be an associated column under the column index you passed.
\n", "\n", " - Example: (column_index, column_name) -> (\"GCC\", \"Machine clears\") " ] }, { "cell_type": "code", "execution_count": 28, "id": "eac489b3", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:19.416646Z", "iopub.status.busy": "2024-09-06T18:35:19.416529Z", "iopub.status.idle": "2024-09-06T18:35:19.418876Z", "shell.execute_reply": "2024-09-06T18:35:19.418342Z" }, "papermill": { "duration": 0.012016, "end_time": "2024-09-06T18:35:19.419541", "exception": false, "start_time": "2024-09-06T18:35:19.407525", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "metrics = [(\"Clang\", \"time (exc)\"), (\"GCC\", \"Machine clears\")]" ] }, { "cell_type": "code", "execution_count": 29, "id": "c81c22f5", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:19.437523Z", "iopub.status.busy": "2024-09-06T18:35:19.437404Z", "iopub.status.idle": "2024-09-06T18:35:19.447688Z", "shell.execute_reply": "2024-09-06T18:35:19.447315Z" }, "papermill": { "duration": 0.020513, "end_time": "2024-09-06T18:35:19.448447", "exception": false, "start_time": "2024-09-06T18:35:19.427934", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ClangGCCname
time (exc)_maxtime (exc)_meantime (exc)_mediantime (exc)_mintime (exc)_stdtime (exc)_varMachine clears_maxMachine clears_meanMachine clears_medianMachine clears_minMachine clears_stdMachine clears_var
node
{'name': 'RAJAPerf', 'type': 'function'}4.922397e+064.788171e+064.792514e+064.696939e+067.294195e+045.320529e+090.0045230.0028530.0030610.0010710.0011550.000001RAJAPerf
{'name': 'Algorithm', 'type': 'function'}5.576280e+055.383793e+055.386245e+055.176070e+051.331629e+041.773236e+080.0142050.0052490.0048100.0000000.0044140.000019Algorithm
{'name': 'Algorithm_MEMCPY', 'type': 'function'}2.008037e+091.997560e+092.001818e+091.982438e+099.603080e+069.221915e+130.9929880.9789260.9843560.9563930.0126910.000161Algorithm_MEMCPY
{'name': 'Algorithm_MEMSET', 'type': 'function'}2.036565e+092.020861e+092.018832e+092.006252e+099.460201e+068.949541e+130.9975500.9909340.9914640.9804330.0054030.000029Algorithm_MEMSET
{'name': 'Algorithm_REDUCE_SUM', 'type': 'function'}4.511030e+084.492754e+084.498193e+084.467119e+081.562834e+062.442450e+120.9946240.9228180.9259870.7704690.0723690.005237Algorithm_REDUCE_SUM
\n", "
" ], "text/plain": [ " Clang \\\n", " time (exc)_max \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.922397e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.576280e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.008037e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.036565e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.511030e+08 \n", "\n", " \\\n", " time (exc)_mean \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.788171e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.383793e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.997560e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.020861e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.492754e+08 \n", "\n", " \\\n", " time (exc)_median \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.792514e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.386245e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.001818e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.018832e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.498193e+08 \n", "\n", " \\\n", " time (exc)_min \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.696939e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.176070e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.982438e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.006252e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.467119e+08 \n", "\n", " \\\n", " time (exc)_std \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 7.294195e+04 \n", "{'name': 'Algorithm', 'type': 'function'} 1.331629e+04 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 9.603080e+06 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 9.460201e+06 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 1.562834e+06 \n", "\n", " \\\n", " time (exc)_var \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 5.320529e+09 \n", "{'name': 'Algorithm', 'type': 'function'} 1.773236e+08 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 9.221915e+13 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 8.949541e+13 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 2.442450e+12 \n", "\n", " GCC \\\n", " Machine clears_max \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.004523 \n", "{'name': 'Algorithm', 'type': 'function'} 0.014205 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.992988 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.997550 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.994624 \n", "\n", " \\\n", " Machine clears_mean \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.002853 \n", "{'name': 'Algorithm', 'type': 'function'} 0.005249 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.978926 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.990934 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.922818 \n", "\n", " \\\n", " Machine clears_median \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.003061 \n", "{'name': 'Algorithm', 'type': 'function'} 0.004810 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.984356 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.991464 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.925987 \n", "\n", " \\\n", " Machine clears_min \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.001071 \n", "{'name': 'Algorithm', 'type': 'function'} 0.000000 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.956393 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.980433 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.770469 \n", "\n", " \\\n", " Machine clears_std \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.001155 \n", "{'name': 'Algorithm', 'type': 'function'} 0.004414 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.012691 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.005403 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.072369 \n", "\n", " \\\n", " Machine clears_var \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.000001 \n", "{'name': 'Algorithm', 'type': 'function'} 0.000019 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.000161 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.000029 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.005237 \n", "\n", " name \n", " \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} RAJAPerf \n", "{'name': 'Algorithm', 'type': 'function'} Algorithm \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} Algorithm_MEMCPY \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} Algorithm_MEMSET \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... Algorithm_REDUCE_SUM " ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "th.stats.std(combined_th, columns=metrics)\n", "combined_th.statsframe.dataframe.head(5)" ] }, { "cell_type": "markdown", "id": "7be8def4", "metadata": { "papermill": { "duration": 0.00814, "end_time": "2024-09-06T18:35:19.465409", "exception": false, "start_time": "2024-09-06T18:35:19.457269", "status": "completed" }, "tags": [] }, "source": [ "### 5.7 Percentiles\n", "\n", "The `percentiles` function will determine the q-th percentiles for each node in the performance data table.
\n", "\n", " - The 25th percentile is the lower quartile, and is the value at which 25% of the answers lie below that value.\n", " - The 50th percentile is the median and half othe values lie below the median and half lie above the median.\n", " - The 75th percentile is the upper quartiles, and is the value at which 25% of the answers lie above that value and 75% of the answer lie below that value.\n", "\n", "The calculated percentiles will be appended to the aggregated statistics table and will be denoted with `_percentiles` at the end of column name i.e. `column_percentiles`." ] }, { "cell_type": "markdown", "id": "847f2044", "metadata": { "papermill": { "duration": 0.008409, "end_time": "2024-09-06T18:35:19.482017", "exception": false, "start_time": "2024-09-06T18:35:19.473608", "status": "completed" }, "tags": [] }, "source": [ "**Single Index Thicket Example**" ] }, { "cell_type": "code", "execution_count": 30, "id": "8c376619", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:19.500681Z", "iopub.status.busy": "2024-09-06T18:35:19.500558Z", "iopub.status.idle": "2024-09-06T18:35:19.502706Z", "shell.execute_reply": "2024-09-06T18:35:19.502299Z" }, "papermill": { "duration": 0.01222, "end_time": "2024-09-06T18:35:19.503412", "exception": false, "start_time": "2024-09-06T18:35:19.491192", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "metrics = [\"time (exc)\", \"Machine clears\"]" ] }, { "cell_type": "code", "execution_count": 31, "id": "b5f63443", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:19.520544Z", "iopub.status.busy": "2024-09-06T18:35:19.520433Z", "iopub.status.idle": "2024-09-06T18:35:19.541724Z", "shell.execute_reply": "2024-09-06T18:35:19.541296Z" }, "papermill": { "duration": 0.030596, "end_time": "2024-09-06T18:35:19.542510", "exception": false, "start_time": "2024-09-06T18:35:19.511914", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
nametime (exc)_maxMachine clears_maxtime (exc)_minMachine clears_mintime (exc)_medianMachine clears_mediantime (exc)_meanMachine clears_meantime (exc)_varMachine clears_vartime (exc)_stdMachine clears_stdtime (exc)_percentiles_25time (exc)_percentiles_50time (exc)_percentiles_75Machine clears_percentiles_25Machine clears_percentiles_50Machine clears_percentiles_75
node
{'name': 'RAJAPerf', 'type': 'function'}RAJAPerf4.922397e+060.0039324.696939e+060.0010994.792514e+060.0022094.788171e+060.0022665.320529e+099.199162e-077.294195e+040.0009594.723135e+064.792514e+064.834294e+060.0015740.0022090.002657
{'name': 'Algorithm', 'type': 'function'}Algorithm5.576280e+050.0198515.176070e+050.0000005.386245e+050.0047225.383793e+050.0070611.773236e+084.328011e-051.331629e+040.0065795.331202e+055.386245e+055.451535e+050.0025010.0047220.008782
{'name': 'Algorithm_MEMCPY', 'type': 'function'}Algorithm_MEMCPY2.008037e+090.9979071.982438e+090.9904012.001818e+090.9961431.997560e+090.9954259.221915e+135.530862e-069.603080e+060.0023521.988998e+092.001818e+092.004878e+090.9940800.9961430.997084
{'name': 'Algorithm_MEMSET', 'type': 'function'}Algorithm_MEMSET2.036565e+090.9979232.006252e+090.9885052.018832e+090.9938712.020861e+090.9937988.949541e+139.666489e-069.460201e+060.0031092.014797e+092.018832e+092.027421e+090.9913370.9938710.995980
{'name': 'Algorithm_REDUCE_SUM', 'type': 'function'}Algorithm_REDUCE_SUM4.511030e+080.9967564.467119e+080.9549674.498193e+080.9909384.492754e+080.9812222.442450e+122.613859e-041.562834e+060.0161674.480209e+084.498193e+084.503918e+080.9703820.9909380.993326
\n", "
" ], "text/plain": [ " name \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} RAJAPerf \n", "{'name': 'Algorithm', 'type': 'function'} Algorithm \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} Algorithm_MEMCPY \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} Algorithm_MEMSET \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... Algorithm_REDUCE_SUM \n", "\n", " time (exc)_max \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.922397e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.576280e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.008037e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.036565e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.511030e+08 \n", "\n", " Machine clears_max \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.003932 \n", "{'name': 'Algorithm', 'type': 'function'} 0.019851 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.997907 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.997923 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.996756 \n", "\n", " time (exc)_min \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.696939e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.176070e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.982438e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.006252e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.467119e+08 \n", "\n", " Machine clears_min \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.001099 \n", "{'name': 'Algorithm', 'type': 'function'} 0.000000 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.990401 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.988505 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.954967 \n", "\n", " time (exc)_median \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.792514e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.386245e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.001818e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.018832e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.498193e+08 \n", "\n", " Machine clears_median \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.002209 \n", "{'name': 'Algorithm', 'type': 'function'} 0.004722 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.996143 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.993871 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.990938 \n", "\n", " time (exc)_mean \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.788171e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.383793e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.997560e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.020861e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.492754e+08 \n", "\n", " Machine clears_mean \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.002266 \n", "{'name': 'Algorithm', 'type': 'function'} 0.007061 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.995425 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.993798 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.981222 \n", "\n", " time (exc)_var \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 5.320529e+09 \n", "{'name': 'Algorithm', 'type': 'function'} 1.773236e+08 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 9.221915e+13 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 8.949541e+13 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 2.442450e+12 \n", "\n", " Machine clears_var \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 9.199162e-07 \n", "{'name': 'Algorithm', 'type': 'function'} 4.328011e-05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 5.530862e-06 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 9.666489e-06 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 2.613859e-04 \n", "\n", " time (exc)_std \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 7.294195e+04 \n", "{'name': 'Algorithm', 'type': 'function'} 1.331629e+04 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 9.603080e+06 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 9.460201e+06 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 1.562834e+06 \n", "\n", " Machine clears_std \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.000959 \n", "{'name': 'Algorithm', 'type': 'function'} 0.006579 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.002352 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.003109 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.016167 \n", "\n", " time (exc)_percentiles_25 \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.723135e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.331202e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.988998e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.014797e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.480209e+08 \n", "\n", " time (exc)_percentiles_50 \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.792514e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.386245e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.001818e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.018832e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.498193e+08 \n", "\n", " time (exc)_percentiles_75 \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.834294e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.451535e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.004878e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.027421e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.503918e+08 \n", "\n", " Machine clears_percentiles_25 \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.001574 \n", "{'name': 'Algorithm', 'type': 'function'} 0.002501 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.994080 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.991337 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.970382 \n", "\n", " Machine clears_percentiles_50 \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.002209 \n", "{'name': 'Algorithm', 'type': 'function'} 0.004722 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.996143 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.993871 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.990938 \n", "\n", " Machine clears_percentiles_75 \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.002657 \n", "{'name': 'Algorithm', 'type': 'function'} 0.008782 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.997084 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.995980 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.993326 " ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "th.stats.percentiles(clang_th, columns=metrics)\n", "clang_th.statsframe.dataframe.head(5)" ] }, { "cell_type": "markdown", "id": "ca5a832d", "metadata": { "papermill": { "duration": 0.008429, "end_time": "2024-09-06T18:35:19.559541", "exception": false, "start_time": "2024-09-06T18:35:19.551112", "status": "completed" }, "tags": [] }, "source": [ "**Multi-Indexed Thicket Example**\n", "Example will show how to pass a columnar joined thicket object. When passing a columnar joined thicket object, the columns argument will now take a list of tuples. Each tuple will consist of two elements. The first element will always be the column index, and the second element will be an associated column under the column index you passed.
\n", "\n", " - Example: (column_index, column_name) -> (\"GCC\", \"Machine clears\")" ] }, { "cell_type": "code", "execution_count": 32, "id": "cd3bef9b", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:19.577306Z", "iopub.status.busy": "2024-09-06T18:35:19.577171Z", "iopub.status.idle": "2024-09-06T18:35:19.579773Z", "shell.execute_reply": "2024-09-06T18:35:19.579355Z" }, "papermill": { "duration": 0.012894, "end_time": "2024-09-06T18:35:19.580845", "exception": false, "start_time": "2024-09-06T18:35:19.567951", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "metrics = [(\"Clang\", \"time (exc)\"), (\"GCC\", \"Machine clears\")]" ] }, { "cell_type": "code", "execution_count": 33, "id": "36429124", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:19.598853Z", "iopub.status.busy": "2024-09-06T18:35:19.598755Z", "iopub.status.idle": "2024-09-06T18:35:19.627032Z", "shell.execute_reply": "2024-09-06T18:35:19.626489Z" }, "papermill": { "duration": 0.038192, "end_time": "2024-09-06T18:35:19.628049", "exception": false, "start_time": "2024-09-06T18:35:19.589857", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ClangGCCname
time (exc)_maxtime (exc)_meantime (exc)_mediantime (exc)_mintime (exc)_percentiles_25time (exc)_percentiles_50time (exc)_percentiles_75time (exc)_stdtime (exc)_varMachine clears_maxMachine clears_meanMachine clears_medianMachine clears_minMachine clears_percentiles_25Machine clears_percentiles_50Machine clears_percentiles_75Machine clears_stdMachine clears_var
node
{'name': 'RAJAPerf', 'type': 'function'}4.922397e+064.788171e+064.792514e+064.696939e+064.723135e+064.792514e+064.834294e+067.294195e+045.320529e+090.0045230.0028530.0030610.0010710.0018990.0030610.0036120.0011550.000001RAJAPerf
{'name': 'Algorithm', 'type': 'function'}5.576280e+055.383793e+055.386245e+055.176070e+055.331202e+055.386245e+055.451535e+051.331629e+041.773236e+080.0142050.0052490.0048100.0000000.0024460.0048100.0064310.0044140.000019Algorithm
{'name': 'Algorithm_MEMCPY', 'type': 'function'}2.008037e+091.997560e+092.001818e+091.982438e+091.988998e+092.001818e+092.004878e+099.603080e+069.221915e+130.9929880.9789260.9843560.9563930.9683370.9843560.9885770.0126910.000161Algorithm_MEMCPY
{'name': 'Algorithm_MEMSET', 'type': 'function'}2.036565e+092.020861e+092.018832e+092.006252e+092.014797e+092.018832e+092.027421e+099.460201e+068.949541e+130.9975500.9909340.9914640.9804330.9889790.9914640.9943080.0054030.000029Algorithm_MEMSET
{'name': 'Algorithm_REDUCE_SUM', 'type': 'function'}4.511030e+084.492754e+084.498193e+084.467119e+084.480209e+084.498193e+084.503918e+081.562834e+062.442450e+120.9946240.9228180.9259870.7704690.8846210.9259870.9876350.0723690.005237Algorithm_REDUCE_SUM
\n", "
" ], "text/plain": [ " Clang \\\n", " time (exc)_max \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.922397e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.576280e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.008037e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.036565e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.511030e+08 \n", "\n", " \\\n", " time (exc)_mean \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.788171e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.383793e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.997560e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.020861e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.492754e+08 \n", "\n", " \\\n", " time (exc)_median \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.792514e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.386245e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.001818e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.018832e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.498193e+08 \n", "\n", " \\\n", " time (exc)_min \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.696939e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.176070e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.982438e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.006252e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.467119e+08 \n", "\n", " \\\n", " time (exc)_percentiles_25 \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.723135e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.331202e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.988998e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.014797e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.480209e+08 \n", "\n", " \\\n", " time (exc)_percentiles_50 \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.792514e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.386245e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.001818e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.018832e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.498193e+08 \n", "\n", " \\\n", " time (exc)_percentiles_75 \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.834294e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.451535e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.004878e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.027421e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.503918e+08 \n", "\n", " \\\n", " time (exc)_std \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 7.294195e+04 \n", "{'name': 'Algorithm', 'type': 'function'} 1.331629e+04 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 9.603080e+06 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 9.460201e+06 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 1.562834e+06 \n", "\n", " \\\n", " time (exc)_var \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 5.320529e+09 \n", "{'name': 'Algorithm', 'type': 'function'} 1.773236e+08 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 9.221915e+13 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 8.949541e+13 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 2.442450e+12 \n", "\n", " GCC \\\n", " Machine clears_max \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.004523 \n", "{'name': 'Algorithm', 'type': 'function'} 0.014205 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.992988 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.997550 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.994624 \n", "\n", " \\\n", " Machine clears_mean \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.002853 \n", "{'name': 'Algorithm', 'type': 'function'} 0.005249 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.978926 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.990934 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.922818 \n", "\n", " \\\n", " Machine clears_median \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.003061 \n", "{'name': 'Algorithm', 'type': 'function'} 0.004810 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.984356 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.991464 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.925987 \n", "\n", " \\\n", " Machine clears_min \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.001071 \n", "{'name': 'Algorithm', 'type': 'function'} 0.000000 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.956393 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.980433 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.770469 \n", "\n", " \\\n", " Machine clears_percentiles_25 \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.001899 \n", "{'name': 'Algorithm', 'type': 'function'} 0.002446 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.968337 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.988979 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.884621 \n", "\n", " \\\n", " Machine clears_percentiles_50 \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.003061 \n", "{'name': 'Algorithm', 'type': 'function'} 0.004810 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.984356 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.991464 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.925987 \n", "\n", " \\\n", " Machine clears_percentiles_75 \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.003612 \n", "{'name': 'Algorithm', 'type': 'function'} 0.006431 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.988577 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.994308 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.987635 \n", "\n", " \\\n", " Machine clears_std \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.001155 \n", "{'name': 'Algorithm', 'type': 'function'} 0.004414 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.012691 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.005403 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.072369 \n", "\n", " \\\n", " Machine clears_var \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.000001 \n", "{'name': 'Algorithm', 'type': 'function'} 0.000019 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.000161 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.000029 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.005237 \n", "\n", " name \n", " \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} RAJAPerf \n", "{'name': 'Algorithm', 'type': 'function'} Algorithm \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} Algorithm_MEMCPY \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} Algorithm_MEMSET \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... Algorithm_REDUCE_SUM " ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "th.stats.percentiles(combined_th, columns=metrics)\n", "combined_th.statsframe.dataframe.head(5)" ] }, { "cell_type": "markdown", "id": "98e93d70", "metadata": { "papermill": { "duration": 0.008759, "end_time": "2024-09-06T18:35:19.646277", "exception": false, "start_time": "2024-09-06T18:35:19.637518", "status": "completed" }, "tags": [] }, "source": [ "### 5.8 Check Normality\n", "\n", "The `check_normality` function will determine if the data is normal or non-normal for each node in the performance data table. For this test, the more data the better. Perferably you would want to have 20 data points (20 files) in a dataset to have an accurate result.
\n", "\n", "A `True` boolean will be appended to the aggregated statistics table if the data is normal and a `False` boolean will be appended to the aggregated statistics table if the data is non-normal. The appended column will be denoted with `_normality` at the end of column name i.e. `column_normality`." ] }, { "cell_type": "markdown", "id": "7edc2b52", "metadata": { "papermill": { "duration": 0.00911, "end_time": "2024-09-06T18:35:19.663980", "exception": false, "start_time": "2024-09-06T18:35:19.654870", "status": "completed" }, "tags": [] }, "source": [ "**Single Index Thicket Example**" ] }, { "cell_type": "code", "execution_count": 34, "id": "b06eab79", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:19.682384Z", "iopub.status.busy": "2024-09-06T18:35:19.682191Z", "iopub.status.idle": "2024-09-06T18:35:19.684790Z", "shell.execute_reply": "2024-09-06T18:35:19.684333Z" }, "papermill": { "duration": 0.012912, "end_time": "2024-09-06T18:35:19.685758", "exception": false, "start_time": "2024-09-06T18:35:19.672846", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "metrics = [\"time (exc)\", \"Machine clears\"]" ] }, { "cell_type": "code", "execution_count": 35, "id": "84b2fd2c", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:19.709606Z", "iopub.status.busy": "2024-09-06T18:35:19.709423Z", "iopub.status.idle": "2024-09-06T18:35:19.852987Z", "shell.execute_reply": "2024-09-06T18:35:19.852626Z" }, "papermill": { "duration": 0.157166, "end_time": "2024-09-06T18:35:19.853662", "exception": false, "start_time": "2024-09-06T18:35:19.696496", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/opt/conda/lib/python3.9/site-packages/scipy/stats/_axis_nan_policy.py:531: UserWarning: scipy.stats.shapiro: Input data has range zero. The results may not be accurate.\n", " res = hypotest_fun_out(*samples, **kwds)\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
nametime (exc)_maxMachine clears_maxtime (exc)_minMachine clears_mintime (exc)_medianMachine clears_mediantime (exc)_meanMachine clears_meantime (exc)_varMachine clears_vartime (exc)_stdMachine clears_stdtime (exc)_percentiles_25time (exc)_percentiles_50time (exc)_percentiles_75Machine clears_percentiles_25Machine clears_percentiles_50Machine clears_percentiles_75time (exc)_normalityMachine clears_normality
node
{'name': 'RAJAPerf', 'type': 'function'}RAJAPerf4.922397e+060.0039324.696939e+060.0010994.792514e+060.0022094.788171e+060.0022665.320529e+099.199162e-077.294195e+040.0009594.723135e+064.792514e+064.834294e+060.0015740.0022090.002657TrueTrue
{'name': 'Algorithm', 'type': 'function'}Algorithm5.576280e+050.0198515.176070e+050.0000005.386245e+050.0047225.383793e+050.0070611.773236e+084.328011e-051.331629e+040.0065795.331202e+055.386245e+055.451535e+050.0025010.0047220.008782TrueTrue
{'name': 'Algorithm_MEMCPY', 'type': 'function'}Algorithm_MEMCPY2.008037e+090.9979071.982438e+090.9904012.001818e+090.9961431.997560e+090.9954259.221915e+135.530862e-069.603080e+060.0023521.988998e+092.001818e+092.004878e+090.9940800.9961430.997084TrueTrue
{'name': 'Algorithm_MEMSET', 'type': 'function'}Algorithm_MEMSET2.036565e+090.9979232.006252e+090.9885052.018832e+090.9938712.020861e+090.9937988.949541e+139.666489e-069.460201e+060.0031092.014797e+092.018832e+092.027421e+090.9913370.9938710.995980TrueTrue
{'name': 'Algorithm_REDUCE_SUM', 'type': 'function'}Algorithm_REDUCE_SUM4.511030e+080.9967564.467119e+080.9549674.498193e+080.9909384.492754e+080.9812222.442450e+122.613859e-041.562834e+060.0161674.480209e+084.498193e+084.503918e+080.9703820.9909380.993326TrueFalse
\n", "
" ], "text/plain": [ " name \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} RAJAPerf \n", "{'name': 'Algorithm', 'type': 'function'} Algorithm \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} Algorithm_MEMCPY \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} Algorithm_MEMSET \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... Algorithm_REDUCE_SUM \n", "\n", " time (exc)_max \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.922397e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.576280e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.008037e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.036565e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.511030e+08 \n", "\n", " Machine clears_max \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.003932 \n", "{'name': 'Algorithm', 'type': 'function'} 0.019851 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.997907 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.997923 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.996756 \n", "\n", " time (exc)_min \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.696939e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.176070e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.982438e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.006252e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.467119e+08 \n", "\n", " Machine clears_min \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.001099 \n", "{'name': 'Algorithm', 'type': 'function'} 0.000000 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.990401 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.988505 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.954967 \n", "\n", " time (exc)_median \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.792514e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.386245e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.001818e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.018832e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.498193e+08 \n", "\n", " Machine clears_median \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.002209 \n", "{'name': 'Algorithm', 'type': 'function'} 0.004722 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.996143 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.993871 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.990938 \n", "\n", " time (exc)_mean \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.788171e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.383793e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.997560e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.020861e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.492754e+08 \n", "\n", " Machine clears_mean \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.002266 \n", "{'name': 'Algorithm', 'type': 'function'} 0.007061 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.995425 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.993798 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.981222 \n", "\n", " time (exc)_var \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 5.320529e+09 \n", "{'name': 'Algorithm', 'type': 'function'} 1.773236e+08 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 9.221915e+13 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 8.949541e+13 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 2.442450e+12 \n", "\n", " Machine clears_var \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 9.199162e-07 \n", "{'name': 'Algorithm', 'type': 'function'} 4.328011e-05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 5.530862e-06 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 9.666489e-06 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 2.613859e-04 \n", "\n", " time (exc)_std \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 7.294195e+04 \n", "{'name': 'Algorithm', 'type': 'function'} 1.331629e+04 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 9.603080e+06 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 9.460201e+06 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 1.562834e+06 \n", "\n", " Machine clears_std \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.000959 \n", "{'name': 'Algorithm', 'type': 'function'} 0.006579 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.002352 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.003109 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.016167 \n", "\n", " time (exc)_percentiles_25 \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.723135e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.331202e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.988998e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.014797e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.480209e+08 \n", "\n", " time (exc)_percentiles_50 \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.792514e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.386245e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.001818e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.018832e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.498193e+08 \n", "\n", " time (exc)_percentiles_75 \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.834294e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.451535e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.004878e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.027421e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.503918e+08 \n", "\n", " Machine clears_percentiles_25 \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.001574 \n", "{'name': 'Algorithm', 'type': 'function'} 0.002501 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.994080 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.991337 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.970382 \n", "\n", " Machine clears_percentiles_50 \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.002209 \n", "{'name': 'Algorithm', 'type': 'function'} 0.004722 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.996143 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.993871 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.990938 \n", "\n", " Machine clears_percentiles_75 \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.002657 \n", "{'name': 'Algorithm', 'type': 'function'} 0.008782 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.997084 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.995980 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.993326 \n", "\n", " time (exc)_normality \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} True \n", "{'name': 'Algorithm', 'type': 'function'} True \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} True \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} True \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... True \n", "\n", " Machine clears_normality \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} True \n", "{'name': 'Algorithm', 'type': 'function'} True \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} True \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} True \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... False " ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "th.stats.check_normality(clang_th, columns=metrics)\n", "clang_th.statsframe.dataframe.head(5)" ] }, { "cell_type": "markdown", "id": "92706ae5", "metadata": { "papermill": { "duration": 0.008153, "end_time": "2024-09-06T18:35:19.870377", "exception": false, "start_time": "2024-09-06T18:35:19.862224", "status": "completed" }, "tags": [] }, "source": [ "**Multi-Indexed Thicket Example**\n", "Example will show how to pass a columnar joined thicket object. When passing a columnar joined thicket object, the columns argument will now take a list of tuples. Each tuple will consist of two elements. The first element will always be the column index, and the second element will be an associated column under the column index you passed.
\n", "\n", " - Example: (column_index, column_name) -> (\"GCC\", \"Machine clears\")" ] }, { "cell_type": "code", "execution_count": 36, "id": "6693287f", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:19.887264Z", "iopub.status.busy": "2024-09-06T18:35:19.887151Z", "iopub.status.idle": "2024-09-06T18:35:19.889723Z", "shell.execute_reply": "2024-09-06T18:35:19.889367Z" }, "papermill": { "duration": 0.011969, "end_time": "2024-09-06T18:35:19.890577", "exception": false, "start_time": "2024-09-06T18:35:19.878608", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "metrics = [(\"Clang\", \"time (exc)\"), (\"GCC\", \"Machine clears\")]" ] }, { "cell_type": "code", "execution_count": 37, "id": "cc79039d", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:19.908303Z", "iopub.status.busy": "2024-09-06T18:35:19.908186Z", "iopub.status.idle": "2024-09-06T18:35:20.155843Z", "shell.execute_reply": "2024-09-06T18:35:20.155367Z" }, "papermill": { "duration": 0.257706, "end_time": "2024-09-06T18:35:20.156668", "exception": false, "start_time": "2024-09-06T18:35:19.898962", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/opt/conda/lib/python3.9/site-packages/scipy/stats/_axis_nan_policy.py:531: UserWarning: scipy.stats.shapiro: Input data has range zero. The results may not be accurate.\n", " res = hypotest_fun_out(*samples, **kwds)\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ClangGCCname
time (exc)_maxtime (exc)_meantime (exc)_mediantime (exc)_mintime (exc)_normalitytime (exc)_percentiles_25time (exc)_percentiles_50time (exc)_percentiles_75time (exc)_stdtime (exc)_varMachine clears_maxMachine clears_meanMachine clears_medianMachine clears_minMachine clears_normalityMachine clears_percentiles_25Machine clears_percentiles_50Machine clears_percentiles_75Machine clears_stdMachine clears_var
node
{'name': 'RAJAPerf', 'type': 'function'}4.922397e+064.788171e+064.792514e+064.696939e+06True4.723135e+064.792514e+064.834294e+067.294195e+045.320529e+090.0045230.0028530.0030610.001071True0.0018990.0030610.0036120.0011550.000001RAJAPerf
{'name': 'Algorithm', 'type': 'function'}5.576280e+055.383793e+055.386245e+055.176070e+05True5.331202e+055.386245e+055.451535e+051.331629e+041.773236e+080.0142050.0052490.0048100.000000True0.0024460.0048100.0064310.0044140.000019Algorithm
{'name': 'Algorithm_MEMCPY', 'type': 'function'}2.008037e+091.997560e+092.001818e+091.982438e+09True1.988998e+092.001818e+092.004878e+099.603080e+069.221915e+130.9929880.9789260.9843560.956393True0.9683370.9843560.9885770.0126910.000161Algorithm_MEMCPY
{'name': 'Algorithm_MEMSET', 'type': 'function'}2.036565e+092.020861e+092.018832e+092.006252e+09True2.014797e+092.018832e+092.027421e+099.460201e+068.949541e+130.9975500.9909340.9914640.980433True0.9889790.9914640.9943080.0054030.000029Algorithm_MEMSET
{'name': 'Algorithm_REDUCE_SUM', 'type': 'function'}4.511030e+084.492754e+084.498193e+084.467119e+08True4.480209e+084.498193e+084.503918e+081.562834e+062.442450e+120.9946240.9228180.9259870.770469True0.8846210.9259870.9876350.0723690.005237Algorithm_REDUCE_SUM
\n", "
" ], "text/plain": [ " Clang \\\n", " time (exc)_max \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.922397e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.576280e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.008037e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.036565e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.511030e+08 \n", "\n", " \\\n", " time (exc)_mean \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.788171e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.383793e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.997560e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.020861e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.492754e+08 \n", "\n", " \\\n", " time (exc)_median \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.792514e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.386245e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.001818e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.018832e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.498193e+08 \n", "\n", " \\\n", " time (exc)_min \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.696939e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.176070e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.982438e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.006252e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.467119e+08 \n", "\n", " \\\n", " time (exc)_normality \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} True \n", "{'name': 'Algorithm', 'type': 'function'} True \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} True \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} True \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... True \n", "\n", " \\\n", " time (exc)_percentiles_25 \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.723135e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.331202e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.988998e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.014797e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.480209e+08 \n", "\n", " \\\n", " time (exc)_percentiles_50 \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.792514e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.386245e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.001818e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.018832e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.498193e+08 \n", "\n", " \\\n", " time (exc)_percentiles_75 \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.834294e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.451535e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.004878e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.027421e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.503918e+08 \n", "\n", " \\\n", " time (exc)_std \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 7.294195e+04 \n", "{'name': 'Algorithm', 'type': 'function'} 1.331629e+04 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 9.603080e+06 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 9.460201e+06 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 1.562834e+06 \n", "\n", " \\\n", " time (exc)_var \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 5.320529e+09 \n", "{'name': 'Algorithm', 'type': 'function'} 1.773236e+08 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 9.221915e+13 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 8.949541e+13 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 2.442450e+12 \n", "\n", " GCC \\\n", " Machine clears_max \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.004523 \n", "{'name': 'Algorithm', 'type': 'function'} 0.014205 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.992988 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.997550 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.994624 \n", "\n", " \\\n", " Machine clears_mean \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.002853 \n", "{'name': 'Algorithm', 'type': 'function'} 0.005249 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.978926 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.990934 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.922818 \n", "\n", " \\\n", " Machine clears_median \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.003061 \n", "{'name': 'Algorithm', 'type': 'function'} 0.004810 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.984356 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.991464 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.925987 \n", "\n", " \\\n", " Machine clears_min \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.001071 \n", "{'name': 'Algorithm', 'type': 'function'} 0.000000 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.956393 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.980433 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.770469 \n", "\n", " \\\n", " Machine clears_normality \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} True \n", "{'name': 'Algorithm', 'type': 'function'} True \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} True \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} True \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... True \n", "\n", " \\\n", " Machine clears_percentiles_25 \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.001899 \n", "{'name': 'Algorithm', 'type': 'function'} 0.002446 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.968337 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.988979 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.884621 \n", "\n", " \\\n", " Machine clears_percentiles_50 \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.003061 \n", "{'name': 'Algorithm', 'type': 'function'} 0.004810 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.984356 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.991464 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.925987 \n", "\n", " \\\n", " Machine clears_percentiles_75 \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.003612 \n", "{'name': 'Algorithm', 'type': 'function'} 0.006431 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.988577 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.994308 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.987635 \n", "\n", " \\\n", " Machine clears_std \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.001155 \n", "{'name': 'Algorithm', 'type': 'function'} 0.004414 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.012691 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.005403 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.072369 \n", "\n", " \\\n", " Machine clears_var \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.000001 \n", "{'name': 'Algorithm', 'type': 'function'} 0.000019 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.000161 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.000029 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.005237 \n", "\n", " name \n", " \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} RAJAPerf \n", "{'name': 'Algorithm', 'type': 'function'} Algorithm \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} Algorithm_MEMCPY \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} Algorithm_MEMSET \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... Algorithm_REDUCE_SUM " ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "th.stats.check_normality(combined_th, columns=metrics)\n", "combined_th.statsframe.dataframe.head(5)" ] }, { "cell_type": "markdown", "id": "d9032df3", "metadata": { "papermill": { "duration": 0.009591, "end_time": "2024-09-06T18:35:20.176510", "exception": false, "start_time": "2024-09-06T18:35:20.166919", "status": "completed" }, "tags": [] }, "source": [ "### 5.9 Nodewise Correlation\n", "\n", "The `correlation_nodewise` function will perform nodewise correlation for each node in the performance data table.
\n", "\n", "The correlation values will be appended to the aggregated statistics table and will be denoted with `correlation type` where `correlation type` can be `{pearson, spearman, kendall}`.
\n", "\n", "When working with a multi-indexed thicket (columnar join) a new column index will be created titled: `Union statistics`. See the **Multi-Indexed Thicket Example** to see the implementation of this." ] }, { "cell_type": "markdown", "id": "eff71db6", "metadata": { "papermill": { "duration": 0.009925, "end_time": "2024-09-06T18:35:20.196090", "exception": false, "start_time": "2024-09-06T18:35:20.186165", "status": "completed" }, "tags": [] }, "source": [ "**Single Index Thicket Example**" ] }, { "cell_type": "code", "execution_count": 38, "id": "93b34d22", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:20.216797Z", "iopub.status.busy": "2024-09-06T18:35:20.216652Z", "iopub.status.idle": "2024-09-06T18:35:20.261844Z", "shell.execute_reply": "2024-09-06T18:35:20.261497Z" }, "papermill": { "duration": 0.05652, "end_time": "2024-09-06T18:35:20.262560", "exception": false, "start_time": "2024-09-06T18:35:20.206040", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "th.stats.correlation_nodewise(\n", " clang_th,\n", " column1=\"time (exc)\",\n", " column2=\"Machine clears\",\n", " correlation=\"spearman\"\n", ")" ] }, { "cell_type": "code", "execution_count": 39, "id": "a18d0979", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:20.280790Z", "iopub.status.busy": "2024-09-06T18:35:20.280692Z", "iopub.status.idle": "2024-09-06T18:35:20.288876Z", "shell.execute_reply": "2024-09-06T18:35:20.288499Z" }, "papermill": { "duration": 0.01752, "end_time": "2024-09-06T18:35:20.289449", "exception": false, "start_time": "2024-09-06T18:35:20.271929", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
nametime (exc)_maxMachine clears_maxtime (exc)_minMachine clears_mintime (exc)_medianMachine clears_mediantime (exc)_meanMachine clears_meantime (exc)_varMachine clears_vartime (exc)_stdMachine clears_stdtime (exc)_percentiles_25time (exc)_percentiles_50time (exc)_percentiles_75Machine clears_percentiles_25Machine clears_percentiles_50Machine clears_percentiles_75time (exc)_normalityMachine clears_normalitytime (exc)_vs_Machine clears spearman
node
{'name': 'RAJAPerf', 'type': 'function'}RAJAPerf4.922397e+060.0039324.696939e+060.0010994.792514e+060.0022094.788171e+060.0022665.320529e+099.199162e-077.294195e+040.0009594.723135e+064.792514e+064.834294e+060.0015740.0022090.002657TrueTrue0.503030
{'name': 'Algorithm', 'type': 'function'}Algorithm5.576280e+050.0198515.176070e+050.0000005.386245e+050.0047225.383793e+050.0070611.773236e+084.328011e-051.331629e+040.0065795.331202e+055.386245e+055.451535e+050.0025010.0047220.008782TrueTrue-0.660606
{'name': 'Algorithm_MEMCPY', 'type': 'function'}Algorithm_MEMCPY2.008037e+090.9979071.982438e+090.9904012.001818e+090.9961431.997560e+090.9954259.221915e+135.530862e-069.603080e+060.0023521.988998e+092.001818e+092.004878e+090.9940800.9961430.997084TrueTrue0.078788
{'name': 'Algorithm_MEMSET', 'type': 'function'}Algorithm_MEMSET2.036565e+090.9979232.006252e+090.9885052.018832e+090.9938712.020861e+090.9937988.949541e+139.666489e-069.460201e+060.0031092.014797e+092.018832e+092.027421e+090.9913370.9938710.995980TrueTrue0.054545
{'name': 'Algorithm_REDUCE_SUM', 'type': 'function'}Algorithm_REDUCE_SUM4.511030e+080.9967564.467119e+080.9549674.498193e+080.9909384.492754e+080.9812222.442450e+122.613859e-041.562834e+060.0161674.480209e+084.498193e+084.503918e+080.9703820.9909380.993326TrueFalse-0.345455
\n", "
" ], "text/plain": [ " name \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} RAJAPerf \n", "{'name': 'Algorithm', 'type': 'function'} Algorithm \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} Algorithm_MEMCPY \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} Algorithm_MEMSET \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... Algorithm_REDUCE_SUM \n", "\n", " time (exc)_max \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.922397e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.576280e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.008037e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.036565e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.511030e+08 \n", "\n", " Machine clears_max \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.003932 \n", "{'name': 'Algorithm', 'type': 'function'} 0.019851 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.997907 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.997923 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.996756 \n", "\n", " time (exc)_min \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.696939e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.176070e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.982438e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.006252e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.467119e+08 \n", "\n", " Machine clears_min \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.001099 \n", "{'name': 'Algorithm', 'type': 'function'} 0.000000 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.990401 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.988505 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.954967 \n", "\n", " time (exc)_median \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.792514e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.386245e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.001818e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.018832e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.498193e+08 \n", "\n", " Machine clears_median \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.002209 \n", "{'name': 'Algorithm', 'type': 'function'} 0.004722 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.996143 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.993871 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.990938 \n", "\n", " time (exc)_mean \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.788171e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.383793e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.997560e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.020861e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.492754e+08 \n", "\n", " Machine clears_mean \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.002266 \n", "{'name': 'Algorithm', 'type': 'function'} 0.007061 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.995425 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.993798 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.981222 \n", "\n", " time (exc)_var \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 5.320529e+09 \n", "{'name': 'Algorithm', 'type': 'function'} 1.773236e+08 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 9.221915e+13 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 8.949541e+13 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 2.442450e+12 \n", "\n", " Machine clears_var \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 9.199162e-07 \n", "{'name': 'Algorithm', 'type': 'function'} 4.328011e-05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 5.530862e-06 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 9.666489e-06 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 2.613859e-04 \n", "\n", " time (exc)_std \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 7.294195e+04 \n", "{'name': 'Algorithm', 'type': 'function'} 1.331629e+04 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 9.603080e+06 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 9.460201e+06 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 1.562834e+06 \n", "\n", " Machine clears_std \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.000959 \n", "{'name': 'Algorithm', 'type': 'function'} 0.006579 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.002352 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.003109 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.016167 \n", "\n", " time (exc)_percentiles_25 \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.723135e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.331202e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.988998e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.014797e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.480209e+08 \n", "\n", " time (exc)_percentiles_50 \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.792514e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.386245e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.001818e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.018832e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.498193e+08 \n", "\n", " time (exc)_percentiles_75 \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.834294e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.451535e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.004878e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.027421e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.503918e+08 \n", "\n", " Machine clears_percentiles_25 \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.001574 \n", "{'name': 'Algorithm', 'type': 'function'} 0.002501 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.994080 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.991337 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.970382 \n", "\n", " Machine clears_percentiles_50 \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.002209 \n", "{'name': 'Algorithm', 'type': 'function'} 0.004722 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.996143 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.993871 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.990938 \n", "\n", " Machine clears_percentiles_75 \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.002657 \n", "{'name': 'Algorithm', 'type': 'function'} 0.008782 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.997084 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.995980 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.993326 \n", "\n", " time (exc)_normality \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} True \n", "{'name': 'Algorithm', 'type': 'function'} True \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} True \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} True \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... True \n", "\n", " Machine clears_normality \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} True \n", "{'name': 'Algorithm', 'type': 'function'} True \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} True \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} True \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... False \n", "\n", " time (exc)_vs_Machine clears spearman \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.503030 \n", "{'name': 'Algorithm', 'type': 'function'} -0.660606 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.078788 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.054545 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... -0.345455 " ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "clang_th.statsframe.dataframe.head(5)" ] }, { "cell_type": "markdown", "id": "927d0a84", "metadata": { "papermill": { "duration": 0.008439, "end_time": "2024-09-06T18:35:20.306570", "exception": false, "start_time": "2024-09-06T18:35:20.298131", "status": "completed" }, "tags": [] }, "source": [ "**Multi-Indexed Thicket Example**\n", "\n", "Example will show how to pass a columnar joined thicket object. When passing a columnar joined thicket object, the columns argument will now take a list of tuples. Each tuple will consist of two elements. The first element will always be the column index, and the second element will be an associated column under the column index you passed.
\n", "\n", " - Example: (column_index, column_name) -> (\"GCC\", \"Machine clears\") " ] }, { "cell_type": "code", "execution_count": 40, "id": "2775f0f3", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:20.324118Z", "iopub.status.busy": "2024-09-06T18:35:20.324028Z", "iopub.status.idle": "2024-09-06T18:35:20.369898Z", "shell.execute_reply": "2024-09-06T18:35:20.369612Z" }, "papermill": { "duration": 0.055253, "end_time": "2024-09-06T18:35:20.370463", "exception": false, "start_time": "2024-09-06T18:35:20.315210", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "th.stats.correlation_nodewise(\n", " combined_th,\n", " column1=(\"Clang\", \"time (exc)\"),\n", " column2=(\"GCC\", \"Machine clears\"),\n", " correlation=\"spearman\"\n", ")" ] }, { "cell_type": "code", "execution_count": 41, "id": "1e0de9d1", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:20.388233Z", "iopub.status.busy": "2024-09-06T18:35:20.388134Z", "iopub.status.idle": "2024-09-06T18:35:20.396644Z", "shell.execute_reply": "2024-09-06T18:35:20.396430Z" }, "papermill": { "duration": 0.017959, "end_time": "2024-09-06T18:35:20.397170", "exception": false, "start_time": "2024-09-06T18:35:20.379211", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ClangGCCUnion statisticsname
time (exc)_maxtime (exc)_meantime (exc)_mediantime (exc)_mintime (exc)_normalitytime (exc)_percentiles_25time (exc)_percentiles_50time (exc)_percentiles_75time (exc)_stdtime (exc)_varMachine clears_maxMachine clears_meanMachine clears_medianMachine clears_minMachine clears_normalityMachine clears_percentiles_25Machine clears_percentiles_50Machine clears_percentiles_75Machine clears_stdMachine clears_vartime (exc)_vs_Machine clears spearman
node
{'name': 'RAJAPerf', 'type': 'function'}4.922397e+064.788171e+064.792514e+064.696939e+06True4.723135e+064.792514e+064.834294e+067.294195e+045.320529e+090.0045230.0028530.0030610.001071True0.0018990.0030610.0036120.0011550.000001-0.030303RAJAPerf
{'name': 'Algorithm', 'type': 'function'}5.576280e+055.383793e+055.386245e+055.176070e+05True5.331202e+055.386245e+055.451535e+051.331629e+041.773236e+080.0142050.0052490.0048100.000000True0.0024460.0048100.0064310.0044140.0000190.158055Algorithm
{'name': 'Algorithm_MEMCPY', 'type': 'function'}2.008037e+091.997560e+092.001818e+091.982438e+09True1.988998e+092.001818e+092.004878e+099.603080e+069.221915e+130.9929880.9789260.9843560.956393True0.9683370.9843560.9885770.0126910.000161-0.381818Algorithm_MEMCPY
{'name': 'Algorithm_MEMSET', 'type': 'function'}2.036565e+092.020861e+092.018832e+092.006252e+09True2.014797e+092.018832e+092.027421e+099.460201e+068.949541e+130.9975500.9909340.9914640.980433True0.9889790.9914640.9943080.0054030.0000290.066667Algorithm_MEMSET
{'name': 'Algorithm_REDUCE_SUM', 'type': 'function'}4.511030e+084.492754e+084.498193e+084.467119e+08True4.480209e+084.498193e+084.503918e+081.562834e+062.442450e+120.9946240.9228180.9259870.770469True0.8846210.9259870.9876350.0723690.005237-0.030303Algorithm_REDUCE_SUM
\n", "
" ], "text/plain": [ " Clang \\\n", " time (exc)_max \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.922397e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.576280e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.008037e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.036565e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.511030e+08 \n", "\n", " \\\n", " time (exc)_mean \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.788171e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.383793e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.997560e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.020861e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.492754e+08 \n", "\n", " \\\n", " time (exc)_median \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.792514e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.386245e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.001818e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.018832e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.498193e+08 \n", "\n", " \\\n", " time (exc)_min \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.696939e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.176070e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.982438e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.006252e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.467119e+08 \n", "\n", " \\\n", " time (exc)_normality \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} True \n", "{'name': 'Algorithm', 'type': 'function'} True \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} True \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} True \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... True \n", "\n", " \\\n", " time (exc)_percentiles_25 \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.723135e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.331202e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.988998e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.014797e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.480209e+08 \n", "\n", " \\\n", " time (exc)_percentiles_50 \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.792514e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.386245e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.001818e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.018832e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.498193e+08 \n", "\n", " \\\n", " time (exc)_percentiles_75 \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.834294e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.451535e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.004878e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.027421e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.503918e+08 \n", "\n", " \\\n", " time (exc)_std \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 7.294195e+04 \n", "{'name': 'Algorithm', 'type': 'function'} 1.331629e+04 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 9.603080e+06 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 9.460201e+06 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 1.562834e+06 \n", "\n", " \\\n", " time (exc)_var \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 5.320529e+09 \n", "{'name': 'Algorithm', 'type': 'function'} 1.773236e+08 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 9.221915e+13 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 8.949541e+13 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 2.442450e+12 \n", "\n", " GCC \\\n", " Machine clears_max \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.004523 \n", "{'name': 'Algorithm', 'type': 'function'} 0.014205 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.992988 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.997550 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.994624 \n", "\n", " \\\n", " Machine clears_mean \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.002853 \n", "{'name': 'Algorithm', 'type': 'function'} 0.005249 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.978926 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.990934 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.922818 \n", "\n", " \\\n", " Machine clears_median \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.003061 \n", "{'name': 'Algorithm', 'type': 'function'} 0.004810 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.984356 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.991464 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.925987 \n", "\n", " \\\n", " Machine clears_min \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.001071 \n", "{'name': 'Algorithm', 'type': 'function'} 0.000000 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.956393 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.980433 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.770469 \n", "\n", " \\\n", " Machine clears_normality \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} True \n", "{'name': 'Algorithm', 'type': 'function'} True \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} True \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} True \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... True \n", "\n", " \\\n", " Machine clears_percentiles_25 \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.001899 \n", "{'name': 'Algorithm', 'type': 'function'} 0.002446 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.968337 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.988979 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.884621 \n", "\n", " \\\n", " Machine clears_percentiles_50 \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.003061 \n", "{'name': 'Algorithm', 'type': 'function'} 0.004810 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.984356 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.991464 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.925987 \n", "\n", " \\\n", " Machine clears_percentiles_75 \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.003612 \n", "{'name': 'Algorithm', 'type': 'function'} 0.006431 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.988577 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.994308 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.987635 \n", "\n", " \\\n", " Machine clears_std \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.001155 \n", "{'name': 'Algorithm', 'type': 'function'} 0.004414 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.012691 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.005403 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.072369 \n", "\n", " \\\n", " Machine clears_var \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.000001 \n", "{'name': 'Algorithm', 'type': 'function'} 0.000019 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.000161 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.000029 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.005237 \n", "\n", " Union statistics \\\n", " time (exc)_vs_Machine clears spearman \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} -0.030303 \n", "{'name': 'Algorithm', 'type': 'function'} 0.158055 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} -0.381818 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.066667 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... -0.030303 \n", "\n", " name \n", " \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} RAJAPerf \n", "{'name': 'Algorithm', 'type': 'function'} Algorithm \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} Algorithm_MEMCPY \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} Algorithm_MEMSET \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... Algorithm_REDUCE_SUM " ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "combined_th.statsframe.dataframe.head(5)" ] }, { "cell_type": "markdown", "id": "f0de497c", "metadata": { "papermill": { "duration": 0.008671, "end_time": "2024-09-06T18:35:20.414756", "exception": false, "start_time": "2024-09-06T18:35:20.406085", "status": "completed" }, "tags": [] }, "source": [ "### 5.10 Calculate Boxplot\n", "\n", "The `calc_boxplot_statistics` function will calculate a boxplots `{q1, q2, q3, iqr, lowerfence, upperfence}` for each node in the performance data table.
\n", "\n", "Each column will have the values: `{q1,q2,q3,iqr,lowerfence, upperfence}` calculated. The appended columns to the aggregated statistics table will be denoted with either col + `{_q1, _q2, _q3,_iqr, _lowerfence, _upperfence}`.
\n", "\n", "Lastly, `calc_boxplot_statistics` will calculate outliers as well. The outliers will be appended to the aggregated statistics table and denoted with `_outliers` at the end of the column name i.e. `column_outliers`." ] }, { "cell_type": "markdown", "id": "e41b81c5", "metadata": { "papermill": { "duration": 0.009912, "end_time": "2024-09-06T18:35:20.433618", "exception": false, "start_time": "2024-09-06T18:35:20.423706", "status": "completed" }, "tags": [] }, "source": [ "**Single Indexed Thicket**" ] }, { "cell_type": "code", "execution_count": 42, "id": "14f0406c", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:20.454531Z", "iopub.status.busy": "2024-09-06T18:35:20.454406Z", "iopub.status.idle": "2024-09-06T18:35:20.456740Z", "shell.execute_reply": "2024-09-06T18:35:20.456293Z" }, "papermill": { "duration": 0.013828, "end_time": "2024-09-06T18:35:20.457427", "exception": false, "start_time": "2024-09-06T18:35:20.443599", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "metrics = [\"time (exc)\", \"Machine clears\"]" ] }, { "cell_type": "code", "execution_count": 43, "id": "c45ed4ba", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:20.479424Z", "iopub.status.busy": "2024-09-06T18:35:20.479286Z", "iopub.status.idle": "2024-09-06T18:35:20.527870Z", "shell.execute_reply": "2024-09-06T18:35:20.527324Z" }, "papermill": { "duration": 0.060923, "end_time": "2024-09-06T18:35:20.528751", "exception": false, "start_time": "2024-09-06T18:35:20.467828", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
nametime (exc)_maxMachine clears_maxtime (exc)_minMachine clears_mintime (exc)_medianMachine clears_mediantime (exc)_meanMachine clears_meantime (exc)_varMachine clears_vartime (exc)_stdMachine clears_stdtime (exc)_percentiles_25time (exc)_percentiles_50time (exc)_percentiles_75Machine clears_percentiles_25Machine clears_percentiles_50Machine clears_percentiles_75time (exc)_normalityMachine clears_normalitytime (exc)_vs_Machine clears spearmantime (exc)_q1(0.25, 0.5, 0.75)time (exc)_q2(0.25, 0.5, 0.75)time (exc)_q3(0.25, 0.5, 0.75)time (exc)_iqr(0.25, 0.5, 0.75)time (exc)_lowerfence(0.25, 0.5, 0.75)time (exc)_upperfence(0.25, 0.5, 0.75)time (exc)_outliers(0.25, 0.5, 0.75)Machine clears_q1(0.25, 0.5, 0.75)Machine clears_q2(0.25, 0.5, 0.75)Machine clears_q3(0.25, 0.5, 0.75)Machine clears_iqr(0.25, 0.5, 0.75)Machine clears_lowerfence(0.25, 0.5, 0.75)Machine clears_upperfence(0.25, 0.5, 0.75)Machine clears_outliers(0.25, 0.5, 0.75)
node
{'name': 'RAJAPerf', 'type': 'function'}RAJAPerf4.922397e+060.0039324.696939e+060.0010994.792514e+060.0022094.788171e+060.0022665.320529e+099.199162e-077.294195e+040.0009594.723135e+064.792514e+064.834294e+060.0015740.0022090.002657TrueTrue0.5030304.723135e+064.792514e+064.834294e+06111159.254.556396e+065.001033e+06[]0.0015740.0022090.0026570.001083-0.0000500.004281[]
{'name': 'Algorithm', 'type': 'function'}Algorithm5.576280e+050.0198515.176070e+050.0000005.386245e+050.0047225.383793e+050.0070611.773236e+084.328011e-051.331629e+040.0065795.331202e+055.386245e+055.451535e+050.0025010.0047220.008782TrueTrue-0.6606065.331202e+055.386245e+055.451535e+0512033.255.150704e+055.632034e+05[]0.0025010.0047220.0087820.006281-0.0069210.018204[2507715123]
{'name': 'Algorithm_MEMCPY', 'type': 'function'}Algorithm_MEMCPY2.008037e+090.9979071.982438e+090.9904012.001818e+090.9961431.997560e+090.9954259.221915e+135.530862e-069.603080e+060.0023521.988998e+092.001818e+092.004878e+090.9940800.9961430.997084TrueTrue0.0787881.988998e+092.001818e+092.004878e+0915879973.251.965178e+092.028698e+09[]0.9940800.9961430.9970840.0030040.9895741.001591[]
{'name': 'Algorithm_MEMSET', 'type': 'function'}Algorithm_MEMSET2.036565e+090.9979232.006252e+090.9885052.018832e+090.9938712.020861e+090.9937988.949541e+139.666489e-069.460201e+060.0031092.014797e+092.018832e+092.027421e+090.9913370.9938710.995980TrueTrue0.0545452.014797e+092.018832e+092.027421e+0912623520.751.995862e+092.046356e+09[]0.9913370.9938710.9959800.0046430.9843731.002944[]
{'name': 'Algorithm_REDUCE_SUM', 'type': 'function'}Algorithm_REDUCE_SUM4.511030e+080.9967564.467119e+080.9549674.498193e+080.9909384.492754e+080.9812222.442450e+122.613859e-041.562834e+060.0161674.480209e+084.498193e+084.503918e+080.9703820.9909380.993326TrueFalse-0.3454554.480209e+084.498193e+084.503918e+082370880.754.444646e+084.539481e+08[]0.9703820.9909380.9933260.0229440.9359651.027742[]
\n", "
" ], "text/plain": [ " name \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} RAJAPerf \n", "{'name': 'Algorithm', 'type': 'function'} Algorithm \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} Algorithm_MEMCPY \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} Algorithm_MEMSET \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... Algorithm_REDUCE_SUM \n", "\n", " time (exc)_max \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.922397e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.576280e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.008037e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.036565e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.511030e+08 \n", "\n", " Machine clears_max \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.003932 \n", "{'name': 'Algorithm', 'type': 'function'} 0.019851 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.997907 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.997923 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.996756 \n", "\n", " time (exc)_min \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.696939e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.176070e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.982438e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.006252e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.467119e+08 \n", "\n", " Machine clears_min \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.001099 \n", "{'name': 'Algorithm', 'type': 'function'} 0.000000 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.990401 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.988505 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.954967 \n", "\n", " time (exc)_median \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.792514e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.386245e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.001818e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.018832e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.498193e+08 \n", "\n", " Machine clears_median \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.002209 \n", "{'name': 'Algorithm', 'type': 'function'} 0.004722 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.996143 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.993871 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.990938 \n", "\n", " time (exc)_mean \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.788171e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.383793e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.997560e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.020861e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.492754e+08 \n", "\n", " Machine clears_mean \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.002266 \n", "{'name': 'Algorithm', 'type': 'function'} 0.007061 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.995425 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.993798 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.981222 \n", "\n", " time (exc)_var \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 5.320529e+09 \n", "{'name': 'Algorithm', 'type': 'function'} 1.773236e+08 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 9.221915e+13 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 8.949541e+13 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 2.442450e+12 \n", "\n", " Machine clears_var \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 9.199162e-07 \n", "{'name': 'Algorithm', 'type': 'function'} 4.328011e-05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 5.530862e-06 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 9.666489e-06 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 2.613859e-04 \n", "\n", " time (exc)_std \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 7.294195e+04 \n", "{'name': 'Algorithm', 'type': 'function'} 1.331629e+04 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 9.603080e+06 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 9.460201e+06 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 1.562834e+06 \n", "\n", " Machine clears_std \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.000959 \n", "{'name': 'Algorithm', 'type': 'function'} 0.006579 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.002352 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.003109 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.016167 \n", "\n", " time (exc)_percentiles_25 \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.723135e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.331202e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.988998e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.014797e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.480209e+08 \n", "\n", " time (exc)_percentiles_50 \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.792514e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.386245e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.001818e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.018832e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.498193e+08 \n", "\n", " time (exc)_percentiles_75 \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.834294e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.451535e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.004878e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.027421e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.503918e+08 \n", "\n", " Machine clears_percentiles_25 \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.001574 \n", "{'name': 'Algorithm', 'type': 'function'} 0.002501 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.994080 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.991337 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.970382 \n", "\n", " Machine clears_percentiles_50 \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.002209 \n", "{'name': 'Algorithm', 'type': 'function'} 0.004722 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.996143 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.993871 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.990938 \n", "\n", " Machine clears_percentiles_75 \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.002657 \n", "{'name': 'Algorithm', 'type': 'function'} 0.008782 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.997084 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.995980 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.993326 \n", "\n", " time (exc)_normality \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} True \n", "{'name': 'Algorithm', 'type': 'function'} True \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} True \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} True \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... True \n", "\n", " Machine clears_normality \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} True \n", "{'name': 'Algorithm', 'type': 'function'} True \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} True \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} True \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... False \n", "\n", " time (exc)_vs_Machine clears spearman \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.503030 \n", "{'name': 'Algorithm', 'type': 'function'} -0.660606 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.078788 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.054545 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... -0.345455 \n", "\n", " time (exc)_q1(0.25, 0.5, 0.75) \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.723135e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.331202e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.988998e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.014797e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.480209e+08 \n", "\n", " time (exc)_q2(0.25, 0.5, 0.75) \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.792514e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.386245e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.001818e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.018832e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.498193e+08 \n", "\n", " time (exc)_q3(0.25, 0.5, 0.75) \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.834294e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.451535e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.004878e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.027421e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.503918e+08 \n", "\n", " time (exc)_iqr(0.25, 0.5, 0.75) \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 111159.25 \n", "{'name': 'Algorithm', 'type': 'function'} 12033.25 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 15879973.25 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 12623520.75 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 2370880.75 \n", "\n", " time (exc)_lowerfence(0.25, 0.5, 0.75) \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.556396e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.150704e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.965178e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 1.995862e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.444646e+08 \n", "\n", " time (exc)_upperfence(0.25, 0.5, 0.75) \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 5.001033e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.632034e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.028698e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.046356e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.539481e+08 \n", "\n", " time (exc)_outliers(0.25, 0.5, 0.75) \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} [] \n", "{'name': 'Algorithm', 'type': 'function'} [] \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} [] \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} [] \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... [] \n", "\n", " Machine clears_q1(0.25, 0.5, 0.75) \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.001574 \n", "{'name': 'Algorithm', 'type': 'function'} 0.002501 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.994080 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.991337 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.970382 \n", "\n", " Machine clears_q2(0.25, 0.5, 0.75) \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.002209 \n", "{'name': 'Algorithm', 'type': 'function'} 0.004722 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.996143 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.993871 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.990938 \n", "\n", " Machine clears_q3(0.25, 0.5, 0.75) \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.002657 \n", "{'name': 'Algorithm', 'type': 'function'} 0.008782 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.997084 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.995980 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.993326 \n", "\n", " Machine clears_iqr(0.25, 0.5, 0.75) \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.001083 \n", "{'name': 'Algorithm', 'type': 'function'} 0.006281 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.003004 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.004643 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.022944 \n", "\n", " Machine clears_lowerfence(0.25, 0.5, 0.75) \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} -0.000050 \n", "{'name': 'Algorithm', 'type': 'function'} -0.006921 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.989574 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.984373 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.935965 \n", "\n", " Machine clears_upperfence(0.25, 0.5, 0.75) \\\n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.004281 \n", "{'name': 'Algorithm', 'type': 'function'} 0.018204 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.001591 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 1.002944 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 1.027742 \n", "\n", " Machine clears_outliers(0.25, 0.5, 0.75) \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} [] \n", "{'name': 'Algorithm', 'type': 'function'} [2507715123] \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} [] \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} [] \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... [] " ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "th.stats.calc_boxplot_statistics(clang_th, columns=metrics)\n", "clang_th.statsframe.dataframe.head(5)" ] }, { "cell_type": "markdown", "id": "1c7f08c2", "metadata": { "papermill": { "duration": 0.011224, "end_time": "2024-09-06T18:35:20.551152", "exception": false, "start_time": "2024-09-06T18:35:20.539928", "status": "completed" }, "tags": [] }, "source": [ "**Multi-indexed Thicket**\n", "\n", "Example will show how to pass a columnar joined thicket object. When passing a columnar joined thicket object, the columns argument will now take a list of tuples. Each tuple will consist of two elements. The first element will always be the column index, and the second element will be an associated column under the column index you passed.
\n", "\n", " - Example: (column_index, column_name) -> (\"GCC\", \"Machine clears\")" ] }, { "cell_type": "code", "execution_count": 44, "id": "74782f37", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:20.571281Z", "iopub.status.busy": "2024-09-06T18:35:20.571129Z", "iopub.status.idle": "2024-09-06T18:35:20.573847Z", "shell.execute_reply": "2024-09-06T18:35:20.573568Z" }, "papermill": { "duration": 0.013419, "end_time": "2024-09-06T18:35:20.574557", "exception": false, "start_time": "2024-09-06T18:35:20.561138", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "metrics = [(\"Clang\", \"time (exc)\"), (\"GCC\", \"Machine clears\")]" ] }, { "cell_type": "code", "execution_count": 45, "id": "363b1bb8", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:20.593489Z", "iopub.status.busy": "2024-09-06T18:35:20.593395Z", "iopub.status.idle": "2024-09-06T18:35:20.645856Z", "shell.execute_reply": "2024-09-06T18:35:20.645530Z" }, "papermill": { "duration": 0.062383, "end_time": "2024-09-06T18:35:20.646421", "exception": false, "start_time": "2024-09-06T18:35:20.584038", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ClangGCCUnion statisticsname
time (exc)_iqr(0.25, 0.5, 0.75)time (exc)_lowerfence(0.25, 0.5, 0.75)time (exc)_maxtime (exc)_meantime (exc)_mediantime (exc)_mintime (exc)_normalitytime (exc)_outliers(0.25, 0.5, 0.75)time (exc)_percentiles_25time (exc)_percentiles_50time (exc)_percentiles_75time (exc)_q1(0.25, 0.5, 0.75)time (exc)_q2(0.25, 0.5, 0.75)time (exc)_q3(0.25, 0.5, 0.75)time (exc)_stdtime (exc)_upperfence(0.25, 0.5, 0.75)time (exc)_varMachine clears_iqr(0.25, 0.5, 0.75)Machine clears_lowerfence(0.25, 0.5, 0.75)Machine clears_maxMachine clears_meanMachine clears_medianMachine clears_minMachine clears_normalityMachine clears_outliers(0.25, 0.5, 0.75)Machine clears_percentiles_25Machine clears_percentiles_50Machine clears_percentiles_75Machine clears_q1(0.25, 0.5, 0.75)Machine clears_q2(0.25, 0.5, 0.75)Machine clears_q3(0.25, 0.5, 0.75)Machine clears_stdMachine clears_upperfence(0.25, 0.5, 0.75)Machine clears_vartime (exc)_vs_Machine clears spearman
node
{'name': 'RAJAPerf', 'type': 'function'}111159.254.556396e+064.922397e+064.788171e+064.792514e+064.696939e+06True[]4.723135e+064.792514e+064.834294e+064.723135e+064.792514e+064.834294e+067.294195e+045.001033e+065.320529e+090.001713-0.0006700.0045230.0028530.0030610.001071True[]0.0018990.0030610.0036120.0018990.0030610.0036120.0011550.0061810.000001-0.030303RAJAPerf
{'name': 'Algorithm', 'type': 'function'}12033.255.150704e+055.576280e+055.383793e+055.386245e+055.176070e+05True[]5.331202e+055.386245e+055.451535e+055.331202e+055.386245e+055.451535e+051.331629e+045.632034e+051.773236e+080.003985-0.0035320.0142050.0052490.0048100.000000True[6]0.0024460.0048100.0064310.0024460.0048100.0064310.0044140.0124090.0000190.158055Algorithm
{'name': 'Algorithm_MEMCPY', 'type': 'function'}15879973.251.965178e+092.008037e+091.997560e+092.001818e+091.982438e+09True[]1.988998e+092.001818e+092.004878e+091.988998e+092.001818e+092.004878e+099.603080e+062.028698e+099.221915e+130.0202400.9379770.9929880.9789260.9843560.956393True[]0.9683370.9843560.9885770.9683370.9843560.9885770.0126911.0189380.000161-0.381818Algorithm_MEMCPY
{'name': 'Algorithm_MEMSET', 'type': 'function'}12623520.751.995862e+092.036565e+092.020861e+092.018832e+092.006252e+09True[]2.014797e+092.018832e+092.027421e+092.014797e+092.018832e+092.027421e+099.460201e+062.046356e+098.949541e+130.0053290.9809850.9975500.9909340.9914640.980433True[8]0.9889790.9914640.9943080.9889790.9914640.9943080.0054031.0023010.0000290.066667Algorithm_MEMSET
{'name': 'Algorithm_REDUCE_SUM', 'type': 'function'}2370880.754.444646e+084.511030e+084.492754e+084.498193e+084.467119e+08True[]4.480209e+084.498193e+084.503918e+084.480209e+084.498193e+084.503918e+081.562834e+064.539481e+082.442450e+120.1030140.7301010.9946240.9228180.9259870.770469True[]0.8846210.9259870.9876350.8846210.9259870.9876350.0723691.1421550.005237-0.030303Algorithm_REDUCE_SUM
\n", "
" ], "text/plain": [ " Clang \\\n", " time (exc)_iqr(0.25, 0.5, 0.75) \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 111159.25 \n", "{'name': 'Algorithm', 'type': 'function'} 12033.25 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 15879973.25 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 12623520.75 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 2370880.75 \n", "\n", " \\\n", " time (exc)_lowerfence(0.25, 0.5, 0.75) \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.556396e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.150704e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.965178e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 1.995862e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.444646e+08 \n", "\n", " \\\n", " time (exc)_max \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.922397e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.576280e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.008037e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.036565e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.511030e+08 \n", "\n", " \\\n", " time (exc)_mean \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.788171e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.383793e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.997560e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.020861e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.492754e+08 \n", "\n", " \\\n", " time (exc)_median \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.792514e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.386245e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.001818e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.018832e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.498193e+08 \n", "\n", " \\\n", " time (exc)_min \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.696939e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.176070e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.982438e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.006252e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.467119e+08 \n", "\n", " \\\n", " time (exc)_normality \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} True \n", "{'name': 'Algorithm', 'type': 'function'} True \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} True \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} True \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... True \n", "\n", " \\\n", " time (exc)_outliers(0.25, 0.5, 0.75) \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} [] \n", "{'name': 'Algorithm', 'type': 'function'} [] \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} [] \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} [] \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... [] \n", "\n", " \\\n", " time (exc)_percentiles_25 \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.723135e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.331202e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.988998e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.014797e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.480209e+08 \n", "\n", " \\\n", " time (exc)_percentiles_50 \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.792514e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.386245e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.001818e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.018832e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.498193e+08 \n", "\n", " \\\n", " time (exc)_percentiles_75 \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.834294e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.451535e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.004878e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.027421e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.503918e+08 \n", "\n", " \\\n", " time (exc)_q1(0.25, 0.5, 0.75) \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.723135e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.331202e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.988998e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.014797e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.480209e+08 \n", "\n", " \\\n", " time (exc)_q2(0.25, 0.5, 0.75) \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.792514e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.386245e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.001818e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.018832e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.498193e+08 \n", "\n", " \\\n", " time (exc)_q3(0.25, 0.5, 0.75) \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 4.834294e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.451535e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.004878e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.027421e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.503918e+08 \n", "\n", " \\\n", " time (exc)_std \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 7.294195e+04 \n", "{'name': 'Algorithm', 'type': 'function'} 1.331629e+04 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 9.603080e+06 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 9.460201e+06 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 1.562834e+06 \n", "\n", " \\\n", " time (exc)_upperfence(0.25, 0.5, 0.75) \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 5.001033e+06 \n", "{'name': 'Algorithm', 'type': 'function'} 5.632034e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 2.028698e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 2.046356e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 4.539481e+08 \n", "\n", " \\\n", " time (exc)_var \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 5.320529e+09 \n", "{'name': 'Algorithm', 'type': 'function'} 1.773236e+08 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 9.221915e+13 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 8.949541e+13 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 2.442450e+12 \n", "\n", " GCC \\\n", " Machine clears_iqr(0.25, 0.5, 0.75) \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.001713 \n", "{'name': 'Algorithm', 'type': 'function'} 0.003985 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.020240 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.005329 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.103014 \n", "\n", " \\\n", " Machine clears_lowerfence(0.25, 0.5, 0.75) \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} -0.000670 \n", "{'name': 'Algorithm', 'type': 'function'} -0.003532 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.937977 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.980985 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.730101 \n", "\n", " \\\n", " Machine clears_max \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.004523 \n", "{'name': 'Algorithm', 'type': 'function'} 0.014205 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.992988 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.997550 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.994624 \n", "\n", " \\\n", " Machine clears_mean \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.002853 \n", "{'name': 'Algorithm', 'type': 'function'} 0.005249 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.978926 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.990934 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.922818 \n", "\n", " \\\n", " Machine clears_median \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.003061 \n", "{'name': 'Algorithm', 'type': 'function'} 0.004810 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.984356 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.991464 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.925987 \n", "\n", " \\\n", " Machine clears_min \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.001071 \n", "{'name': 'Algorithm', 'type': 'function'} 0.000000 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.956393 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.980433 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.770469 \n", "\n", " \\\n", " Machine clears_normality \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} True \n", "{'name': 'Algorithm', 'type': 'function'} True \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} True \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} True \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... True \n", "\n", " \\\n", " Machine clears_outliers(0.25, 0.5, 0.75) \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} [] \n", "{'name': 'Algorithm', 'type': 'function'} [6] \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} [] \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} [8] \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... [] \n", "\n", " \\\n", " Machine clears_percentiles_25 \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.001899 \n", "{'name': 'Algorithm', 'type': 'function'} 0.002446 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.968337 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.988979 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.884621 \n", "\n", " \\\n", " Machine clears_percentiles_50 \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.003061 \n", "{'name': 'Algorithm', 'type': 'function'} 0.004810 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.984356 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.991464 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.925987 \n", "\n", " \\\n", " Machine clears_percentiles_75 \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.003612 \n", "{'name': 'Algorithm', 'type': 'function'} 0.006431 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.988577 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.994308 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.987635 \n", "\n", " \\\n", " Machine clears_q1(0.25, 0.5, 0.75) \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.001899 \n", "{'name': 'Algorithm', 'type': 'function'} 0.002446 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.968337 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.988979 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.884621 \n", "\n", " \\\n", " Machine clears_q2(0.25, 0.5, 0.75) \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.003061 \n", "{'name': 'Algorithm', 'type': 'function'} 0.004810 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.984356 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.991464 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.925987 \n", "\n", " \\\n", " Machine clears_q3(0.25, 0.5, 0.75) \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.003612 \n", "{'name': 'Algorithm', 'type': 'function'} 0.006431 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.988577 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.994308 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.987635 \n", "\n", " \\\n", " Machine clears_std \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.001155 \n", "{'name': 'Algorithm', 'type': 'function'} 0.004414 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.012691 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.005403 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.072369 \n", "\n", " \\\n", " Machine clears_upperfence(0.25, 0.5, 0.75) \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.006181 \n", "{'name': 'Algorithm', 'type': 'function'} 0.012409 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 1.018938 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 1.002301 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 1.142155 \n", "\n", " \\\n", " Machine clears_var \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} 0.000001 \n", "{'name': 'Algorithm', 'type': 'function'} 0.000019 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} 0.000161 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.000029 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... 0.005237 \n", "\n", " Union statistics \\\n", " time (exc)_vs_Machine clears spearman \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} -0.030303 \n", "{'name': 'Algorithm', 'type': 'function'} 0.158055 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} -0.381818 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} 0.066667 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... -0.030303 \n", "\n", " name \n", " \n", "node \n", "{'name': 'RAJAPerf', 'type': 'function'} RAJAPerf \n", "{'name': 'Algorithm', 'type': 'function'} Algorithm \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} Algorithm_MEMCPY \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} Algorithm_MEMSET \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... Algorithm_REDUCE_SUM " ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "th.stats.calc_boxplot_statistics(combined_th, columns=metrics)\n", "combined_th.statsframe.dataframe.head(5)" ] }, { "cell_type": "markdown", "id": "be2704b4", "metadata": { "papermill": { "duration": 0.009726, "end_time": "2024-09-06T18:35:20.666060", "exception": false, "start_time": "2024-09-06T18:35:20.656334", "status": "completed" }, "tags": [] }, "source": [ "## 6. Visualization Thicket Functions" ] }, { "cell_type": "markdown", "id": "48ce9f45", "metadata": { "papermill": { "duration": 0.009299, "end_time": "2024-09-06T18:35:20.685137", "exception": false, "start_time": "2024-09-06T18:35:20.675838", "status": "completed" }, "tags": [] }, "source": [ "### 6.1 Displaying Heatmap\n", "\n", "The `display_heatmap` function will display a color encoded map with the color representing the magnitude of the value for that specific node and column cell.
\n", "\n", "Columns must be from the aggregated statistics table." ] }, { "cell_type": "markdown", "id": "557687f5", "metadata": { "papermill": { "duration": 0.009294, "end_time": "2024-09-06T18:35:20.703935", "exception": false, "start_time": "2024-09-06T18:35:20.694641", "status": "completed" }, "tags": [] }, "source": [ "**Single Index Thicket Example**" ] }, { "cell_type": "code", "execution_count": 46, "id": "3d624af5", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:20.723110Z", "iopub.status.busy": "2024-09-06T18:35:20.723003Z", "iopub.status.idle": "2024-09-06T18:35:20.799815Z", "shell.execute_reply": "2024-09-06T18:35:20.799358Z" }, "papermill": { "duration": 0.087473, "end_time": "2024-09-06T18:35:20.800779", "exception": false, "start_time": "2024-09-06T18:35:20.713306", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "# filter nodes to first five entries in the aggregated statistics table\n", "stats_nodes = [\n", " \"Base_Seq\", \n", " \"Algorithm\", \n", " \"Algorithm_MEMCPY\", \n", "]\n", "th_stats_name = clang_th.filter_stats(lambda x: x[\"name\"] in stats_nodes)" ] }, { "cell_type": "code", "execution_count": 47, "id": "be3ae0ad", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:20.824653Z", "iopub.status.busy": "2024-09-06T18:35:20.824516Z", "iopub.status.idle": "2024-09-06T18:35:20.934939Z", "shell.execute_reply": "2024-09-06T18:35:20.934477Z" }, "papermill": { "duration": 0.123134, "end_time": "2024-09-06T18:35:20.935701", "exception": false, "start_time": "2024-09-06T18:35:20.812567", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(30, 30))\n", "metrics = [\"time (exc)_std\", \"time (exc)_var\"]\n", "th.stats.display_heatmap(th_stats_name, columns=metrics)" ] }, { "cell_type": "markdown", "id": "7e27bc97", "metadata": { "papermill": { "duration": 0.011998, "end_time": "2024-09-06T18:35:20.959656", "exception": false, "start_time": "2024-09-06T18:35:20.947658", "status": "completed" }, "tags": [] }, "source": [ "**Multi-Indexed Thicket Example**\n", "\n", "Example will show how to pass a columnar joined thicket object. When passing a columnar joined thicket object, the columns argument will now take a list of tuples. Each tuple will consist of two elements. The first element will always be the column index, and the second element will be an associated column under the column index you passed.
\n", "\n", " - Example: (column_index, column_name) -> (\"GCC\", \"Machine clears\")" ] }, { "cell_type": "code", "execution_count": 48, "id": "d1a71861", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:20.982618Z", "iopub.status.busy": "2024-09-06T18:35:20.982492Z", "iopub.status.idle": "2024-09-06T18:35:21.406082Z", "shell.execute_reply": "2024-09-06T18:35:21.405648Z" }, "papermill": { "duration": 0.435984, "end_time": "2024-09-06T18:35:21.406847", "exception": false, "start_time": "2024-09-06T18:35:20.970863", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(30, 30))\n", "metrics = [(\"Clang\", \"time (exc)_std\"), (\"Clang\", \"time (exc)_var\")]\n", "th.stats.display_heatmap(combined_th, columns=metrics)" ] }, { "cell_type": "markdown", "id": "3fa68403", "metadata": { "papermill": { "duration": 0.012965, "end_time": "2024-09-06T18:35:21.433157", "exception": false, "start_time": "2024-09-06T18:35:21.420192", "status": "completed" }, "tags": [] }, "source": [ "**Example of Not Passing the Same Column Index for Multi-Indexed Thicket**" ] }, { "cell_type": "code", "execution_count": 49, "id": "330c37f0", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:21.460839Z", "iopub.status.busy": "2024-09-06T18:35:21.460706Z", "iopub.status.idle": "2024-09-06T18:35:21.462775Z", "shell.execute_reply": "2024-09-06T18:35:21.462479Z" }, "papermill": { "duration": 0.017056, "end_time": "2024-09-06T18:35:21.463399", "exception": false, "start_time": "2024-09-06T18:35:21.446343", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "#metrics = [(\"Clang\", \"time (exc)_std\"), (\"GCC\", \"Machine clears_var\")]\n", "#th.stats.display_heatmap(combined_th, columns=metrics)" ] }, { "cell_type": "markdown", "id": "0239b646", "metadata": { "papermill": { "duration": 0.013197, "end_time": "2024-09-06T18:35:21.489843", "exception": false, "start_time": "2024-09-06T18:35:21.476646", "status": "completed" }, "tags": [] }, "source": [ "### 6.2 Displaying Histogram\n", "\n", "The `display_histogram` function will display a histogram for a user passed node and columns. Node and column must come from the performance data table.
\n", "\n", "A histogram allows for a user to see outliers and the overall distribution of their data." ] }, { "cell_type": "code", "execution_count": 50, "id": "e705c8a7", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:21.518770Z", "iopub.status.busy": "2024-09-06T18:35:21.518548Z", "iopub.status.idle": "2024-09-06T18:35:21.524214Z", "shell.execute_reply": "2024-09-06T18:35:21.523670Z" }, "papermill": { "duration": 0.022138, "end_time": "2024-09-06T18:35:21.525288", "exception": false, "start_time": "2024-09-06T18:35:21.503150", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "# Getting nodes to pass\n", "n = pd.unique(combined_th.dataframe.reset_index()[\"node\"])[4]" ] }, { "cell_type": "markdown", "id": "bc89da43", "metadata": { "papermill": { "duration": 0.014702, "end_time": "2024-09-06T18:35:21.554074", "exception": false, "start_time": "2024-09-06T18:35:21.539372", "status": "completed" }, "tags": [] }, "source": [ "**Single Index Thicket Example**" ] }, { "cell_type": "code", "execution_count": 51, "id": "2deabc3b", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:21.580003Z", "iopub.status.busy": "2024-09-06T18:35:21.579857Z", "iopub.status.idle": "2024-09-06T18:35:21.626852Z", "shell.execute_reply": "2024-09-06T18:35:21.626509Z" }, "papermill": { "duration": 0.060491, "end_time": "2024-09-06T18:35:21.627458", "exception": false, "start_time": "2024-09-06T18:35:21.566967", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "array([[]], dtype=object)" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(30, 30))\n", "th.stats.display_histogram(\n", " clang_th,\n", " node=n,\n", " column=\"Machine clears\",\n", " bins=3,\n", " grid=False,\n", " edgecolor=\"black\"\n", ")" ] }, { "cell_type": "markdown", "id": "cb657ba2", "metadata": { "papermill": { "duration": 0.011939, "end_time": "2024-09-06T18:35:21.651573", "exception": false, "start_time": "2024-09-06T18:35:21.639634", "status": "completed" }, "tags": [] }, "source": [ "**Multi-Indexed Thicket Example**\n", "\n", "Example will show how to pass a columnar joined thicket object. When passing a columnar joined thicket object, the columns argument will now take a list of tuples. Each tuple will consist of two elements. The first element will always be the column index, and the second element will be an associated column under the column index you passed.
\n", "\n", " - Example: (column_index, column_name) -> (\"GCC\", \"Machine clears\")" ] }, { "cell_type": "code", "execution_count": 52, "id": "94fb6edb", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:21.676738Z", "iopub.status.busy": "2024-09-06T18:35:21.676635Z", "iopub.status.idle": "2024-09-06T18:35:21.721764Z", "shell.execute_reply": "2024-09-06T18:35:21.721450Z" }, "papermill": { "duration": 0.058283, "end_time": "2024-09-06T18:35:21.722361", "exception": false, "start_time": "2024-09-06T18:35:21.664078", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "array([[]],\n", " dtype=object)" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" }, { "data": { "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(30, 30))\n", "th.stats.display_histogram(\n", " combined_th,\n", " node=n,\n", " column=(\"Clang\", \"Machine clears\"),\n", " bins=3,\n", " grid=False,\n", " edgecolor=\"black\"\n", ")" ] }, { "cell_type": "markdown", "id": "8d7211b3", "metadata": { "papermill": { "duration": 0.012107, "end_time": "2024-09-06T18:35:21.746726", "exception": false, "start_time": "2024-09-06T18:35:21.734619", "status": "completed" }, "tags": [] }, "source": [ "**Example of Error if Not Passing a Hatchet Node**" ] }, { "cell_type": "code", "execution_count": 53, "id": "97beae7f", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:21.771906Z", "iopub.status.busy": "2024-09-06T18:35:21.771800Z", "iopub.status.idle": "2024-09-06T18:35:21.773772Z", "shell.execute_reply": "2024-09-06T18:35:21.773418Z" }, "papermill": { "duration": 0.015396, "end_time": "2024-09-06T18:35:21.774386", "exception": false, "start_time": "2024-09-06T18:35:21.758990", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "# n = \"not_hatchet_node\"\n", "# th.stats.display_histogram(\n", "# combined_th,\n", "# node=n,\n", "# column=(\"Clang\", \"Machine clears\")\n", "# )" ] }, { "cell_type": "markdown", "id": "3835995d", "metadata": { "papermill": { "duration": 0.012458, "end_time": "2024-09-06T18:35:21.800094", "exception": false, "start_time": "2024-09-06T18:35:21.787636", "status": "completed" }, "tags": [] }, "source": [ "### 6.3 Displaying Boxplot\n", "\n", "The `display_boxplot` function will display a boxplot for each passed in node(s) and column(s). The passed nodes and columns must be from the performance data table. " ] }, { "cell_type": "code", "execution_count": 54, "id": "92e9574a", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:21.825570Z", "iopub.status.busy": "2024-09-06T18:35:21.825452Z", "iopub.status.idle": "2024-09-06T18:35:21.829706Z", "shell.execute_reply": "2024-09-06T18:35:21.829469Z" }, "papermill": { "duration": 0.017716, "end_time": "2024-09-06T18:35:21.830308", "exception": false, "start_time": "2024-09-06T18:35:21.812592", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "# Getting nodes to pass\n", "n = pd.unique(combined_th.dataframe.reset_index()[\"node\"])[0:2].tolist()" ] }, { "cell_type": "markdown", "id": "c90df96a", "metadata": { "papermill": { "duration": 0.013142, "end_time": "2024-09-06T18:35:21.855965", "exception": false, "start_time": "2024-09-06T18:35:21.842823", "status": "completed" }, "tags": [] }, "source": [ "**Single Index Thicket Example**" ] }, { "cell_type": "code", "execution_count": 55, "id": "e8b4c726", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:21.881962Z", "iopub.status.busy": "2024-09-06T18:35:21.881854Z", "iopub.status.idle": "2024-09-06T18:35:22.016900Z", "shell.execute_reply": "2024-09-06T18:35:22.016535Z" }, "papermill": { "duration": 0.148404, "end_time": "2024-09-06T18:35:22.017491", "exception": false, "start_time": "2024-09-06T18:35:21.869087", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABr0AAAaMCAYAAACilFdBAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAAsTAAALEwEAmpwYAABiNUlEQVR4nOzde7RddX33+8+PHRAE5EAS8JSooR0+cstOAuESEQxggMdiagDReCOlSKGDQu0Ri1ZFrVqrHIvghVIH5lG5C9SoQDFKGkCoCSFQCVRSjBCqEGLkogaSMM8fwD4hhBAgi91veL3GyGDPOX9zru9a6883c67WdV0AAAAAAACgso0GewAAAAAAAAB4oUQvAAAAAAAAyhO9AAAAAAAAKE/0AgAAAAAAoDzRCwAAAAAAgPJELwAAAAAAAMobMtgDPFfDhg3rRo4cOdhjAAAAAAAA8CK78cYb7++6bviajpWLXiNHjsycOXMGewwAAAAAAABeZK21XzzTMY83BAAAAAAAoDzRCwAAAAAAgPJELwAAAAAAAMor95teAAAAAAAASbJ8+fIsWrQoy5YtG+xRWM823XTTjBgxIhtvvPE6nyN6AQAAAAAAJS1atChbbrllRo4cmdbaYI/DetJ1XZYsWZJFixZlhx12WOfzPN4QAAAAAAAoadmyZRk6dKjgtYFprWXo0KHP+Q4+0QsAAAAAAChL8NowPZ/vVfQCAAAAAAA2WH19fRkzZkx23XXXvO1tb8vvfve753T+ySefnF122SUnn3xyjybcMMycOTM//vGPB3UG0QsAAAAAANhgbbbZZpk3b15++tOfZpNNNslZZ521TuetWLEiSXL22Wfnlltuyec///nndN5LzfOJXuv7sxK9AAAAAACAl4R99903CxYsyG9/+9scffTR2XPPPTN27Nh85zvfSZJMmzYtkyZNygEHHJADDzwwkyZNysMPP5zdd989F154YRYuXJgDDjgg/f39OfDAA3PXXXclSaZOnZrjjjsue+21Vz74wQ9m6tSpOf7447P33nvnD//wDzNz5swcffTR2WmnnTJ16tSBeY4//viMGzcuu+yyS0499dSB/SNHjsypp56a3XbbLaNGjcrtt9+eJHn44Yfzp3/6pxk1alT6+/tzySWXJEmuuuqqjB8/Prvttlve9ra35eGHH37ae1+wYEHe9KY3ZfTo0dltt93yX//1X+m6LieffHJ23XXXjBo1KhdeeGGSxwPWoYceOnDuCSeckGnTpj3jbAsXLsxZZ52Vf/zHf8yYMWNyzTXXZPHixTn88MOzxx57ZI899sh1112XJPn4xz+e97znPdlnn33ynve8Zz19s48bsl6vBgAAAAAA8D/QihUrcsUVV+SQQw7Jpz/96RxwwAE555xz8pvf/CZ77rln3vSmNyVJ5s6dm1tuuSXbbLNNkmSLLbbIvHnzkiRvectbctRRR+Woo47KOeeckxNPPDH/8i//kiRZtGhRfvzjH6evry9Tp07N0qVLc/3112f69OmZNGlSrrvuunzta1/LHnvskXnz5mXMmDH59Kc/nW222SYrV67MgQcemFtuuSX9/f1JkmHDhmXu3Ln5yle+ktNOOy1f+9rX8nd/93fZaqut8h//8R9JkqVLl+b+++/Ppz71qcyYMSObb755/uEf/iFf+MIX8rGPfewp7/9d73pXTjnllEyePDnLli3LY489lksvvTTz5s3LzTffnPvvvz977LFH9ttvv2f9LNc023HHHZctttgiH/jAB5Ik73znO/P+978/b3jDG3LXXXfl4IMPzm233ZYkmT9/fq699tpsttlmL+xLXY3oBQAAAAAAbLB+//vfZ8yYMUkev9Prz/7sz/L6178+06dPz2mnnZYkWbZs2cBdWxMnThwIXqu7/vrrc+mllyZJ3vOe9+SDH/zgwLG3ve1t6evrG9h+y1vektZaRo0ale222y6jRo1Kkuyyyy5ZuHBhxowZk4suuihnn312VqxYkV/+8peZP3/+QPQ67LDDkiS77777wGvOmDEjF1xwwcBrbL311vne976X+fPnZ5999kmSPProoxk/fvxT5n7ooYdyzz33ZPLkyUmSTTfdNEly7bXXZsqUKenr68t2222XN77xjZk9e3Ze8YpXrPUzXdNsq5sxY0bmz58/sP3ggw8O3IE2adKk9R68EtELAAAAAADYgD35m16r6roul1xySV73utc9Zf+///u/Z/PNN39er7P6eS972cuSJBtttNHA309ur1ixIj//+c9z2mmnZfbs2dl6660zderULFu27Gnn9/X1rfW3r7quy8SJE3P++ec/r7nXZMiQIXnssccGtleda11ne+yxx3LDDTcMBLZVPd/P+Nn4TS8AAAAAAOAl5eCDD86ZZ56ZruuSJDfddNM6nff6179+4E6rc889N/vuu+/znuHBBx/M5ptvnq222ir33ntvrrjiimc9Z+LEifnyl788sL106dLsvffeue6667JgwYIkyW9/+9v87Gc/e8p5W265ZUaMGDHwKMZHHnkkv/vd77LvvvvmwgsvzMqVK7N48eLMmjUre+65Z17zmtdk/vz5eeSRR/Kb3/wmP/zhD591ti233DIPPfTQwPZBBx2UM888c2B79fDYC6IXAAAAAADwkvLRj340y5cvT39/f3bZZZd89KMfXafzzjzzzHz9619Pf39/vvnNb+aLX/zi855h9OjRGTt2bHbccce8853vHHg84dp85CMfydKlS7Prrrtm9OjRufrqqzN8+PBMmzYtU6ZMSX9/f8aPH5/bb7/9aed+85vfzBlnnJH+/v68/vWvz69+9atMnjw5/f39GT16dA444IB87nOfyytf+cq86lWvypFHHpldd901Rx55ZMaOHfuss73lLW/JZZddljFjxuSaa67JGWeckTlz5qS/vz8777xzzjrrrOf1OT0X7cmKWcW4ceO6OXPmDPYYAAAAAADAILvtttuy0047DfYY9Miavt/W2o1d141b03p3egEAAAAAAFCe6AUAAAAAAEB5ohcAAAAAAADliV4AAAAAAACUJ3oBAAAAAABQnugFAAAAAABAeaIXAAAAAADA89Ray7vf/e6B7RUrVmT48OE59NBDn9f1Ro4cmfvvv/9p+6dPn57Pfvazz3vOZzNt2rSccMIJPbv+i2HIYA8AAAAAAACwPkw+/IgsXfL0YPR8bT10WC675NtrXbP55pvnpz/9aX7/+99ns802yw9+8INsv/32622GJ02aNCmTJk1a79dd31asWJEhQwYnP4leAAAAAADABmHpkvvz0B5Hr78Lzj5nnZa9+c1vzve///0cccQROf/88zNlypRcc801SZKf/OQnOemkk7Js2bJsttlm+frXv57Xve51WblyZf7mb/4mV155ZTbaaKO8733vy1/+5V8mSc4888x897vfzfLly3PxxRdnxx13zLRp0zJnzpx86UtfytSpU/OKV7wic+bMya9+9at87nOfyxFHHJEk+fznP5+LLroojzzySCZPnpxPfOITT5v3yiuvzIc//OGsXLkyw4YNyw9/+MOnHF+8eHGOO+643HXXXUmS008/Pfvss88zvpdp06bl0ksvzcMPP5yVK1fmggsuyNvf/vY8+OCDWbFiRb761a9m3333fd5fw7ryeEMAAAAAAIAX4B3veEcuuOCCLFu2LLfcckv22muvgWM77rhjrrnmmtx000355Cc/mQ9/+MNJkrPPPjsLFy7MvHnzcsstt+Rd73rXwDnDhg3L3Llzc/zxx+e0005b42v+8pe/zLXXXpvvfe97OeWUU5IkV111Ve6444785Cc/ybx583LjjTdm1qxZTzlv8eLFed/73pdLLrkkN998cy6++OKnXfukk07K+9///syePTuXXHJJjjnmmLW+lySZO3duvv3tb+ff/u3fct555+Xggw/OvHnzcvPNN2fMmDHP74N9jtzpBQAAAAAA8AL09/dn4cKFOf/88/PmN7/5KcceeOCBHHXUUbnjjjvSWsvy5cuTJDNmzMhxxx038CjAbbbZZuCcww47LEmy++6759JLL13ja771rW/NRhttlJ133jn33ntvksej11VXXZWxY8cmSR5++OHccccd2W+//QbOu+GGG7Lffvtlhx12eNrrPmnGjBmZP3/+wPaDDz6Yhx9++BnfS5JMnDhx4Fp77LFHjj766CxfvjxvfetbRS8AAAAAAIAqJk2alA984AOZOXNmlixZMrD/ox/9aPbff/9cdtllWbhwYSZMmPCs13rZy16WJOnr68uKFSvWuiZJuq4b+O+HPvSh/Pmf//kLeCfJY489lhtuuCGbbrrpU/afcMIJz/heNt9884G/99tvv8yaNSvf//73M3Xq1Pz1X/913vve976gmdaFxxsCAAAAAAC8QEcffXROPfXUjBo16in7H3jggWy//fZJkmnTpg3snzhxYv7pn/5pIGr9+te/fsEzHHzwwTnnnHPy8MMPJ0nuueee3HfffU9Zs/fee2fWrFn5+c9//oyve9BBB+XMM88c2J43b95a38vqfvGLX2S77bbL+973vhxzzDGZO3fuC3lb60z0AgAAAAAAeIFGjBiRE0888Wn7P/jBD+ZDH/pQxo4d+5S7to455pi8+tWvTn9/f0aPHp3zzjvvBc9w0EEH5Z3vfGfGjx+fUaNG5YgjjshDDz30lDXDhw/P2WefncMOOyyjR4/O29/+9qdd54wzzsicOXPS39+fnXfeOWedddZa38vqZs6cmdGjR2fs2LG58MILc9JJJ73g97Yu2pO3vFUxbty4bs6cOYM9BgAAAAAAMMhuu+227LTTTgPbkw8/IkuX3L/err/10GG57JJvr7fr8dys/v0mSWvtxq7rxq1pvd/0AgAAAAAANggC1UubxxsCAAAAAABQnugFAAAAAABAeaIXAAAAAAAA5YleAAAAAAAAlCd6AQAAAAAAUJ7oBQAAAAAA8Dz19fVlzJgxA/8WLlz4gq95+umn53e/+90LH+4JI0eOzP3337/O+1f1mc98Zr3N0WtDennx1tohSb6YpC/J17qu++xqx1+d5P8k+b+eWHNK13WX93ImAAAAAABgw3Tk4ZNz35Kl6+162w7dOhddctla12y22WaZN2/eGo91XZeu67LRRs/tHqTTTz897373u/Pyl7/8OZ3XC5/5zGfy4Q9/eLDHWCc9i16ttb4kX04yMcmiJLNba9O7rpu/yrKPJLmo67qvttZ2TnJ5kpG9mgkAAAAAANhw3bdkab5xwJL1dr33/ui5n7Nw4cIcfPDB2WuvvXLjjTfm8ssvz5e+9KVcccUVaa3lIx/5SN7+9rdn5syZ+fjHP55hw4blpz/9aXbfffd861vfyplnnpn//u//zv77759hw4bl6quvzlVXXZVTTz01jzzySP7oj/4oX//617PFFltk5MiROeqoo/Ld7343y5cvz8UXX5wdd9wxS5YsyZQpU3LPPfdk/Pjx6bruWed+61vfmrvvvjvLli3LSSedlGOPPTannHJKfv/732fMmDHZZZddcu655+Zb3/pWzjjjjDz66KPZa6+98pWvfCV9fX3ZYostctJJJ+V73/teNttss3znO9/Jdtttl3vvvTfHHXdc7rzzziTJV7/61Vx55ZXZZptt8ld/9VdJkr/927/Ntttum5NOOum5f+Cr6OXjDfdMsqDruju7rns0yQVJ/mS1NV2SVzzx91ZJ/ruH8wAAAAAAAKxXT0ahMWPGZPLkyUmSO+64I3/xF3+RW2+9NXPmzMm8efNy8803Z8aMGTn55JPzy1/+Mkly00035fTTT8/8+fNz55135rrrrsuJJ56YP/iDP8jVV1+dq6++Ovfff38+9alPZcaMGZk7d27GjRuXL3zhCwOvP2zYsMydOzfHH398TjvttCTJJz7xibzhDW/IrbfemsmTJ+euu+561vdxzjnn5MYbb8ycOXNyxhlnZMmSJfnsZz87cCfbueeem9tuuy0XXnhhrrvuusybNy99fX0599xzkyS//e1vs/fee+fmm2/Ofvvtl3/+539Okpx44ol54xvfmJtvvjlz587NLrvskqOPPjrf+MY3kiSPPfZYLrjggrz73e9+wd9FLx9vuH2Su1fZXpRkr9XWfDzJVa21v0yyeZI39XAeAAAAAACA9Wr1xxsuXLgwr3nNa7L33nsnSa699tpMmTIlfX192W677fLGN74xs2fPzite8YrsueeeGTFiRJIM/B7YG97whqdc/4Ybbsj8+fOzzz77JEkeffTRjB8/fuD4YYcdliTZfffdc+mllyZJZs2aNfD3H//xH2frrbd+1vdxxhln5LLLHn+U491335077rgjQ4cOfcqaH/7wh7nxxhuzxx57JHk8+G277bZJkk022SSHHnrowCw/+MEPkiQ/+tGPBgJXX19fttpqq2y11VYZOnRobrrpptx7770ZO3bs017r+ejpb3qtgylJpnVd9/+21sYn+WZrbdeu6x5bdVFr7dgkxybJq1/96kEYEwAAAAAAYN1svvnm67TuZS972cDffX19WbFixdPWdF2XiRMn5vzzz1/rNZ7p/HUxc+bMzJgxI9dff31e/vKXZ8KECVm2bNkaZznqqKPy93//9087tvHGG6e1ts6zHHPMMZk2bVp+9atf5eijj35ec6+ul483vCfJq1bZHvHEvlX9WZKLkqTruuuTbJpk2OoX6rru7K7rxnVdN2748OE9GhcAAAAAAGD92nfffXPhhRdm5cqVWbx4cWbNmpU999xzredsueWWeeihh5Ike++9d6677rosWLAgyeOPEfzZz3621vP322+/nHfeeUmSK664IkuXLl3r+gceeCBbb711Xv7yl+f222/PDTfcMHBs4403zvLly5MkBx54YL797W/nvvvuS5L8+te/zi9+8Yu1XvvAAw/MV7/61STJypUr88ADDyRJJk+enCuvvDKzZ8/OwQcfvNZrrKteRq/ZSV7bWtuhtbZJknckmb7amruSHJgkrbWd8nj0WtzDmQAAAAAAAF40kydPTn9/f0aPHp0DDjggn/vc5/LKV75yrecce+yxOeSQQ7L//vtn+PDhmTZtWqZMmZL+/v6MHz8+t99++1rPP/XUUzNr1qzssssuufTSS5/1KXqHHHJIVqxYkZ122imnnHLKwKMZn5ylv78/73rXu7LzzjvnU5/6VA466KD09/dn4sSJA79P9ky++MUv5uqrr86oUaOy++67Z/78+Ukefxzi/vvvnyOPPDJ9fX1rvca6al3XrZcLrfHirb05yelJ+pKc03Xdp1trn0wyp+u66a21nZP8c5ItknRJPth13VVru+a4ceO6OXPm9GxmAAAAAACghttuuy077bTTwPaRh0/OfUvWflfTc7Ht0K1z0SWXrbfr8f977LHHsttuu+Xiiy/Oa1/72jWuWf37TZLW2o1d141b0/qe/qZX13WXJ7l8tX0fW+Xv+Un26eUMAAAAAADAS4NAVcP8+fNz6KGHZvLkyc8YvJ6PnkYvAAAAAAAAWNXOO++cO++8c71ft5e/6QUAAAAAAAAvCtELAAAAAAAoq+u6wR6BHng+36voBQAAAAAAlLTppptmyZIlwtcGpuu6LFmyJJtuuulzOs9vegEAAAAAACWNGDEiixYtyuLFiwd7FNazTTfdNCNGjHhO54heAAAAAABASRtvvHF22GGHwR6D/yE83hAAAAAAAIDyRC8AAAAAAADKE70AAAAAAAAoT/QCAAAAAACgPNELAAAAAACA8kQvAAAAAAAAyhO9AAAAAAAAKE/0AgAAAAAAoDzRCwAAAAAAgPJELwAAAAAAAMoTvQAAAAAAAChP9AIAAAAAAKA80QsAAAAAAIDyRC8AAAAAAADKE70AAAAAAAAoT/QCAAAAAACgPNELAAAAAACA8kQvAAAAAAAAyhO9AAAAAAAAKG/IYA8AAAAAAPBSNGHChMEeAdZq5syZgz0CPCeiFwAAAADAIBAU1q8JEyb4TOElzuMNAQAAAAAAKE/0AgAAAAAAoDzRCwAAAAAAgPJELwAAAAAAAMoTvQAAAAAAAChP9AIAAAAAAKA80QsAAAAAAIDyRC8AAAAAAADKE70AAAAAAAAoT/QCAAAAAACgPNELAAAAAACA8kQvAAAAAAAAyhO9AAAAAAAAKE/0AgAAAAAAoDzRCwAAAAAAgPJELwAAAAAAAMoTvQAAAAAAAChP9AIAAAAAAKA80QsAAAAAAIDyRC8AAAAAAADKE70AAAAAAAAoT/QCAAAAAACgPNELAAAAAACA8kQvAAAAAAAAyhO9AAAAAAAAKE/0AgAAAAAAoDzRCwAAAAAAgPJELwAAAAAAAMoTvQAAAAAAAChP9AIAAAAAAKA80QsAAAAAAIDyRC8AAAAAAADKE70AAAAAAAAoT/QCAAAAAACgPNELAAAAAACA8kQvAAAAAAAAyhO9AAAAAAAAKE/0AgAAAAAAoDzRCwAAAAAAgPJELwAAAAAAAMoTvQAAAAAAAChP9AIAAAAAAKA80QsAAAAAAIDyRC8AAAAAAADKE70AAAAAAAAoT/QCAAAAAACgPNELAAAAAACA8kQvAAAAAAAAyhO9AAAAAAAAKE/0AgAAAAAAoDzRCwAAAAAAgPJELwAAAAAAAMoTvQAAAAAAAChP9AIAAAAAAKA80QsAAAAAAIDyRC8AAAAAAADKE70AAAAAAAAoT/QCAAAAAACgPNELAAAAAACA8kQvAAAAAAAAyhO9AAAAAAAAKE/0AgAAAAAAoDzRCwAAAAAAgPJELwAAAAAAAMoTvQAAAAAAAChP9AIAAAAAAKA80QsAAAAAAIDyRC8AAAAAAADKE70AAAAAAAAoT/QCAAAAAACgPNELAAAAAACA8kQvAAAAAAAAyhO9AAAAAAAAKE/0AgAAAAAAoDzRCwAAAAAAgPJELwAAAAAAAMoTvQAAAAAAAChP9AIAAAAAAKA80QsAAAAAAIDyRC8AAAAAAADKE70AAAAAAAAoT/QCAAAAAACgPNELAAAAAACA8kQvAAAAAAAAyhO9AAAAAAAAKE/0AgAAAAAAoDzRCwAAAAAAgPJELwAAAAAAAMoTvQAAAAAAAChP9AIAAAAAAKA80QsAAAAAAIDyRC8AAAAAAADKE70AAAAAAAAoT/QCAAAAAACgPNELAAAAAACA8kQvAAAAAAAAyhO9AAAAAAAAKE/0AgAAAAAAoDzRCwAAAAAAgPJELwAAAAAAAMoTvQAAAAAAAChP9AIAAAAAAKA80QsAAAAAAIDyRC8AAAAAAADKE70AAAAAAAAoT/QCAAAAAACgPNELAAAAAACA8kQvAAAAAAAAyhO9AAAAAAAAKE/0AgAAAAAAoDzRCwAAAAAAgPJELwAAAAAAAMoTvQAAAAAAAChP9AIAAAAAAKA80QsAAAAAAIDyRC8AAAAAAADKE70AAAAAAAAoT/QCAAAAAACgPNELAAAAAACA8kQvAAAAAAAAyhO9AAAAAAAAKE/0AgAAAAAAoDzRCwAAAAAAgPJELwAAAAAAAMoTvQAAAAAAAChP9AIAAAAAAKA80QsAAAAAAIDyRC8AAAAAAADKE70AAAAAAAAoT/QCAAAAAACgPNELAAAAAACA8kQvAAAAAAAAyhO9AAAAAAAAKE/0AgAAAAAAoDzRCwAAAAAAgPJELwAAAAAAAMoTvQAAAAAAAChP9AIAAAAAAKA80QsAAAAAAIDyRC8AAAAAAADKE70AAAAAAAAoT/QCAAAAAACgPNELAAAAAACA8kQvAAAAAAAAyhO9AAAAAAAAKE/0AgAAAAAAoDzRCwAAAAAAgPJELwAAAAAAAMoTvQAAAAAAAChP9AIAAAAAAKA80QsAAAAAAIDyRC8AAAAAAADKE70AAAAAAAAor6fRq7V2SGvtP1trC1prp6zh+D+21uY98e9nrbXf9HIeAAAAAAAANkxDenXh1lpfki8nmZhkUZLZrbXpXdfNf3JN13XvX2X9XyYZ26t5AAAAAAAA2HD18k6vPZMs6Lruzq7rHk1yQZI/Wcv6KUnO7+E8AAAAAAAAbKB6Gb22T3L3KtuLntj3NK211yTZIcmPejgPAAAAAAAAG6ie/qbXc/COJN/uum7lmg621o5trc1prc1ZvHjxizwaAAAAAAAA/9P1Mnrdk+RVq2yPeGLfmrwja3m0Ydd1Z3ddN67runHDhw9fjyMCAAAAAACwIehl9Jqd5LWttR1aa5vk8bA1ffVFrbUdk2yd5PoezgIAAAAAAMAGrGfRq+u6FUlOSPKvSW5LclHXdbe21j7ZWpu0ytJ3JLmg67quV7MAAAAAAACwYRvSy4t3XXd5kstX2/ex1bY/3ssZAAAAAAAA2PD18vGGAAAAAAAA8KIQvQAAAAAAAChP9AIAAAAAAKA80QsAAAAAAIDyRC8AAAAAAADKE70AAAAAAAAoT/QCAAAAAACgPNELAAAAAACA8kQvAAAAAAAAyhO9AAAAAAAAKE/0AgAAAAAAoDzRCwAAAAAAgPJELwAAAAAAAMoTvQAAAAAAAChP9AIAAAAAAKA80QsAAAAAAIDyRC8AAAAAAADKE70AAAAAAAAoT/QCAAAAAACgPNELAAAAAACA8kQvAAAAAAAAyhO9AAAAAAAAKE/0AgAAAAAAoDzRCwAAAAAAgPJELwAAAAAAAMoTvQAAAAAAAChP9AIAAAAAAKC8IYM9AAAAAABQx5GHT859S5YO9hiwRhMmTBjsEeBpth26dS665LLBHuMlQfQCAAAAANbZfUuW5hsHLBnsMQDKeO+PBnuClw6PNwQAAAAAAKA80QsAAAAAAIDyRC8AAAAAAADKE70AAAAAAAAoT/QCAAAAAACgPNELAAAAAACA8kQvAAAAAAAAyhO9AAAAAAAAKE/0AgAAAAAAoDzRCwAAAAAAgPJELwAAAAAAAMoTvQAAAAAAAChP9AIAAAAAAKA80QsAAAAAAIDyRC8AAAAAAADKE70AAAAAAAAoT/QCAAAAAACgPNELAAAAAACA8kQvAAAAAAAAyhO9AAAAAAAAKE/0AgAAAAAAoDzRCwAAAAAAgPJELwAAAAAAAMoTvQAAAAAAAChP9AIAAAAAAKA80QsAAAAAAIDyRC8AAAAAAADKE70AAAAAAAAoT/QCAAAAAACgPNELAAAAAACA8kQvAAAAAAAAyhO9AAAAAAAAKE/0AgAAAAAAoDzRCwAAAAAAgPJELwAAAAAAAMoTvQAAAAAAAChP9AIAAAAAAKA80QsAAAAAAIDyRC8AAAAAAADKE70AAAAAAAAoT/QCAAAAAACgPNELAAAAAACA8kQvAAAAAAAAyhO9AAAAAAAAKE/0AgAAAAAAoDzRCwAAAAAAgPJELwAAAAAAAMoTvQAAAAAAAChP9AIAAAAAAKA80QsAAAAAAIDyRC8AAAAAAADKE70AAAAAAAAoT/QCAAAAAACgPNELAAAAAACA8kQvAAAAAAAAyhO9AAAAAAAAKE/0AgAAAAAAoDzRCwAAAAAAgPJELwAAAAAAAMoTvQAAAAAAAChP9AIAAAAAAKA80QsAAAAAAIDyRC8AAAAAAADKE70AAAAAAAAoT/QCAAAAAACgPNELAAAAAACA8kQvAAAAAAAAyhO9AAAAAAAAKE/0AgAAAAAAoDzRCwAAAAAAgPJELwAAAAAAAMoTvQAAAAAAAChP9AIAAAAAAKA80QsAAAAAAIDyRC8AAAAAAADKE70AAAAAAAAoT/QCAAAAAACgPNELAAAAAACA8kQvAAAAAAAAyhO9AAAAAAAAKE/0AgAAAAAAoDzRCwAAAAAAgPJELwAAAAAAAMoTvQAAAAAAAChP9AIAAAAAAKA80QsAAAAAAIDyRC8AAAAAAADKE70AAAAAAAAoT/QCAAAAAACgPNELAAAAAACA8kQvAAAAAAAAyhO9AAAAAAAAKE/0AgAAAAAAoDzRCwAAAAAAgPJELwAAAAAAAMoTvQAAAAAAAChP9AIAAAAAAKA80QsAAAAAAIDyRC8AAAAAAADKE70AAAAAAAAoT/QCAAAAAACgPNELAAAAAACA8kQvAAAAAAAAyhO9AAAAAAAAKE/0AgAAAAAAoDzRCwAAAAAAgPJELwAAAAAAAMoTvQAAAAAAAChP9AIAAAAAAKA80QsAAAAAAIDyRC8AAAAAAADKE70AAAAAAAAoT/QCAAAAAACgPNELAAAAAACA8kQvAAAAAAAAyhO9AAAAAAAAKE/0AgAAAAAAoDzRCwAAAAAAgPJELwAAAAAAAMoTvQAAAAAAAChP9AIAAAAAAKA80QsAAAAAAIDyRC8AAAAAAADKE70AAAAAAAAoT/QCAAAAAACgPNELAAAAAACA8kQvAAAAAAAAyhO9AAAAAAAAKE/0AgAAAAAAoDzRCwAAAAAAgPJELwAAAAAAAMoTvQAAAAAAAChP9AIAAAAAAKA80QsAAAAAAIDyRC8AAAAAAADKE70AAAAAAAAoT/QCAAAAAACgPNELAAAAAACA8kQvAAAAAAAAyhO9AAAAAAAAKE/0AgAAAAAAoDzRCwAAAAAAgPJELwAAAAAAAMoTvQAAAAAAAChP9AIAAAAAAKA80QsAAAAAAIDyRC8AAAAAAADKE70AAAAAAAAoT/QCAAAAAACgPNELAAAAAACA8kQvAAAAAAAAyutp9GqtHdJa+8/W2oLW2inPsObI1tr81tqtrbXzejkPAAAAAAAAG6Yhvbpwa60vyZeTTEyyKMns1tr0ruvmr7LmtUk+lGSfruuWtta27dU8AAAAAAAAbLh6eafXnkkWdF13Z9d1jya5IMmfrLbmfUm+3HXd0iTpuu6+Hs4DAAAAAADABqqX0Wv7JHevsr3oiX2r+l9J/ldr7brW2g2ttUN6OA8AAAAAAAAbqJ493vA5vP5rk0xIMiLJrNbaqK7rfrPqotbasUmOTZJXv/rVL/KIAAAAAAAA/E/Xyzu97knyqlW2Rzyxb1WLkkzvum5513U/T/KzPB7BnqLrurO7rhvXdd244cOH92xgAAAAAAAAaupl9Jqd5LWttR1aa5skeUeS6aut+Zc8fpdXWmvD8vjjDu/s4UwAAAAAAABsgHoWvbquW5HkhCT/muS2JBd1XXdra+2TrbVJTyz71yRLWmvzk1yd5OSu65b0aiYAAAAAAAA2TD39Ta+u6y5Pcvlq+z62yt9dkr9+4h8AAAAAAAA8L718vCEAAAAAAAC8KEQvAAAAAAAAyhO9AAAAAAAAKE/0AgAAAAAAoDzRCwAAAAAAgPJELwAAAAAAAMoTvQAAAAAAAChP9AIAAAAAAKA80QsAAAAAAIDyRC8AAAAAAADKE70AAAAAAAAoT/QCAAAAAACgPNELAAAAAACA8kQvAAAAAAAAyhO9AAAAAAAAKE/0AgAAAAAAoDzRCwAAAAAAgPJELwAAAAAAAMoTvQAAAAAAAChP9AIAAAAAAKA80QsAAAAAAIDyRC8AAAAAAADKE70AAAAAAAAoT/QCAAAAAACgPNELAAAAAACA8kQvAAAAAAAAyhO9AAAAAAAAKE/0AgAAAAAAoDzRCwAAAAAAgPJELwAAAAAAAMoTvQAAAAAAAChP9AIAAAAAAKA80QsAAAAAAIDyRC8AAAAAAADKE70AAAAAAAAoT/QCAAAAAACgPNELAAAAAACA8kQvAAAAAAAAyhO9AAAAAAAAKE/0AgAAAAAAoDzRCwAAAAAAgPJELwAAAAAAAMoTvQAAAAAAAChP9AIAAAAAAKA80QsAAAAAAIDyRC8AAAAAAADKE70AAAAAAAAoT/QCAAAAAACgPNELAAAAAACA8kQvAAAAAAAAyhO9AAAAAAAAKE/0AgAAAAAAoDzRCwAAAAAAgPJELwAAAAAAAMoTvQAAAAAAAChP9AIAAAAAAKA80QsAAAAAAIDyRC8AAAAAAADKE70AAAAAAAAoT/QCAAAAAACgPNELAAAAAACA8kQvAAAAAAAAyhO9AAAAAAAAKE/0AgAAAAAAoDzRCwAAAAAAgPJELwAAAAAAAMoTvQAAAAAAAChP9AIAAAAAAKA80QsAAAAAAIDyRC8AAAAAAADKE70AAAAAAAAoT/QCAAAAAACgPNELAAAAAACA8kQvAAAAAAAAyhO9AAAAAAAAKE/0AgAAAAAAoDzRCwAAAAAAgPJELwAAAAAAAMoTvQAAAAAAAChP9AIAAAAAAKA80QsAAAAAAIDyRC8AAAAAAADKE70AAAAAAAAoT/QCAAAAAACgPNELAAAAAACA8kQvAAAAAAAAyhO9AAAAAAAAKE/0AgAAAAAAoDzRCwAAAAAAgPJELwAAAAAAAMoTvQAAAAAAAChP9AIAAAAAAKA80QsAAAAAAIDyRC8AAAAAAADKE70AAAAAAAAoT/QCAAAAAACgPNELAAAAAACA8kQvAAAAAAAAyhO9AAAAAAAAKE/0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AACUJ3oBAAAAAABQnugFAAAAAABAeaIXAAAAAAAA5YleAAAAAAAAlCd6AQAAAAAAUJ7oBQAAAAAAQHmiFwAAAAAAAOWJXgAAAAAAAJQnegEAAAAAAFCe6AUAAAAAAEB5ohcAAAAAAADliV4AAAAAAACUJ3oBAAAAAABQnugFAAAAAABAeaIXAAAAAAAA5YleAAAAAAAAlCd6AQAAAAAAUJ7oBQAAAAAAQHmiFwAAAAAAAOWJXgAAAAAAAJQnegEAAAAAAFCe6AUAAAAAAEB5ohcAAAAAAADliV4AAAAAAACUJ3oBAAAAAABQnugFAAAAAABAeaIXAAAAAAAA5YleAAAAAAAAlCd6AQAAAAAAUJ7oBQAAAAAAQHmiFwAAAAAAAOWJXgAAAAAAAJQnegEAAAAAAFCe6AUAAAAAAEB5ohcAAAAAAADliV4AAAAAAACUJ3oBAAAAAABQnugFAAAAAABAeaIXAAAAAAAA5YleAAAAAAAAlCd6AQAAAAAAUJ7oBQAAAAAAQHmiFwAAAAAAAOWJXgAAAAAAAJQnegEAAAAAAFCe6AUAAAAAAEB5ohcAAAAAAADliV4AAAAAAACUJ3oBAAAAAABQnugFAAAAAABAeaIXAAAAAAAA5YleAAAAAAAAlCd6AQAAAAAAUJ7oBQAAAAAAQHmiFwAAAAAAAOWJXgAAAAAAAJQnegEAAAAAAFCe6AUAAAAAAEB5ohcAAAAAAADliV4AAAAAAACUJ3oBAAAAAABQnugFAAAAAABAeaIXAAAAAAAA5YleAAAAAAAAlCd6AQAAAAAAUJ7oBQAAAAAAQHmiFwAAAAAAAOWJXgAAAAAAAJQnegEAAAAAAFCe6AUAAAAAAEB5ohcAAAAAAADliV4AAAAAAACUJ3oBAAAAAABQnugFAAAAAABAeaIXAAAAAAAA5YleAAAAAAAAlCd6AQAAAAAAUJ7oBQAAAAAAQHmiFwAAAAAAAOWJXgAAAAAAAJQnegEAAAAAAFCe6AUAAAAAAEB5ohcAAAAAAADliV4AAAAAAACUJ3oBAAAAAABQnugFAAAAAABAeaIXAAAAAAAA5YleAAAAAAAAlCd6AQAAAAAAUJ7oBQAAAAAAQHmiFwAAAAAAAOWJXgAAAAAAAJQnegEAAAAAAFCe6AUAAAAAAEB5ohcAAAAAAADliV4AAAAAAACUJ3oBAAAAAABQ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AACgPdELAAAAAACA9kQvAAAAAAAA2hO9AAAAAAAAaE/0AgAAAAAAoD3RCwAAAAAAgPZELwAAAAAAANoTvQAAAAAAAGhP9AIAAAAAAKA90QsAAAAAAID2RC8AAAAAAADaE70AAAAAAABoT/QCAAAAAACgPdELAAAAAACA9kQvAAAAAAAA2hO9AAAAAAAAaE/0AgAAAAAAoD3RCwAAAAAAgPZELwAAAAAAANoTvQAAAAAAAGhP9AIAAAAAAKA90QsAAAAAAID2RC8AAAAAAADaE70AAAAAAABoT/QCAAAAAACgPdELAAAAAACA9kQvAAAAAAAA2hO9AAAAAAAAaE/0AgAAAAAAoD3RCwAAAAAAgPZELwAAAAAAANoTvQAAAAAAAGhP9AIAAAAAAKA90QsAAAAAAID2RC8AAAAAAADaE70AAAAAAABoT/QCAAAAAACgPdELAAAAAACA9kQvAAAAAAAA2hO9AAAAAAAAaE/0AgAAAAAAoD3RCwAAAAAAgPZELwAAAAAAANoTvQAAAAAAAGhP9AIAAAAAAKA90QsAAAAAAID2RC8AAAAAAADaE70AAAAAAABoT/QCAAAAAACgPdELAAAAAACA9kQvAAAAAAAA2hO9AAAAAAAAaE/0AgAAAAAAoD3RCwAAAAAAgPZELwAAAAAAANoTvQAAAAAAAGhP9AIAAAAAAKA90QsAAAAAAID2RC8AAAAAAADaE70AAAAAAABoT/QCAAAAAACgPdELAAAAAACA9kQvAAAAAAAA2hO9AAAAAAAAaE/0AgAAAAAAoD3RCwAAAAAAgPZELwAAAAAAANoTvQAAAAAAAGhP9AIAAAAAAKA90QsAAAAAAID2RC8AAAAAAADaE70AAAAAAABoT/QCAAAAAACgPdELAAAAAACA9kQvAAAAAAAA2hO9AAAAAAAAaE/0AgAAAAAAoD3RCwAAAAAAgPZELwAAAAAAANoTvQAAAAAAAGhP9AIAAAAAAKA90QsAAAAAAID2RC8AAAAAAADaE70AAAAAAABoT/QCAAAAAACgPdELAAAAAACA9kQvAAAAAAAA2hO9AAAAAAAAaE/0AgAAAAAAoD3RCwAAAAAAgPZELwAAAAAAANoTvQAAAAAAAGhP9AIAAAAAAKA90QsAAAAAAID2RC8AAAAAAADaE70AAAAAAABoT/QCAAAAAACgPdELAAAAAACA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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(30, 30))\n", "th.stats.display_boxplot(\n", " clang_th,\n", " nodes=n,\n", " columns=[\"Machine clears\", \"Frontend latency\"]\n", ")" ] }, { "cell_type": "markdown", "id": "f266979a", "metadata": { "papermill": { "duration": 0.013597, "end_time": "2024-09-06T18:35:22.045620", "exception": false, "start_time": "2024-09-06T18:35:22.032023", "status": "completed" }, "tags": [] }, "source": [ "**Multi-Indexed Thicket Example**\n", "\n", "Example will show how to pass a columnar joined thicket object. When passing a columnar joined thicket object, the columns argument will now take a list of tuples. Each tuple will consist of two elements. The first element will always be the column index, and the second element will be an associated column under the column index you passed.
\n", "\n", " - Example: (column_index, column_name) -> (\"GCC\", \"Machine clears\")" ] }, { "cell_type": "code", "execution_count": 56, "id": "2b5e74e3", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:22.071991Z", "iopub.status.busy": "2024-09-06T18:35:22.071870Z", "iopub.status.idle": "2024-09-06T18:35:22.168827Z", "shell.execute_reply": "2024-09-06T18:35:22.168483Z" }, "papermill": { "duration": 0.111028, "end_time": "2024-09-06T18:35:22.169386", "exception": false, "start_time": "2024-09-06T18:35:22.058358", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABrMAAAaXCAYAAADVTJWqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAAsTAAALEwEAmpwYAABheElEQVR4nOzdefSXdZ3//8clKFg4hIBa6aTNfGOIRVZ3kXChJsVcyLT8SWZqc7QaR5ucNvpZc86U6U8dWxyHwTFT+6mMyzmOZsoxcQVzRY865s8oRWTQ+Kio4PX7Q/ucWAQX3vCUbrdzOHze72t5Pd8Xn//uXNe7ads2AAAAAAAAUNFG63sAAAAAAAAAeD1iFgAAAAAAAGWJWQAAAAAAAJQlZgEAAAAAAFCWmAUAAAAAAEBZYhYAAAAAAABllYtZTdNMa5rmqaZp7nuD+3+yaZq5TdPc3zTNzzo9HwAAAAAAAOtO07bt+p5hOU3TjEvSleQ/27YduoZ9/0+SnyeZ0LbtoqZptmjb9ql1MScAAAAAAACdV+7OrLZtb0zyv3/6XtM0f9U0zX83TTOnaZpfNU3zN69t+nySs9u2XfTasUIWAAAAAADABqRczHod5yQ5vm3b0UlOTPLD197/UJIPNU0zq2maW5um+eh6mxAAAAAAAIC1ruf6HmBNmqbpk2SXJP9v0zR/fLvXa3/3TPJ/koxPsnWSG5umGda27TPreEwAAAAAAAA6oHzMyqt3jz3Ttu2IVWybl+S2tm1fTvKbpmkeyqtx6451OB8AAAAAAAAdUv4xg23b/iGvhqrJSdK8avvXNv9XXr0rK03TDMirjx18dD2MCQAAAAAAQAeUi1lN01yY5JYkg5qmmdc0zeeSfDrJ55qmuTvJ/Un2f233a5IsbJpmbpIbkpzUtu3C9TE3AAAAAAAAa1/Ttu36ngEAAAAAAABWqdydWQAAAAAAAPBHYhYAAAAAAABl9VzfA/ypAQMGtNtuu+36HgMAAAAAAIB1bM6cOU+3bTtwxfdLxaxtt902s2fPXt9jAAAAAAAAsI41TfP/rep9jxkEAAAAAACgLDELAAAAAACAssQsAAAAAAAAyir1nVkAAAAAAMDa9fLLL2fevHlZsmTJ+h4FkiS9e/fO1ltvnY033vgN7S9mAQAAAADABmzevHnZbLPNsu2226ZpmvU9Dn/m2rbNwoULM2/evGy33XZv6BiPGQQAAAAAgA3YkiVL0r9/fyGLEpqmSf/+/d/UnYJiFgAAAAAAbOCELCp5s7+PYhYAAAAAANAxPXr0yIgRIzJ06NBMnjw5zz///Js6/qSTTsqQIUNy0kkndWjCDcPMmTNz8803r+8xOkLMAgAAAAAAOmbTTTfNXXfdlfvuuy+bbLJJfvzjH7+h45YuXZokOeecc3LPPffk+9///ps67s/NW4lZ75RrJWYBAAAAAADrxO67755HHnkkzz33XI488sjssMMOGTlyZC6//PIkyfTp0zNp0qRMmDAhe+65ZyZNmpSurq6MHj06F198cR577LFMmDAhw4cPz5577pnHH388STJlypQce+yx2XHHHfOVr3wlU6ZMyRe+8IXstNNO+eAHP5iZM2fmyCOPzODBgzNlypTueb7whS9kzJgxGTJkSL71rW91v7/tttvmW9/6VkaNGpVhw4blwQcfTJJ0dXXls5/9bIYNG5bhw4fn0ksvTZJce+212XnnnTNq1KhMnjw5XV1dK332Rx55JHvttVe23377jBo1Kv/zP/+Ttm1z0kknZejQoRk2bFguvvjiJK+GqX333bf72OOOOy7Tp09/3dkee+yx/PjHP87pp5+eESNG5Fe/+lUWLFiQgw46KGPHjs3YsWMza9asJMnUqVNz+OGHZ9ddd83hhx++lv5lO6vn+h4AAAAAAADY8C1dujRXX311PvrRj+a73/1uJkyYkGnTpuWZZ57JDjvskL322itJcuedd+aee+7J5ptvniTp06dP7rrrriTJfvvtlyOOOCJHHHFEpk2bli9+8Yv5r//6ryTJvHnzcvPNN6dHjx6ZMmVKFi1alFtuuSVXXHFFJk2alFmzZuXcc8/N2LFjc9ddd2XEiBH57ne/m8033zzLli3LnnvumXvuuSfDhw9PkgwYMCB33nlnfvjDH+bUU0/Nueeem1NOOSV9+/bNvffemyRZtGhRnn766XznO9/Jddddl3e/+935l3/5l5x22mn55je/udzn//SnP52vfvWrOeCAA7JkyZK88sorueyyy3LXXXfl7rvvztNPP52xY8dm3Lhxa7yWq5rt2GOPTZ8+fXLiiScmSQ477LD8/d//fXbbbbc8/vjjmThxYh544IEkydy5c3PTTTdl0003fXv/qOuImAUAAAAAAHTMCy+8kBEjRiR59c6sz33uc9lll11yxRVX5NRTT02SLFmypPsuq7333rs7ZK3olltuyWWXXZYkOfzww/OVr3yle9vkyZPTo0eP7tf77bdfmqbJsGHDsuWWW2bYsGFJkiFDhuSxxx7LiBEj8vOf/zznnHNOli5dmieeeCJz587tjlkHHnhgkmT06NHda1533XW56KKLutfo169frrrqqsydOze77rprkuSll17KzjvvvNzcixcvzu9+97sccMABSZLevXsnSW666aYceuih6dGjR7bccsvsscceueOOO/IXf/EXq72mq5ptRdddd13mzp3b/foPf/hD9x1jkyZNeseErETMAgAAAAAAOuiP35n1p9q2zaWXXppBgwYt9/5tt92Wd7/73W9pnRWP69WrV5Jko4026v75j6+XLl2a3/zmNzn11FNzxx13pF+/fpkyZUqWLFmy0vE9evRY7XdLtW2bvffeOxdeeOFbmntVevbsmVdeeaX79Z/O9UZne+WVV3Lrrbd2h7M/9Vav8friO7MAAAAAAIB1auLEiTnrrLPStm2S5Ne//vUbOm6XXXbpvjPqggsuyO677/6WZ/jDH/6Qd7/73enbt2/mz5+fq6++eo3H7L333jn77LO7Xy9atCg77bRTZs2alUceeSRJ8txzz+Whhx5a7rjNNtssW2+9dfcjEV988cU8//zz2X333XPxxRdn2bJlWbBgQW688cbssMMO+cAHPpC5c+fmxRdfzDPPPJNf/vKXa5xts802y+LFi7tf77PPPjnrrLO6X68YFN9JxCwAAAAAAGCd+sY3vpGXX345w4cPz5AhQ/KNb3zjDR131lln5T/+4z8yfPjwnH/++TnjjDPe8gzbb799Ro4cmb/5m7/JYYcd1v2YwNX5+te/nkWLFmXo0KHZfvvtc8MNN2TgwIGZPn16Dj300AwfPjw777xzHnzwwZWOPf/883PmmWdm+PDh2WWXXfLkk0/mgAMOyPDhw7P99ttnwoQJ+d73vpetttoq22yzTT75yU9m6NCh+eQnP5mRI0eucbb99tsvM2bMyIgRI/KrX/0qZ555ZmbPnp3hw4fnwx/+cH784x+/petUQfPH6lnBmDFj2tmzZ6/vMQAAAAAAYIPxwAMPZPDgwet7DFjOqn4vm6aZ07btmBX3dWcWAAAAAAAAZYlZAAAAAAAAlCVmAQAAAAAAUJaYBQAAAAAAQFliFgAAAAAAAGWJWQAAAAAAAJQlZgEAAAAAAB31wgsvZI899siyZcvy2GOPZfz48d3bbr/99owbNy6DBg3KyJEjc9RRR+X555/P9OnTc9xxx631WaZMmZKZM2eudp+pU6dm+vTpSZLp06fn97//ffe2o446KnPnzl3rc/3pNVpb9tprryxatKj79bbbbpskWbBgQT760Y+utXU6ref6HgAAAAAAAFh3Djjo4Cxa+PRaO1+//gMy49JLVrvPtGnTcuCBB6ZHjx7LvT9//vxMnjw5F110UXbeeeckySWXXJLFixevtfnerunTp2fo0KF53/velyQ599xzO7LO612jt+Pwww/PD3/4w3zta19b7v2BAwfmve99b2bNmpVdd911ra3XKe7MAgAAAACAPyOLFj6dxWOPXGt/3kgYu+CCC7L//vsnSXr06JHNN988SXL22WfniCOO6A5ZSXLwwQdnyy23XO74K6+8MjvuuGNGjhyZvfbaK/Pnz0/y6h1URx55ZMaPH58PfvCDOfPMM7uPOeWUUzJo0KDstttuOfTQQ3PqqacmSfr27ZtNNtlktfP26dMnm266aS655JLMnj07n/70pzNixIi88MILGT9+fGbPnt2930knnZQhQ4Zkr732yu233949yxVXXJEkWbZsWU466aSMHTs2w4cPz09+8pM1XqMk+f73v999zLe+9a0kyYwZM7Lnnnumbds88cQT+dCHPpQnn3wyXV1d+exnP5thw4Zl+PDhufTSS5MkkyZNyoUXXth9zoEDB3b//IlPfCIXXHDBaq9DFWIWAAAAAADQMS+99FIeffTR7kfcbbPNNrnsssuSJPfdd19Gjx69xnPstttuufXWW/PrX/86n/rUp/K9732ve9uDDz6Ya665Jrfffnu+/e1v5+WXX84dd9yRSy+9NHfffXeuvvrq7viUJGeccUZ22WWX1a534okn5pBDDsnBBx+cMWPG5IILLshdd92VTTfddLn9nnvuuUyYMCH3339/Nttss3z961/PL37xi8yYMSPf/OY3kyT//u//nr59++aOO+7IHXfckX/7t3/Lb37zm9Veo2uvvTYPP/xwbr/99tx1112ZM2dObrzxxhxwwAF573vfm7PPPjuf//zn8+1vfztbbbVVTjnllPTt2zf33ntv7rnnnkyYMCFJ0q9fv7z44otZuHBhkuSOO+7oXnPMmDH51a9+tcZrX4HHDAIAAAAAAB3z9NNP5z3vec/bOse8efNyyCGH5IknnshLL72U7bbbrnvbxz/+8fTq1Su9evXKFltskfnz52fWrFnZf//907t37/Tu3Tv77bff2/wUq7bJJpt0f/fUsGHD0qtXr2y88cYZNmxYHnvssSSvhql77rknl1zy6qMYn3322Tz88MPLfYYVr9G1116ba6+9NiNHjkySdHV15eGHH864ceNy1llnZejQodlpp51y6KGHJkmuu+66XHTRRd3H9+vXr/vnLbbYIr///e/Tv3//5Wb/4/vvBGIWAAAAAADQMZtuummWLFmyym1DhgzJnDlzlnu83qocf/zxOeGEEzJp0qTMnDkzU6dO7d7Wq1ev7p979OiRpUuXrpW534iNN944TdMkSTbaaKPuWTbaaKPuOdq2zVlnnZWJEye+7nlWvEZt2+bkk0/OMcccs9K+8+bNy0YbbZT58+fnlVdeyUYbrf4hfEuWLFnpjrLVvV+RxwwCAAAAAAAd069fvyxbtmyVQeu4447Leeedl9tuu637vcsuu6z7O7H+6Nlnn8373//+JMl55523xjV33XXXXHnllVmyZEm6urpy1VVXrXK/k08+OTNmzFjtuTbbbLMsXrx4jWu+nokTJ+ZHP/pRXn755STJQw89lOeee265fVa8RhMnTsy0adPS1dWVJPnd736Xp556KkuXLs2RRx6ZCy+8MIMHD85pp52WJNl7771z9tlnd59v0aJFSV6NYk8++WT34wv/1EMPPZShQ4e+5c+1LolZAAAAAABAR+2zzz656aabVnp/yy23zEUXXZQTTzwxgwYNyuDBg3PNNddks802W26/qVOnZvLkyRk9enQGDBiwxvXGjh2bSZMmZfjw4fnYxz6WYcOGpW/fvivtd++992arrbZa7bmmTJmSY489NiNGjMgLL7ywxrVXdNRRR+XDH/5wRo0alaFDh+aYY45Z5d1jf3qN9tlnnxx22GHZeeedM2zYsBx88MFZvHhx/vmf/zm77757dtttt5x22mk599xz88ADD+TrX/96Fi1alKFDh2b77bfPDTfckCSZM2dOdtppp/TsufKD+m644YZ8/OMff9OfZ31o2rZd3zN0GzNmTPunX8IGAAAAAAC8PQ888EAGDx7c/fqAgw7OooVPr7Xz9+s/IDMuvWS1+9x55505/fTTc/7556+1ddekq6srffr0yfPPP59x48blnHPOyahRo5bbZ+LEibnmmmvW2Uyr04lr9KUvfSmTJk3KnnvuudK2cePG5fLLL1/u+7XWpRV/L5OkaZo5bduOWXFf35kFAAAAAAB/RtYUnjph1KhR+chHPpJly5alR48e62TNo48+OnPnzs2SJUtyxBFHrBSykpQJWUlnrtHQoUNXGbIWLFiQE044Yb2FrDfLnVkAAAAAALABW9UdMLC+vZk7s3xnFgAAAAAAAGWJWQAAAAAAAJQlZgEAAAAAAFCWmAUAAAAAAEBZYhYAAAAAANBRL7zwQvbYY48sW7Ysjz32WMaPH9+97fbbb8+4ceMyaNCgjBw5MkcddVSef/75TJ8+Pccdd9xan2XKlCmZOXPmaveZOnVqpk+f3r3/u971rixevLh7+5e//OU0TZOnn376Ta8/derUnHrqqavctssuu7zp870Zffr06ej5//S6nXjiibn++uvXynl7rpWzAAAAAAAA7wifPOiAPLVw0Vo73xb9++Xnl85Y7T7Tpk3LgQcemB49eiz3/vz58zN58uRcdNFF2XnnnZMkl1xyyXLhqIK//uu/zuWXX57PfOYzeeWVV3L99dfn/e9//1pf5+abb17r5+yEZcuWrfRvuaLjjz8+n//85zNhwoS3vZ6YBQAAAAAAf0aeWrgo/zlh4Vo73//1Bm6+ueCCC/Kzn/0sSdKjR49svvnmSZKzzz47RxxxRHfISpKDDz54peOvvPLKfOc738lLL72U/v3754ILLsiWW26ZqVOn5vHHH8+jjz6axx9/PF/+8pfzxS9+MUlyyimn5Kc//WkGDhyYbbbZJqNHj86JJ56Yvn37ZpNNNlntvH369Mmmm27a/fpTn/pULr744nzmM5/JzJkzs+uuu+bqq6/u3v6JT3wiv/3tb7NkyZJ86UtfytFHH50k+e///u/80z/9U5YtW5YBAwbkl7/8ZZJk7ty5GT9+/Eoz9+nTJ11dXZk5c2amTp2aAQMG5L777svo0aPz05/+NE3TZM6cOTnhhBPS1dWVAQMGZPr06Xnve9+73Pzz58/Psccem0cffTRJ8qMf/Wilu76+//3v5+c//3lefPHFHHDAAfn2t7+92s/Sp0+fHHPMMbnuuuty9tln56qrrsoVV1yRnj17Zp999smpp5663HX7wAc+kIULF+bJJ5/MVltttdrrvSZiFgAAAAAA0DEvvfRSHn300Wy77bZJkm222SaXXXZZkuS+++7LEUccscZz7Lbbbrn11lvTNE3OPffcfO9738sPfvCDJMmDDz6YG264IYsXL86gQYPyhS98IXfddVcuvfTS3H333Xn55ZczatSojB49OklyxhlnrHG9E088cbnXH/rQh3LFFVdk0aJFufDCC/OZz3xmuZg1bdq0bL755nnhhRcyduzYHHTQQXnllVfy+c9/PjfeeGO22267/O///m/3/quaeeONN15uzV//+te5//778773vS+77rprZs2alR133DHHH398Lr/88gwcODAXX3xxvva1r2XatGnLHfvFL34xe+yxR2bMmJFly5alq6true3XXnttHn744dx+++1p2zaTJk3KjTfemHHjxq3ys/Tv3z/PPfdcdtxxx/zgBz/IwoUL87nPfS4PPvhgmqbJM888s8rrNmrUqMyaNSsHHXTQGq/56ohZAAAAAABAxzz99NN5z3ve87bOMW/evBxyyCF54okn8tJLL2W77bbr3vbxj388vXr1Sq9evbLFFltk/vz5mTVrVvbff//07t07vXv3zn777fc2P0Vy4IEH5qKLLsptt92Wn/zkJ8ttO/PMMzNjxquPWvztb3+bhx9+OAsWLMi4ceO6Z/3j3WivN/PWW2+93Dl32GGH7vdGjBiRxx57LO95z3ty3333Ze+9907y6uP+VrwrK0muv/76/Od//meSV++E69u373Lbr7322lx77bUZOXJkkqSrqysPP/xwxo0bt8rP0r9///To0aM7SvXt2ze9e/fO5z73uey7777Zd999V3nNtthii/z+979f06VdIzELAAAAAADomE033TRLlixZ5bYhQ4Zkzpw52X///Vd7juOPPz4nnHBCJk2a1P0Ivj/q1atX9889evTI0qVL18rcKzrkkEMyevToHHHEEdloo4263585c2auu+663HLLLXnXu96V8ePHv+7nfTMzr2qftm0zZMiQ3HLLLW/rs7Rtm5NPPjnHHHPMcu+v7rP07t27+3uyevbsmdtvvz2//OUvc8kll+Rf//Vfc/31Kz9vcsmSJcs9rvGt2mjNuwAAAAAAALw1/fr1y7Jly1YZeI477ricd955ue2227rfu+yyyzJ//vzl9nv22Wfz/ve/P0ly3nnnrXHNXXfdNVdeeWWWLFmSrq6uXHXVVavc7+STT+6+C2lNPvCBD+S73/1u/u7v/m6l2fr165d3vetdefDBB3PrrbcmSXbaaafceOON+c1vfpMkyz1m8K0aNGhQFixY0B2zXn755dx///0r7bfnnnvmRz/6UZJX79569tlnl9s+ceLETJs2rfvxg7/73e/y1FNPve5nWVFXV1eeffbZ/O3f/m1OP/303H333avc76GHHsrQoUPf8uf9IzELAAAAAADoqH322Sc33XTTSu9vueWWueiii3LiiSdm0KBBGTx4cK655ppsttlmy+03derUTJ48OaNHj86AAQPWuN7YsWMzadKkDB8+PB/72McybNiwlR61lyT33ntvttpqqzf8OY455pj81V/91XLvffSjH83SpUszePDgfPWrX81OO+2UJBk4cGDOOeecHHjggdl+++1zyCGHvOF1Xs8mm2ySSy65JP/4j/+Y7bffPiNGjMjNN9+80n5nnHFGbrjhhgwbNiyjR4/O3Llzl9u+zz775LDDDsvOO++cYcOG5eCDD87ixYtf97OsaPHixdl3330zfPjw7LbbbjnttNNW2ufll1/OI488kjFjxrztz920bfu2T/K6J2+ax5IsTrIsydK2bVc78ZgxY9rZs2d3bB4AAAAAAPhz88ADD2Tw4MHdrz950AF5auGitXb+Lfr3y88vXf3dTXfeeWdOP/30nH/++Wtt3TXp6upKnz598vzzz2fcuHE555xzMmrUqOX2mThxYq655pp1NtOfkxkzZuTOO+/MKaecssrtK/5eJknTNHNW1ZLWxXdmfaRt26fXwToAAAAAAMAarCk8dcKoUaPykY98JMuWLev+3qVOO/roozN37twsWbIkRxxxxEohK4mQ1UFLly7NP/zDP6yVc62LmAUAAAAAAPyZO/LII9fpej/72c/W6Xosb/LkyWvtXJ3+zqw2ybVN08xpmuboDq8FAAAAAADABqbTd2bt1rbt75qm2SLJL5qmebBt2xv/dIfXItfRSfKXf/mXHR4HAAAAAAD+/LRtm6Zp1vcYkOTV38c3o6N3ZrVt+7vX/n4qyYwkO6xin3Path3Ttu2YgQMHdnIcAAAAAAD4s9O7d+8sXLjwTQcE6IS2bbNw4cL07t37DR/TsTuzmqZ5d5KN2rZd/NrP+yT5vzu1HgAAAAAAsLKtt9468+bNy4IFC9b3KJDk1cC69dZbv+H9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gLLELAAAAAAAAMoSswAAAAAAAChLzAIAAAAAAKAsMQsAAAAAAICyxCwAAAAAAADKErMAAAAAAAAoS8wCAAAAAACgLDELAAAAAACAssQsAAAAAAAAyhKzAAAAAAAAKEvMAgAAAAAAoCwxCwAAAAAAgLLELAAAAAAAAMoSswAAAAAAAChLzAIAAAAAAKAsMQsAAAAAAICyxCwAAAAAAADKErMAAAAAAAAoS8wCAAAAAACgLDELAAAAAACAssQsAAAAAAAAyhKzAAAAAAAAKEvMAgAAAAAAoCwxCwAAAAAAgLLELAAAAAAAAMoSswAAAAAAAChLzAIAAAAAAKAsMQsAAAAAAICyxCwAAAAAAADKErMAAAAAAAAoS8wCAAAAAACgLDELAAAAAACAssQsAAAAAAAAyhKzAAAAAAAAKEvMAgAAAAAAoCwxCwAAAAAAgLLELAAAAAAAAMoSswAAAAAAAChLzAIAAAAAAKAsMQsAAAAAAICyxCwAAAAAAADKErMAAAAAAAAoS8wCAAAAAACgLDELAAAAAACAssQsAAAAAAAAyhKzAAAAAAAAKEvMAgAAAAAAoCwxCwAAAAAAgLLELAAAAAAAAMoSswAAAAAAAChLzAIAAAAAAKAsMQsAAAAAAICyxCwAAAAAAADKErMAAAAAAAAoS8wCAAAAAACgLDELAAAAAACAssQsAAAAAAAAyhKzAAAAAAAAKEvMAgAAAAAAoCwxCwAAAAAAgLLELAAAAAAAAMoSswAAAAAAAChLzAIAAAAAAKAsMQsAAAAAAICyxCwAAAAAAADKErMAAAAAAAAoS8wCAAAAAACgLDELAAAAAACAssQsAAAAAAAAyhKzAAAAAAAAKEvMAgAAAAAAoCwxCwAAAAAAgLLELAAAAAAAAMoSswAAAAAAAChLzAIAAAAAAKAsMQsAAAAAAICyxCwAAAAAAADKErMAAAAAAAAoS8wCAAAAAACgLDELAAAAAACAssQsAAAAAAAAyhKzAAAAAAAAKEvMAgAAAAAAoCwxCwAAAAAAgLLELAAAAAAAAMoSswAAAAAAAChLzAIAAAAAAKAsMQsAAAAAAICyxCwAAAAAAADKErMAAAAAAAAoS8wCAAAAAACgLDELAAAAAACAssQsAAAAAAAAyhKzAAAAAAAAKEvMAgAAAAAAoCwxCwAAAAAAgLLELAAAAAAAAMoSswAAAAAAAChLzAIAAAAAAKAsMQsAAAAAAICyxCwAAAAAAADKErMAAAAAAAAoS8wCAAAAAACgLDELAAAAAACAssQsAAAAAAAAyhKzAAAAAAAAKEvMAgAAAAAAoCwxCwAAAAAAgLLELAAAAAAAAMoSswAAAAAAAChLzAIAAAAAAKAsMQsAAAAAAICyxCwAAAAAAADKErMAAAAAAAAoS8wCAAAAAACgLDELAAAAAACAssQsAAAAAAAAyhKzAAAAAAAAKEvMAgAAAAAAoCwxCwAAAAAAgLLELAAAAAAAAMoSswAAAAAAAChLzAIAAAAAAKCsjsespml6NE3z66Zprur0WgAAAAAAAGxY1sWdWV9K8sA6WAcAAAAAAIANTEdjVtM0Wyf5eJJzO7kOAAAAAAAAG6ZO35n1/yT5SpJXOrwOAAAAAAAAG6COxaymafZN8lTbtnPWsN/RTdPMbppm9oIFCzo1DgAAAAAAAO9Anbwza9ckk5qmeSzJRUkmNE3z0xV3atv2nLZtx7RtO2bgwIEdHAcAAAAAAIB3mo7FrLZtT27bduu2bbdN8qkk17dt+5lOrQcAAAAAAMCGp9PfmQUAAAAAAABvWc91sUjbtjOTzFwXawEAAAAAALDhcGcWAAAAAAAAZYlZAAAAAAAAlCVmAQAAAAAAUJaYBQAAAAAAQFliFgAAAAAAAGWJWQAAAAAAAJQlZgEAAAAAAFCWmAUAAAAAAEBZYhYAAAAAAABliVkAAAAAAACUJWYBAAAAAABQlpgFAAAAAABAWWIWAAAAAAAAZYlZAAAAAAAAlCVmAQAAAAAAUJaYBQAAAAAAQFliFgAAAAAAAGWJWQAAAAAAAJQlZgEAAAAAAFCWmAUAAAAAAEBZYhYAAAAAAABliVkAAAAAAACUJWYBAAAAAABQlpgFAAAAAABAWWIWAAAAAAAAZYlZAAAAAAAAlCVmAQAAAAAAUJaYBQAAAAAAQFliFgAAAAAAAGWJWQAAAAAAAJQlZgEAAAAAAFCWmAUAAAAAAEBZYhYAAAAAAABliVkAAAAAAACUJWYBAAAAAABQlpgFAAAAAABAWWIWAAAAAAAAZYlZAAAAAAAAlCVmAQAAAAAAUJaYBQAAAAAAQFliFgAAAAAAAGWJWQAAAAAAAJQlZgEAAAAAAFCWmAUAAAAAAEBZYhYAAAAAAABliVkAAAAAAACUJWYBAAAAAABQlpgFAAAAAABAWWIWAAAAAAAAZYlZAAAAAAAAlCVmAQAAAAAAUJaYBQAAAAAAQFliFgAAAAAAAGWJWQAAAAAAAJQlZgEAAAAAAFCWmAUAAAAAAEBZYhYAAAAAAABliVkAAAAAAACUJWYBAAAAAABQlpgFAAAAAABAWWIWAAAAAAAAZYlZAAAAAAAAlCVmAQAAAAAAUJaYBQAAAAAAQFliFgAAAAAAAGWJWQAAAAAAAJQlZgEAAAAAAFCWmAUAAAAAAEBZYhYAAAAAAABliVkAAAAAAACUJWYBAAAAAABQlpgFAAAAAABAWWIWAAAAAAAAZYlZAAAAAAAAlCVmAQAAAAAAUJaYBQAAAAAAQFliFgAAAAAAAGWJWQAAAAAAAJQlZgEAAAAAAFCWmAUAAAAAAEBZYhYAAAAAAABliVkAAAAAAACUJWYBAAAAAABQlpgFAAAAAABAWWIWAAAAAAAAZYlZAAAAAAAAlCVmAQAAAAAAUJaYBQAAAAAAQFliFgAAAAAAAGWJWQAAAAAAAJQlZgEAAAAAAFCWmAUAAAAAAEBZYhYAAAAAAABliVkAAAAAAACUJWYBAAAAAABQlpgFAAAAAABAWWIWAAAAAAAAZYlZAAAAAAAAlCVmAQAAAAAAUJaYBQAAAAAAQFliFgAAAAAAAGWJWQAAAAAAAJQlZgEAAAAAAFCWmAUAAAAAAEBZYhYAAAAAAABliVkAAAAAAACUJWYBAAAAAABQlpgFAAAAAABAWWIWAAAAAAAAZYlZAAAAAAAAlCVmAQAAAAAAUJaYBQAAAAAAQFliFgAAAAAAAGWJWQAAAAAAAJQlZgEAAAAAAFCWmAUAAAAAAEBZYhYAAAAAAABliVkAAAAAAACUJWYBAAAAAABQlpgFAAAAAABAWWIWAAAAAAAAZYlZAAAAAAAAlCVmAQAAAAAAUJaYBQAAAAAAQFliFgAAAAAAAGWJWQAAAAAAAJQlZgEAAAAAAFCWmAUAAAAAAEBZYhYAAAAAAABliVkAAAAAAACUJWYBAAAAAABQlpgFAAAAAABAWWIWAAAAAAAAZYlZAAAAAAAAlCVmAQAAAAAAUJaYBQAAAAAAQFliFgAAAAAAAGWJWQAAAAAAAJQlZgEAAAAAAFCWmAUAAAAAAEBZYhYAAAAAAABliVkAAAAAAACUJWYBAAAAAABQlpgFAAAAAABAWWIWAAAAAAAAZYlZAAAAAAAAlCVmAQAAAAAAUJaYBQAAAAAAQFliFgAAAAAAAGWJWQAAAAAAAJQlZgEAAAAAAFCWmAUAAAAAAEBZYhYAAAAAAABliVkAAAAAAACUJWYBAAAAAABQlpgFAAAAAABAWWIWAAAAAAAAZYlZAAAAAAAAlCVmAQAAAAAAUJaYBQAAAAAAQFliFgAAAAAAAGWJWQAAAAAAAJQlZgEAAAAAAFCWmAUAAAAAAEBZYhYAAAAAAABliVkAAAAAAACUJWYBAAAAAABQlpgFAAAAAABAWWIWAAAAAAAAZYlZAAAAAAAAlCVmAQAAAAAAUJaYBQAAAAAAQFliFgAAAAAAAGWJWQAAAAAAAJQlZgEAAAAAAFCWmAUAAAAAAEBZYhYAAAAAAABliVkAAAAAAACUJWYBAAAAAABQlpgFAAAAAABAWWIWAAAAAAAAZYlZAAAAAAAAlCVmAQAAAAAAUJaYBQAAAAAAQFliFgAAAAAAAGWJWQAAAAAAAJQlZgEAAAAAAFCWmAUAAAAAAEBZYhYAAAAAAABliVkAAAAAAACUJWYBAAAAAABQlpgFAAAAAABAWWIWAAAAAAAAZYlZAAAAAAAAlCVmAQAAAAAAUJaYBQAAAAAAQFliFgAAAAAAAGWJWQAAAAAAAJQlZgEAAAAAAFCWmAUAAAAAAEBZYhYAAAAAAABliVkAAAAAAACUJWYBAAAAAABQlpgFAAAAAABAWWIWAAAAAAAAZYlZAAAAAAAAlCVmAQAAAAAAUJaYBQAAAAAAQFliFgAAAAAAAGWJWQAAAAAAAJQlZgEAAAAAAFCWmAUAAAAAAEBZYhYAAAAAAABliVkAAAAAAACUJWYBAAAAAABQlpgFAAAAAABAWWIWAAAAAAAAZYlZAAAAAAAAlCVmAQAAAAAAUJaYBQAAAAAAQFliFgAAAAAAAGWJWQAAAAAAAJQlZgEAAAAAAFCWmAUAAAAAAEBZYhYAAAAAAABliVkAAAAAAACUJWYBAAAAAABQlpgFAAAAAABAWWIWAAAAAAAAZYlZAAAAAAAAlCVmAQAAAAAAUJaYBQAAAAAAQFliFgAAAAAAAGWJWQAAAAAAAJQlZgEAAAAAAFCWmAUAAAAAAEBZYhYAAAAAAABliVkAAAAAAACUJWYBAAAAAABQlpgFAAAAAABAWWIWAAAAAAAAZYlZAAAAAAAAlCVmAQAAAAAAUJaYBQAAAAAAQFliFgAAAAAAAGWJWQAAAAAAAJQlZgEAAAAAAFCWmAUAAAAAAEBZYhYAAAAAAABliVkAAAAAAACUJWYBAAAAAABQlpgFAAAAAABAWWIWAAAAAAAAZYlZAAAAAAAAlCVmAQAAAAAAUJaYBQAAAAAAQFliFgAAAAAAAGWJWQAAAAAAAJQlZgEAAAAAAFCWmAUAAAAAAEBZYhYAAAAAAABliVkAAAAAAACUJWYBAAAAAABQlpgFAAAAAABAWWIWAAAAAAAAZYlZAAAAAAAAlCVmAQAAAAAAUJaYBQAAAAAAQFliFgAAAAAAAGWJWQAAAAAAAJQlZgEAAAAAAFCWmAUAAAAAAEBZYhYAAAAAAABliVkAAAAAAACUJWYBAAAAAABQlpgFAAAAAABAWWIWAAAAAAAAZYlZAAAAAAAAlCVmAQAAAAAAUJaYBQAAAAAAQFliFgAAAAAAAGWJWQAAAAAAAJQlZgEAAAAAAFCWmAUAAAAAAEBZYhYAAAAAAABliVkAAAAAAACUJWYBAAAAAABQlpgFAAAAAABAWWIWAAAAAAAAZYlZAAAAAAAAlCVmAQAAAAAAUJaYBQAAAAAAQFkdi1lN0/Rumub2pmnubprm/qZpvt2ptQAAAAAAANgw9ezguV9MMqFt266maTZOclPTNFe3bXtrB9cEAAAAAABgA9KxmNW2bZuk67WXG7/2p+3UegAAAAAAAGx4OvqdWU3T9Gia5q4kTyX5Rdu2t3VyPQAAAAAAADYsHY1Zbdsua9t2RJKtk+zQNM3QFfdpmubopmlmN00ze8GCBZ0cBwAAAAAAgHeYjsasP2rb9pkkNyT56Cq2ndO27Zi2bccMHDhwXYwDAAAAAADAO0THYlbTNAObpnnPaz9vmmTvJA92aj0AAAAAAAA2PD07eO73JjmvaZoeeTWa/bxt26s6uB4AAAAAAAAbmI7FrLZt70kyslPnBwAAAAAAYMO3Tr4zCwAAAAAAAN4KMQsAAAAAAICyxCwAAAAAAADKErMAAAAAAAAoS8wCAAAAAACgLDELAAAAAACAssQsAAAAAAAAyhKzAAAAAAAAKEvMAgAAAAAAoCwxCwAAAAAAgLLELAAAAAAAAMoSswAAAAAAAChLzAIAAAAAAKAsMQsAAAAAAICyxCwAAAAAAADKErMAAAAAAAAoS8wCAAAAAACgLDELAAAAAACAssQsAAAAAAAAyhKzAAAAAAAAKEvMAgAAAAAAoCwxCwAAAAAAgLLELAAAAAAAAMoSswAAAAAAAChLzAIAAAAAAKAsMQsAAAAAAICyxCwAAAAAAADKErMAAAAAAAAoS8wCAAAAAACgLDELAAAAAACAssQsAAAAAAAAyhKzAAAAAAAAKEvMAgAAAAAAoCwxCwAAAAAAgLLELAAAAAAAAMoSswAAAAAAAChLzAIAAAAAAKAsMQsAAAAAAICyxCwAAAAAAADKErMAAAAAAAAoS8wCAAAAAACgLDELAAAAAACAssQsAAAAAAAAyhKzAAAAAAAAKEvMAgAAAAAAoCwxCwAAAAAAgLLELAAAAAAAAMoSswAAAAAAAChLzAIAAAAAAKAsMQsAAAAAAICyxCwAAAAAAADKErMAAAAAAAAoS8wCAAAAAACgLDELAAAAAACAssQsAAAAAAAAyhKzAAAAAAAAKEvMAgAAAAAAoCwxCwAAAAAAgLLELAAAAAAAAMoSswAAAAAAAChLzAIAAAAAAKAsMQsAAAAAAICyxCwAAAAAAADKErMAAAAAAAAoS8wCAAAAAACgLDELAAAAAACAssQsAAAAAAAAyhKzAAAAAAAAKEvMAgAAAAAAoCwxCwAAAAAAgLLELAAAAAAAAMoSswAAAAAAAChLzAIAAAAAAKAsMQsAAAAAAICyxCwAAAAAAADKErMAAAAAAAAoS8wCAAAAAACgLDELAAAAAACAssQsAAAAAAAAyhKzAAAAAAAAKEvMAgAAAAAAoCwxCwAAAAAAgLLELAAAAAAAAMoSswAAAAAAAChLzAIAAAAAAKAsMQsAAAAAAICyxCwAAAAAAADKErMAAAAAAAAoS8wCAAAAAACgLDELAAAAAACAssQsAAAAAAAAyhKzAAAAAAAAKEvMAgAAAAAAoCwxCwAAAAAAgLLELAAAAAAAAMoSswAAAAAAAChLzAIAAAAAAKAsMQsAAAAAAICyxCwAAAAAAADKErMAAAAAAAAoS8wCAAAAAACgLDELAAAAAACAssQsAAAAAAAAyhKzAAAAAAAAKEvMAgAAAAAAoCwxCwAAAAAAgLLELAAAAAAAAMoSswAAAAAAAChLzAIAAAAAAKAsMQsAAAAAAICyxCwAAAAAAADKErMAAAAAAAAoS8wCAAAAAACgLDELAAAAAACAssQsAAAAAAAAyhKzAAAAAAAAKEvMAgAAAAAAoCwxCwAAAAAAgLLELAAAAAAAAMoSswAAAAAAAChLzAIAAAAAAKAsMQsAAAAAAICyxCwAAAAAAADKErMAAAAAAAAoS8wCAAAAAACgLDELAAAAAACAssQsAAAAAAAAyhKzAAAAAAAAKEvMAgAAAAAAoCwxCwAAAAAAgLLELAAAAAAAAMoSswAAAAAAAChLzAIAAAAAAKAsMQsAAAAAAICyxCwAAAAAAADKErMAAAAAAAAoS8wCAAAAAACgLDELAAAAAACAssQsAAAAAAAAyhKzAAAAAAAAKEvMAgAAAAAAoCwxCwAAAAAAgLLELAAAAAAAAMoSswAAAAAAAChLzAIAAAAAAKAsMQsAAAAAAICyxCwAAAAAAADKErMAAAAAAAAoS8wCAAAAAACgLDELAAAAAACAssQsAAAAAAAAyhKzAAAAAAAAKEvMAgAAAAAAoCwxCwAAAAAAgLLELAAAAAAAAMoSswAAAAAAAChLzAIAAAAAAKAsMQsAAAAAAICyxCwAAAAAAADKErMAAAAAAAAoS8wCAAAAAACgLDELAAAAAACAssQsAAAAAAAAyhKzAAAAAAAAKEvMAgAAAAAAoCwxCwAAAAAAgLLELAAAAAAAAMoSswAAAAAAAChLzAIAAAAAAKAsMQsAAAAAAICyxCwAAAAAAADKErMAAAAAAAAoS8wCAAAAAACgLDELAAAAAACAssQsAAAAAAAAyhKzAAAAAAAAKEvMAgAAAAAAoCwxCwAAAAAAgLLELAAAAAAAAMoSswAAAAAAAChLzAIAAAAAAKAsMQsAAAAAAICyxCwAAAAAAADKErMAAAAAAAAoS8wCAAAAAACgLDELAAAAAACAssQsAAAAAAAAyhKzAAAAAAAAKEvMAgAAAAAAoCwxCwAAAAAAgLLELAAAAAAAAMoSswAAAAAAAChLzAIAAAAAAKAsMQsAAAAAAICyxCwAAAAAAADKErMAAAAAAAAoS8wCAAAAAACgLDELAAAAAACAssQsAAAAAAAAyhKzAAAAAAAAKEvMAgAAAAAAoCwxCwAAAAAAgLLELAAAAAAAAMoSswAAAAAAAChLzAIAAAAAAKAsMQsAAAAAAICyxCwAAAAAAADKErMAAAAAAAAoS8wCAAAAAACgLDELAAAA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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(30, 30))\n", "th.stats.display_boxplot(\n", " combined_th,\n", " nodes=n,\n", " columns=[(\"Clang\", \"time (exc)\"), (\"Clang\", \"Machine clears\")]\n", ")" ] }, { "cell_type": "markdown", "id": "f13de603", "metadata": { "papermill": { "duration": 0.013955, "end_time": "2024-09-06T18:35:22.196920", "exception": false, "start_time": "2024-09-06T18:35:22.182965", "status": "completed" }, "tags": [] }, "source": [ "**Example of Error if Not Passing Same Column Index**" ] }, { "cell_type": "code", "execution_count": 57, "id": "3e9a0abf", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:22.224143Z", "iopub.status.busy": "2024-09-06T18:35:22.224027Z", "iopub.status.idle": "2024-09-06T18:35:22.226854Z", "shell.execute_reply": "2024-09-06T18:35:22.226516Z" }, "papermill": { "duration": 0.017323, "end_time": "2024-09-06T18:35:22.227488", "exception": false, "start_time": "2024-09-06T18:35:22.210165", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "# th.stats.display_boxplot(\n", "# combined_th,\n", "# nodes=n,\n", "# columns=[(\"Clang\", \"time (exc)\"), (\"GCC\", \"Machine clears\")]\n", "# )" ] }, { "cell_type": "markdown", "id": "f6eb70f9", "metadata": { "papermill": { "duration": 0.013086, "end_time": "2024-09-06T18:35:22.253838", "exception": false, "start_time": "2024-09-06T18:35:22.240752", "status": "completed" }, "tags": [] }, "source": [ "### 6.4 Displaying Violinplot\n", "\n", "The `display_violinplot` function will display a violin plot for each passed in node(s) and column(s) in a single thicket. The passed nodes and columns must be from the performance data table. " ] }, { "cell_type": "code", "execution_count": 58, "id": "cd103264", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:22.280962Z", "iopub.status.busy": "2024-09-06T18:35:22.280838Z", "iopub.status.idle": "2024-09-06T18:35:22.284747Z", "shell.execute_reply": "2024-09-06T18:35:22.284478Z" }, "papermill": { "duration": 0.018239, "end_time": "2024-09-06T18:35:22.285331", "exception": false, "start_time": "2024-09-06T18:35:22.267092", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "# Getting nodes to pass\n", "n = pd.unique(combined_th.dataframe.reset_index()[\"node\"])[0:2].tolist()" ] }, { "cell_type": "markdown", "id": "a4bcfea8", "metadata": { "papermill": { "duration": 0.012951, "end_time": "2024-09-06T18:35:22.311546", "exception": false, "start_time": "2024-09-06T18:35:22.298595", "status": "completed" }, "tags": [] }, "source": [ "**Single Index Thicket Example**" ] }, { "cell_type": "code", "execution_count": 59, "id": "298302ad", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:22.338730Z", "iopub.status.busy": "2024-09-06T18:35:22.338621Z", "iopub.status.idle": "2024-09-06T18:35:22.589457Z", "shell.execute_reply": "2024-09-06T18:35:22.589090Z" }, "papermill": { "duration": 0.26508, "end_time": "2024-09-06T18:35:22.590096", "exception": false, "start_time": "2024-09-06T18:35:22.325016", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmkAAAJNCAYAAABqTOLyAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAAsTAAALEwEAmpwYAABqrklEQVR4nO3dd5iU1f3+8feZtn1pi4ggQmKhSBURLFiI4jcxKAZFjApBxS4xsZdYoilqEgQVJRaMBRF7jBrEwA81El0RiAIRo6gYBQSW7VPP74+ZHXZh+zyzM7tzv65rr53yzJnPzMLsvec85xxjrUVERERE0osr1QWIiIiIyJ4U0kRERETSkEKaiIiISBpSSBMRERFJQwppIiIiImlIIU1EREQkDXlSXYDTioqKbN++fVNdhoiIiEiTPvjgg++std3ru6/DhbS+fftSXFyc6jJEREREmmSM+aKh+zTcKSIiIpKGFNJERERE0pBCmoiIiEga6nDnpNUnGAyyadMmqqurU12KOCw7O5vevXvj9XpTXYqIiIijMiKkbdq0iYKCAvr27YsxJtXliEOstWzbto1NmzbRr1+/VJcjIiLiqIwY7qyurqZbt24KaB2MMYZu3bqph1RERDqkjAhpgAJaB6Wfq4iIdFQZE9Ka4na7GTZsGAcffDCnnXYalZWVLXr8VVddxaBBg7jqqquSVGHHsGzZMv75z3+mugwREZG0p5AWk5OTw6pVq/joo4/w+Xw88MADzXpcKBQCYN68eaxZs4a77rqrRY/LNK0JaZn6XomISGZTSKvHUUcdxaeffkpFRQXTp09n1KhRDB8+nJdeegmA+fPnM2HCBI477jjGjRvHhAkTKC8v55BDDmHhwoVs3LiR4447jiFDhjBu3Di+/PJLAKZNm8aFF17IYYcdxtVXX820adO46KKLGD16NN/73vdYtmwZ06dPZ8CAAUybNi1ez0UXXcTIkSMZNGgQN998c/z2vn37cvPNNzNixAgGDx7M+vXrASgvL+dnP/sZgwcPZsiQITz33HMALF68mDFjxjBixAhOO+00ysvL93jtn376KT/4wQ8YOnQoI0aM4L///S/WWq666ioOPvhgBg8ezMKFC4Fo4DrppJPij7300kuZP39+g7Vt3LiRBx54gD/96U8MGzaMt956i61bt/KTn/yEQw89lEMPPZR33nkHgFtuuYWzzz6bI444grPPPtuhn6yIiEj7kRGzO1siFArx2muvceKJJ3LHHXdw3HHH8cgjj1BSUsKoUaP4wQ9+AMDKlStZs2YNXbt2BSA/P59Vq1YB8OMf/5ipU6cydepUHnnkES6//HJefPFFIDrT9J///Cdut5tp06axY8cO3n33XV5++WUmTJjAO++8w0MPPcShhx7KqlWrGDZsGHfccQddu3YlHA4zbtw41qxZw5AhQwAoKipi5cqV3H///dx999089NBD/PrXv6ZTp078+9//BmDHjh1899133H777SxZsoS8vDx+//vf88c//pFf/epXdV7/T3/6U6699lomTpxIdXU1kUiE559/nlWrVrF69Wq+++47Dj30UMaOHdvke1lfbRdeeCH5+flceeWVAJx55plcccUVHHnkkXz55ZeMHz+edevWAbB27VrefvttcnJyEvuhioiItEMKaTFVVVUMGzYMiPaknXvuuRx++OG8/PLL3H333UB0lmhNr9jxxx8fD2i7e/fdd3n++ecBOPvss7n66qvj95122mm43e749R//+McYYxg8eDA9evRg8ODBAAwaNIiNGzcybNgwnnnmGebNm0coFOKbb75h7dq18ZB26qmnAnDIIYfEn3PJkiU8/fTT8efo0qULr7zyCmvXruWII44AIBAIMGbMmDp1l5WV8fXXXzNx4kQgugYZwNtvv82UKVNwu9306NGDo48+mvfff5/CwsJG39P6atvdkiVLWLt2bfx6aWlpvIdvwoQJCmgiIpKxUhrSjDGPACcBW6y1B9dz/0+BawADlAEXWWtXJ6OWmnPSarPW8txzz3HQQQfVuf1f//oXeXl5rXqe3R+XlZUFgMvlil+uuR4Khfj888+5++67ef/99+nSpQvTpk2rs+REzWPcbnej525Zazn++ONZsGBBq+quj8fjIRKJxK/vvhRGc2qLRCKsWLEiHghra+17LCIi0hGk+py0+cCJjdz/OXC0tXYw8GtgXlsUVWP8+PHMmTMHay0AH374YbMed/jhh8d7sp588kmOOuqoVtdQWlpKXl4enTp1YvPmzbz22mtNPub444/nvvvui1/fsWMHo0eP5p133uHTTz8FoKKigk8++aTO4woKCujdu3d8aNbv91NZWclRRx3FwoULCYfDbN26leXLlzNq1Cj2228/1q5di9/vp6SkhDfffLPJ2goK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UrcEhyRP7Z+viIgkz3PPPcecOXP48X6VLN/WjZdeeS3VJbV7xpgPGtryMuPOSSssLGTh0wvafDFbERGR9q6qqgoXFp8LIuFwqsvp8DIupEE0qClUiYiItIzf78ftAo/LEom0ZBEqaY2MPSdNREREWqa6uhq3Aa8LhbQ2oJAmIiIizVJdXY3XZfG6LJEOdk57OlJIExERkWbx+/14XRaf29LRJh6mI4U0ERERaZZoSIsNdyqjJV1GThwoLS1t89mdbre7zgK2L774In379k3oeWfNmsWMGTPIzc1NqJ0affv2pbi4mKKiombdXttvfvMbrr/+ekfqEBGR9FTTk6bhzraRcSGttLSUM6dMpryiyrE28/NyeGrBwkaDWk5OTnxF/t1ZG+02drla1rE5a9YszjrrLMdCWiIU0kREOr5AIIDPbdWT1kYyLqRVVFRQXlHFDSN20jUr8Zkp2/0u7lgZbbcly3ps3LiR8ePHc9hhh/HBBx/w6quvcu+99/Laa69hjOHGG29k8uTJLFu2jFtuuYWioiI++ugjDjnkEJ544gnmzJnD//73P4499liKiopYunQpixcv5uabb8bv9/P973+fRx99lPz8fPr27cvUqVP561//SjAYZNGiRfTv359t27YxZcoUvv76a8aMGdOs8wtOOeUUvvrqK6qrq5k5cyYzZszg2muvpaqqimHDhjFo0CCefPJJnnjiCWbPnk0gEOCwww7j/vvvx+12k5+fz8yZM3nllVfIycnhpZdeokePHmzevJkLL7yQzz77DIC5c+fy+uuv07VrV37+858DcMMNN7DXXntpZwIRkRTx+/34XOBzWcBQXV29x/7N4pyMPSeta1aE7jmJfzU36NWEmGHDhjFx4kQANmzYwMUXX8zHH39McXExq1atYvXq1SxZsoSrrrqKb775BoAPP/yQWbNmsXbtWj777DPeeecdLr/8cvbZZx+WLl3K0qVL+e6777j99ttZsmQJK1euZOTIkfzxj3+MP39RURErV67koosu4u677wbg1ltv5cgjj+Tjjz9m4sSJfPnll02+jkceeYQPPviA4uJiZs+ezbZt2/jd734X7yl88sknWbduHQsXLuSdd95h1apVuN1unnzySSAaZkePHs3q1asZO3Ysf/7znwG4/PLLOfroo1m9ejUrV65k0KBBTJ8+nb/85S9AdKr3008/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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(10, 10))\n", "th.stats.display_violinplot(\n", " clang_th,\n", " nodes=n,\n", " columns=[\"Machine clears\", \"Frontend latency\"]\n", ")" ] }, { "cell_type": "markdown", "id": "523aed82", "metadata": { "papermill": { "duration": 0.013545, "end_time": "2024-09-06T18:35:22.618216", "exception": false, "start_time": "2024-09-06T18:35:22.604671", "status": "completed" }, "tags": [] }, "source": [ "**Multi-Indexed Thicket Example**\n", "\n", "Example will show how to pass a columnar joined thicket object. When passing a columnar joined thicket object, the columns argument will now take a list of tuples. Each tuple will consist of two elements. The first element will always be the column index, and the second element will be an associated column under the column index you passed.
\n", "\n", " - Example: (column_index, column_name) -> (\"GCC\", \"Machine clears\")" ] }, { "cell_type": "code", "execution_count": 60, "id": "7927cb2f", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:22.646178Z", "iopub.status.busy": "2024-09-06T18:35:22.646055Z", "iopub.status.idle": "2024-09-06T18:35:22.895551Z", "shell.execute_reply": "2024-09-06T18:35:22.895190Z" }, "papermill": { "duration": 0.264511, "end_time": "2024-09-06T18:35:22.896229", "exception": false, "start_time": "2024-09-06T18:35:22.631718", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 60, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlcAAAJXCAYAAAC+O3GEAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAAsTAAALEwEAmpwYAABHiElEQVR4nO3deXhV1aH//886mZMTIECIqFSwrYgZgAxCBSMCAlc0KEIRlS8RlGoV9VHsla+2xHJ9fveKQ0GpSpVCEQXKoOK3CipwUZQhICjTBS/SioYQwpiQOev3R8IxISFhWCcDvl/Pk4ecvddea+1NOHyy9j5rGWutAAAA4IansTsAAABwISFcAQAAOES4AgAAcIhwBQAA4BDhCgAAwCHCFQAAgENNLlwZY2YaYw4YY7aeYflfG2O2G2O2GWPe8nf/AAAA6mKa2jxXxphUSXmS/matjaun7C8lLZDU11p72BjTzlp7oCH6CQAAUJsmN3JlrV0t6VDVbcaYnxtjPjTGbDTGfGqMubJy172SpltrD1ceS7ACAACNqsmFq9OYIWm8tTZJ0gRJf67cfoWkK4wxa4wxa40xgxqthwAAAJICG7sD9THGeCVdI+nvxpiTm0Mq/wyU9EtJfSRdKmm1MSbeWnukgbsJAAAgqRmEK1WMrh2x1narZd8+SeustSWSvjXG7FJF2NrQgP0DAADwafK3Ba21x1QRnIZLkqnQtXL3O6oYtZIxpq0qbhPuaYRuAgAASGqC4coY87akLyR1NsbsM8aMlXSnpLHGmC2StkkaUll8maRcY8x2SSslPW6tzW2MfgMAAEhNcCoGAACA5qzJjVwBAAA0Z03qgfa2bdvajh07NnY3AAAA6rVx48aD1troU7c3qXDVsWNHZWZmNnY3AAAA6mWM+Wdt27ktCAAA4BDhCgAAwCHCFQAAgENN6pkrAABKSkq0b98+FRYWNnZXAElSaGioLr30UgUFBZ1RecIVAKBJ2bdvnyIjI9WxY0dVWVMWaBTWWuXm5mrfvn3q1KnTGR3DbUEAQJNSWFioNm3aEKzQJBhj1KZNm7MaSSVcAQCaHIIVmpKz/XkkXAEAADhEuAIAoIqAgAB169ZNcXFxGj58uE6cOHFWxz/++OOKjY3V448/7qceXhhWrVqlzz//vLG74ReEKwAAqggLC9PmzZu1detWBQcH69VXXz2j40pLSyVJM2bM0FdffaUpU6ac1XE/NecSrprLtSJcAQBwGtdee62++eYb5efna8yYMbr66qvVvXt3vfvuu5KkWbNmKS0tTX379lW/fv2UlpamvLw8JSUlaf78+dq7d6/69u2rhIQE9evXT//6178kSenp6brvvvvUo0cP/e53v1N6erruv/9+9ezZU5dffrlWrVqlMWPGqEuXLkpPT/f15/7771dycrJiY2M1adIk3/aOHTtq0qRJSkxMVHx8vHbu3ClJysvL09133634+HglJCRo0aJFkqTly5frV7/6lRITEzV8+HDl5eXVOPdvvvlG/fv3V9euXZWYmKj//d//lbVWjz/+uOLi4hQfH6/58+dLqghKN910k+/YBx98ULNmzTpt3/bu3atXX31VL774orp166ZPP/1UOTk5uu2225SSkqKUlBStWbNGkpSRkaFRo0apV69eGjVqlKO/WT+z1jaZr6SkJAsA+Gnbvn17o7YfERFhrbW2pKTEpqWl2T//+c924sSJds6cOdZaaw8fPmx/+ctf2ry8PPvXv/7VXnLJJTY3N7fG8dZae9NNN9lZs2ZZa61944037JAhQ6y11o4ePdoOHjzYlpaW+l6PGDHClpeX23feecdGRkbar776ypaVldnExET75ZdfWmutr53S0lJ73XXX2S1btlhrrb3sssvstGnTrLXWTp8+3Y4dO9Zaa+3vfvc7+/DDD/v6c+jQIZuTk2OvvfZam5eXZ6219j//8z/t008/XeM6XH311Xbx4sXWWmsLCgpsfn6+Xbhwoe3fv78tLS21+/fvtx06dLA//PCDXblypR08eLDv2AceeMD+9a9/rbNvkyZNslOmTPEdM3LkSPvpp59aa6395z//aa+88kpfucTERHvixInT/p01hNp+LiVl2lryDPNcAQBQRUFBgbp16yapYuRq7Nixuuaaa/Tee+/pueeek1QxXcTJUagbbrhBrVu3rrWuL774QosXL5YkjRo1Sr/73e98+4YPH66AgADf65tvvlnGGMXHxysmJkbx8fGSpNjYWO3du1fdunXTggULNGPGDJWWliorK0vbt29XQkKCJGno0KGSpKSkJF+bH3/8sebNm+drIyoqSu+//762b9+uXr16SZKKi4v1q1/9qlq/jx8/ru+//1633nqrpIpJNCXps88+08iRIxUQEKCYmBhdd9112rBh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l2vatGm+YyZPnqzOnTurd+/eGjlypJ577jlJUsuWLetdH9br9VZbd+/222/3LX22atUq9erVq9qs57fccouSkpIUGxurGTNm+LZ/+OGHSkxMVNeuXavNN7V9+/Za++z1en1t9OnTR8OGDdOVV16pO++8Uyenetq4caOuu+46JSUlaeDAgbU+95udna1bb71VXbt2VdeuXWsNbVOmTFFKSooSEhI0adKkes/F6/XqscceU9euXfXFF1/oiSee0FVXXaWEhATfKFzV63bZZZcpNzdX+/fvr/NanwlGrpqhuXPnqtyWqTjmqnOrICBIxRfFan3mxjNaRBMAfkqKi4u1Z88e3/p2HTp00OLFiyVJW7du1ejRo+uto3fv3lq7dq2MMXr99df17LPP6vnnn5ck7dy5UytXrtTx48fVuXNn3X///dq8ebMWLVqkLVu2qKSkRImJiUpKSpIkTZ06td72Tr1ld8UVV+i9997T4cOH9fbbb+uuu+7SBx984Ns/c+ZMtW7dWgUFBUpJSdFtt92m8vJy3XvvvVq9erU6deqkQ4cO+crX1uegoKBqbX755Zfatm2bLr74YvXq1Utr1qxRjx49NH78eL377ruKjo7W/Pnz9eSTT2rmzJnVjn3ooYd03XXXacmSJSorK6txK3D58uXavXu31q9fL2ut0tLStHr1aqWmptZ6Lm3atFF+fr569Oih559/Xrm5uRo7dqx27twpY4yOHDlS63VLTEzUmjVrdNttt9V7zetCuGqGPv30M5VFtpcCQ+ovfBqlUR1V/v0mbd26VQkJCQ57BwDN28GDB9WqVavzqmPfvn0aMWKEsrKyVFxcrE6dOvn2DR48WCEhIQoJCVG7du2UnZ2tNWvWaMiQIQoNDVVoaKhuvvnm8zwLaejQoZo3b57WrVun1157rdq+adOm+RaA/u6777R7927l5OQoNTXV19eTo3Wn6/Oll15arc6rr77at61bt27au3evWrVqpa1bt+qGG26QVHF7rn379jX6umLFCv3tb3+TVDFSeOq6isuXL9fy5ct9y7jl5eVp9+7dSk1NrfVc2rRpo4CAAF9IatmypUJDQzV27FjddNNNuummm2q9Zu3atdMPP/xQ36WtF+GqGcrOOaiyFp3qL1iH8tCWssajTZs2Ea4AoIqwsDAVFhbWui82NlYbN2703TI8nfHjx+vRRx9V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L37xC7377ru66667VF5erhUrVvhmjHfJn8HKpTOZLmL8+PG69957nYQrnrkCADR5rUPKFR12/l9nGtDmzp3rWzIsICBArVu3liRNnz5do0eP9gUrSRo2bJhiYmKqHb906VL16NFD3bt3V//+/X3L42RkZGjMmDHq06ePLr/8ck2bNs13zOTJk9W5c2f17t1bI0eO1HPPPSdJatmypYKDg+vsr9frrbbu3u2336758+dLklatWqVevXpVm/PwlltuUVJSkmJjYzVjxgzf9g8//FCJiYnq2rVrtfmmtm/fXmufT34ifdWqVerTp4+GDRumK6+8UnfeeadOTvW0ceNGXXfddUpKStLAgQOVlZVVo//Z2dm69dZb1bVrV3Xt2rXW0DZlyhSlpKQoISFBkyZNqvdcvF6vHnvsMXXt2lVffPGFnnjiCV111VVKSEjwjcJVvW6XXXaZcnNztX///jqv9Zlg5AoAgCqKi4u1Z88e3/p2HTp00OLFiyVJW7du1ejRo+uto3fv3lq7dq2MMXr99df17LPP6vnnn5ck7dy5UytXrtTx48fVuXNn3X///dq8ebMWLVqkLVu2qKSkRImJiUpKSpIkTZ06td72Tr1ld8UVV+i9997T4cOH9fbbb+uuu+7SBx984Ns/c+ZMtW7dWgUFBUpJSdFtt92m8vJy3XvvvVq9erU6deqkQ4cO+crX1uegoKBqbX755Zfatm2bLr74YvXq1Utr1qxRjx49NH78eL377ruKjo7W/Pnz9eSTT2rmzJnVjn3ooYd03XXXacmSJSorK6txK3D58uXavXu31q9fL2ut0tLStHr1aqWmptZ6Lm3atFF+fr569Oih559/Xrm5uRo7dqx27twpY4yOHDlS63VLTEzUmjVrdNttt9V7zetCuAIAoIqDBw+qVatW51XHvn37NGLECGVlZam4uFidOnXy7Rs8eLBCQkIUEhKidu3aKTs7W2vWrNGQIUMUGhqq0NBQ3Xzzzed5FtLQoUM1b948rVu3Tq+99lq1fdOmTfMtAP3dd99p9+7dysnJUWpqqq+vJ0frTtfnSy+9tFqdV199tW9bt27dtHfvXrVq1Upbt27VDTfcIKni9lz79u1r9HXFihX629/+JqlipPDUdRWXL1+u5cuXq3v37pIqlgravXu3UlNTaz2XNm3aKCAgwBeSWrZsqdDQUI0dO1Y3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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(10, 10))\n", "th.stats.display_violinplot(\n", " combined_th,\n", " nodes=n,\n", " columns=[(\"Clang\", \"time (exc)\"), (\"Clang\", \"Machine clears\")]\n", ")" ] }, { "cell_type": "markdown", "id": "2bbb977e", "metadata": { "papermill": { "duration": 0.014169, "end_time": "2024-09-06T18:35:22.925434", "exception": false, "start_time": "2024-09-06T18:35:22.911265", "status": "completed" }, "tags": [] }, "source": [ "### 6.5 Displaying Violinplot Thicket\n", "\n", "The `display_violinplot_thicket` function will display a violinplot for each user passed node(s) and column(s) from multiple thickets. The passed nodes and columns must be from the performance data table." ] }, { "cell_type": "code", "execution_count": 61, "id": "588a1bf9", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:22.954680Z", "iopub.status.busy": "2024-09-06T18:35:22.954566Z", "iopub.status.idle": "2024-09-06T18:35:22.959410Z", "shell.execute_reply": "2024-09-06T18:35:22.959119Z" }, "papermill": { "duration": 0.020576, "end_time": "2024-09-06T18:35:22.960057", "exception": false, "start_time": "2024-09-06T18:35:22.939481", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "# Getting nodes to pass\n", "clang_node = pd.unique(clang_th.dataframe.reset_index()[\"node\"])[0]\n", "gcc_node = pd.unique(gcc_th.dataframe.reset_index()[\"node\"])[0]\n", "\n", "# Setup thickets dict\n", "thickets = {\n", " \"clang\": clang_th,\n", " \"gcc\": gcc_th,\n", "}\n", "\n", "# Setup columns dict\n", "columns = {\n", " \"clang\": [\"Machine clears\"],\n", " \"gcc\": [\"Frontend latency\"],\n", "}\n", "\n", "# Setup nodes dict\n", "nodes = {\n", " \"clang\": clang_node,\n", " \"gcc\": gcc_node\n", "}" ] }, { "cell_type": "markdown", "id": "7ac09a01", "metadata": { "papermill": { "duration": 0.014301, "end_time": "2024-09-06T18:35:22.989448", "exception": false, "start_time": "2024-09-06T18:35:22.975147", "status": "completed" }, "tags": [] }, "source": [ "**Single Index Thicket Example**" ] }, { "cell_type": "code", "execution_count": 62, "id": "9bfe87c3", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:23.017983Z", "iopub.status.busy": "2024-09-06T18:35:23.017848Z", "iopub.status.idle": "2024-09-06T18:35:23.111528Z", "shell.execute_reply": "2024-09-06T18:35:23.110950Z" }, "papermill": { "duration": 0.108669, "end_time": "2024-09-06T18:35:23.112184", "exception": false, "start_time": "2024-09-06T18:35:23.003515", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmEAAAJNCAYAAAB5m6IGAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAAsTAAALEwEAmpwYAABev0lEQVR4nO3dd3xUVeL+8efMTHohNEHpJbRA6FUBRUFsCAoqVsSydrD3tezud/v+LOsWt8jqrnWtaxdFESsRgZWiFCmhhhDSSTIz5/dHygakBMjkTPm8X6+8mLlz586TMjMP954511hrBQAAgKblcR0AAAAgFlHCAAAAHKCEAQAAOEAJAwAAcIASBgAA4AAlDAAAwAGf6wCHqlWrVrZz586uYwAAABzUV199tcNa23pft0VcCevcubNycnJcxwAAADgoY8z6/d3G4UgAAAAHKGEAAAAOUMIAAAAciLgxYQAARKqqqirl5uZq9+7drqOgkSUmJqp9+/aKi4tr8H0oYQAANJHc3FylpaWpc+fOMsa4joNGYq1Vfn6+cnNz1aVLlwbfj8ORAAA0kd27d6tly5YUsChjjFHLli0PeQ8nJQwAgCZEAYtOh/N7pYQBABBGvF6vBgwYoL59+2ratGkqKys7pPvfeuutysrK0q233hqihNHhww8/1Keffuo0AyUMAIAwkpSUpMWLF+ubb75RfHy8/vSnPzXofn6/X5L0+OOPa+nSpfr1r399SPeLNYdTwhr7Z0UJAwAgTI0ePVqrV69WaWmpZs6cqWHDhmngwIF69dVXJUlz5szRpEmTNG7cOJ144omaNGmSSkpKNHjwYD333HNat26dxo0bp+zsbJ144onasGGDJGnGjBm66qqrNHz4cN12222aMWOGrr76ao0YMUJdu3bVhx9+qJkzZ6p3796aMWNGXZ6rr75aQ4YMUVZWlu6777665Z07d9Z9992nQYMGqV+/flq5cqUkqaSkRJdeeqn69eun7Oxsvfjii5Kkd999VyNHjtSgQYM0bdo0lZSU/OB7X716tU466ST1799fgwYN0po1a2St1a233qq+ffuqX79+eu655yRVF6rTTz+97r7XXXed5syZs99s69at05/+9Cf9v//3/zRgwAB9/PHHysvL09lnn62hQ4dq6NCh+uSTTyRJ999/vy666CIde+yxuuiiixrpN1vDWhtRX4MHD7YAAESi5cuXH3SdlJQUa621VVVVdtKkSfYPf/iDvfPOO+1TTz1lrbW2oKDAZmZm2pKSEvvEE0/Ydu3a2fz8/B/c31prTz/9dDtnzhxrrbV/+9vf7JlnnmmttfaSSy6xp512mvX7/XXXzz33XBsMBu0rr7xi09LS7NKlS20gELCDBg2yX3/9tbXW1j2O3++3Y8eOtUuWLLHWWtupUyf7yCOPWGutfeyxx+xll11mrbX2tttus7NmzarLs3PnTpuXl2dHjx5tS0pKrLXW/uIXv7APPPDAD34Ow4YNsy+99JK11try8nJbWlpq//3vf9uTTjrJ+v1+u3XrVtuhQwe7efNmO2/ePHvaaafV3ffaa6+1TzzxxAGz3XffffbXv/513X2mT59uP/74Y2uttevXr7e9evWqW2/QoEG2rKxsv7+zWvv6/UrKsfvpNExRAQBAGCkvL9eAAQMkVe8Ju+yyyzRq1Ci99tpr+s1vfiOp+lOWtXu1xo8frxYtWuxzW5999pleeuklSdJFF12k2267re62adOmyev11l0/44wzZIxRv3791KZNG/Xr10+SlJWVpXXr1mnAgAF6/vnn9fjjj8vv92vLli1avny5srOzJUlnnXWWJGnw4MF1jzl37lw9++yzdY/RvHlzvf7661q+fLmOPfZYSVJlZaVGjhy5R+7i4mJt2rRJU6ZMkVQ9B5ckLViwQNOnT5fX61WbNm00duxYLVy4UOnp6Qf8me4r297mzp2r5cuX110vKiqq20M3adIkJSUlHfAxDgclDACAMFI7Jqw+a61efPFF9ezZc4/lX3zxhVJSUg7rcfa+X0JCgiTJ4/HUXa697vf79f333+s3v/mNFi5cqObNm2vGjBl7TMlQex+v13vAsVPWWo0fP17PPPPMYeXeF5/Pp2AwWHd976kiGpItGAzq888/ryt89R3uz/hgGBMGAECYO/nkk/Xoo4+q+uiW9PXXXzfofqNGjarbE/Wvf/1Lo0ePPuwMRUVFSklJUbNmzbRt2za99dZbB73P+PHj9dhjj9VdLygo0IgRI/TJJ59o9erVkqTS0lJ99913e9wvLS1N7du31yuvvCJJqqioUFlZmUaPHq3nnntOgUBAeXl5mj9/voYNG6ZOnTpp+fLlqqio0K5du/T+++8fNFtaWpqKi4vrrk+YMEGPPvpo3fW9i3AoUMIAAAhz9957r6qqqpSdna2srCzde++9Dbrfo48+qieeeELZ2dl66qmn9PDDDx92hv79+2vgwIHq1auXzj///LrDiQdyzz33qKCgQH379lX//v01b948tW7dWnPmzNH06dOVnZ2tkSNH1g3kr++pp57SI488ouzsbI0aNUpbt27VlClTlJ2drf79+2vcuHH61a9+pbZt26pDhw4655xz1LdvX51zzjkaOHDgQbOdccYZevnll+sG5j/yyCPKyclRdna2+vTp0+BPpR4JU9uqI8WQIUNsTk6O6xgAAByyFStWqHfv3q5jIET29fs1xnxlrR2yr/XZEwYAAOAAJQwAAMABShgAAIADlDAAAAAHKGEAAAAOUMIAAAAcYMZ8AAAOYMuWLSooKDjgOikpKerUqdMhb7uoqEilpaWHG22fOQ52Ch9jjC644AL985//lCT5/X4dffTRGj58uF5//fVDfszOnTsrJydHrVq12mP5a6+9puXLl+uOO+445G02xJw5c5STk6Pf//73Idl+U6CEAQCwH4FAQFdcNlMlZeUHXM8Y6YUX/v2DInIgRUVFOve86Sova7wSlpScoueefeaARSwlJUXffPONysvLlZSUpPfee0/t2rVrtAy1Jk2apEmTJjX6dhub3++Xz+emDlHCAADYj/Xr16ukrFy/HlGg5gnBfa5jJV3/aWstX75cY8aMafC2S0tLVV5WqrJepyoYf+TnJvRUlkor31RpaelB94adeuqpeuONNzR16lQ988wzmj59uj7++GNJ0pdffqlZs2Zp9+7dSkpK0hNPPKGePXsqEAjo9ttv19tvvy2Px6MrrrhC119/vaTqmfn/85//qKqqSi+88IJ69eq1x56qGTNmKD09XTk5Odq6dat+9atfaerUqZKkX//613r++edVUVGhKVOm6IEHHvhB3rffflt33XWXAoGAWrVq9YPTEuXl5emqq66qO6n5Qw89pGOPPXa/38ucOXP00ksvqaSkRIFAQM8++6zOPfdcFRUVye/3649//OMRneKpoShhAADsx/Lly9Ui2as2yfsuYLW6Ngtq2bJlh1TCagXjU2QT0g434v+2cwjrnnfeeXrwwQd1+umna+nSpZo5c2ZdCevVq5c+/vhj+Xw+zZ07V3fddZdefPFFPf7441q3bp0WL14sn8+nnTt31m2vVatWWrRokf7whz/oN7/5jf7617/+4DG3bNmiBQsWaOXKlZo0aZKmTp2qd999V6tWrdKXX34pa60mTZqk+fPn7/FzzMvL0xVXXKH58+erS5cuezxurVmzZunGG2/Ucccdpw0bNujkk0/WihUr9vu9SNKiRYu0dOlStWjRQr/97W918skn6+6771YgEFBZWdkh/DQPHyUMAID9WL58mbqmVhx0va4p5VrxzdImSNQ4srOztW7dOj3zzDM69dRT97itsLBQl1xyiVatWiVjjKqqqiRJc+fO1VVXXVV36K5FixZ19znrrLMkSYMHD9ZLL720z8ecPHmyPB6P+vTpo23btkmS3n33Xb377rt153osKSnRqlWr9ihhn3/+ucaMGaMuXbr84HFrzZ07V8uXL6+7XlRUpJKSkv1+L1L1ycVrtzV06FDNnDlTVVVVmjx5sgYMGNCAn+KR49ORAADsx7KlS9Qt7eAlrFt6lb5dtVp+v78JUjWOSZMm6ZZbbtH06dP3WH7vvffqhBNO0DfffKP//Oc/2r1790G3lZCQIEnyer37/RnUriNJteetttbqzjvv1OLFi7V48WKtXr1al1122SF/L8FgUJ9//nnddjZt2qTU1NQDfi8pKf87BDxmzBjNnz9f7dq104wZM/Tkk08ecobDQQkDAGAfdu3apfW5m9Uz4+DFqkczvyoqq/Ttt982QbLGMXPmTN13333q16/fHssLCwvrBurPmTOnbvn48eP15z//ua5k7euw4KE6+eST9fe//10lJSWSpE2bNmn79u17rDNixAjNnz9f33///X4fd8KECXr00Ufrri9evPiA38ve1q9frzZt2uiKK67Q5ZdfrkWLFh3Jt9VglDAAAPZhyZIlSvB51Dnt4CUsLd6qQzNv3Zv/ofBUlspUFB/xl6fy0D5l2b59e91www0/WH7bbbfpzjvv1MCBA/fYq3X55ZerY8eOys7OVv/+/fX0008f8ve6twkTJuj888/XyJEj1a9fP02dOlXFxcV7rNO6dWs9/vjjOuuss9S/f3+de+65P9jOI488opycHGVnZ6tPnz7605/+dMDvZW8ffvih+vfvr4EDB+q5557TrFmzjvh7awhTu0swUgwZMsTm5OS4jgEAiHIPP/yQ1ix4Sbf0O/AcYbWe+i5Zu44aqV//7qH9rrNixQr17t1bkrspKhA69X+/tYwxX1lrh+xrfQbmAwCwD4sWfqnh6QeeH6y+Xhl+/WXZMlVVVSkuLu6g66enp+u5Z59p8slaET4oYQAA7GX79u1an7tZlw6pOvjKNXo3r1JlZZW++eabuk/7HUx6ejqlKYYxJgwAgL188cUXapbkVee0QIPvkxpn1b159ZQKQENQwgAA2MtnnyxQdka5PObQ7tc/o1SfLZgfmlCIOpQwAADqqays1FeLFmlAy4PPD7a3/q2qtGHTFm3ZsiUEyRBtKGEAANSzaNEiBfx+ZbVo+HiwWh1SAmqZ7NWCBQtCkAzRhoH5AADUM++D99W3pV/JvkOfwskYaUjLEn34/nuaNm3aQdcvKipq8k9Her3ePSZofeWVV9S5c+cjetyHHnpIV155pZKTk49oO7U6d+6snJwctWrVqkHL6/u///s/3XXXXY2SI9QoYQAA1KiqqtKCj+frws6HfwLn4UdV6p2vvtP27dt11FFH7Xe9oqIinT/9XJWUNnwajINJTUnS0888d8AilpSUtN9JZa21stbK4zm0A2UPPfSQLrzwwkYrYUeCEgYAQATKyclRRWWlBrY+9EORtbql+9UqxauPPvrogHvDSktLVVJarrsHFapFQvCwH6/WzgqPfraoeruHMu3FunXrdPLJJ2v48OH66quv9Oabb+r3v/+93nrrLRljdM899+jcc8/Vhx9+qPvvv1+tWrXSN998o8GDB+uf//ynHn30UW3evFknnHCCWrVqpXnz5undd9/Vfffdp4qKCnXr1k1PPPGEUlNT1blzZ11yySX6z3/+o6qqKr3wwgvq1auX8vPzNX36dG3atEkjR45UQyaSnzx5sjZu3Kjdu3dr1qxZuvLKK3XHHXeovLxcAwYMUFZWlv71r3/pn//8px555BFVVlZq+PDh+sMf/iCv16vU1FTNmjVLr7/+upKSkvTqq6+qTZs22rZtm6666iqtXbtWkvTHP/5Rb7/9tlq0aKHZs2dLku6++24dddRRRzyzPmPCAACo8f7c95R9mIciaxkjDW1RovfffbtB67dICKp10pF/NbTI1ZaUAQMGaMqUKZKkVatW6ZprrtGyZcuUk5OjxYsXa8mSJZo7d65uvfXWug8afP3113rooYe0fPlyrV27Vp988oluuOEGHXPMMZo3b57mzZunHTt26Kc//anmzp2rRYsWaciQIfrd735X9/itWrXSokWLdPXVV+s3v/mNJOmB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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(10, 10))\n", "th.stats.display_violinplot_thicket(\n", " thickets=thickets,\n", " nodes=nodes,\n", " columns=columns\n", ")" ] }, { "cell_type": "markdown", "id": "1cbb3ad7", "metadata": { "papermill": { "duration": 0.014357, "end_time": "2024-09-06T18:35:23.156698", "exception": false, "start_time": "2024-09-06T18:35:23.142341", "status": "completed" }, "tags": [] }, "source": [ "**Multi-Indexed Thicket Example**\n", "\n", "Example will show how to pass a columnar joined thicket object. When passing a columnar joined thicket object, the columns argument will now take a list of tuples. Each tuple will consist of two elements. The first element will always be the column index, and the second element will be an associated column under the column index you passed.
\n", "\n", " - Example: (column_index, column_name) -> (\"GCC\", \"Machine clears\")" ] }, { "cell_type": "code", "execution_count": 63, "id": "ba74f02b", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:23.185779Z", "iopub.status.busy": "2024-09-06T18:35:23.185654Z", "iopub.status.idle": "2024-09-06T18:35:23.190338Z", "shell.execute_reply": "2024-09-06T18:35:23.190107Z" }, "papermill": { "duration": 0.019855, "end_time": "2024-09-06T18:35:23.190928", "exception": false, "start_time": "2024-09-06T18:35:23.171073", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "# Getting nodes to pass\n", "n = pd.unique(clang_th.dataframe.reset_index()[\"node\"])[0:2]\n", "\n", "# Getting thickets to pass\n", "thickets = {\n", " \"clang\": clang_th,\n", " \"gcc\": gcc_th,\n", "}\n", "\n", "# Getting columns to pass\n", "columns = {\n", " \"clang\": [\"time (exc)\"],\n", " \"gcc\": [\"time (exc)\"],\n", "}\n", "\n", "# Getting nodes to pass\n", "nodes = {\n", " \"clang\": pd.unique(clang_th.dataframe.reset_index()[\"node\"])[1],\n", " \"gcc\": pd.unique(gcc_th.dataframe.reset_index()[\"node\"])[1]\n", "}" ] }, { "cell_type": "code", "execution_count": 64, "id": "1f4be21d", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:23.220566Z", "iopub.status.busy": "2024-09-06T18:35:23.220461Z", "iopub.status.idle": "2024-09-06T18:35:23.326830Z", "shell.execute_reply": "2024-09-06T18:35:23.326021Z" }, "papermill": { "duration": 0.122914, "end_time": "2024-09-06T18:35:23.328592", "exception": false, "start_time": "2024-09-06T18:35:23.205678", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 64, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAncAAAJNCAYAAABTK1OpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAAsTAAALEwEAmpwYAABps0lEQVR4nO3dd3hUVeLG8e+Zll7ovSrSe1Owd10Vy9pQRLF3/Vl317aWXXvBCiKirrp2xYK9IaICgqAUaaGGJKT3ZGbO748MLCIlCTNzk8n7eZ48zNy55UUieTn33nONtRYRERERiQ0upwOIiIiISPio3ImIiIjEEJU7ERERkRiiciciIiISQ1TuRERERGKIyp2IiIhIDPE4HaChaNmype3atavTMURERER2a968eZutta129JnKXUjXrl2ZO3eu0zFEREREdssYs2Znn+m0rIiIiEgMUbkTERERiSEqdyIiIiIxRNfciYiIxLDq6mrWr19PRUWF01GkHuLj4+nYsSNer7fW26jciYiIxLD169eTkpJC165dMcY4HUfqwFpLbm4u69evp1u3brXeTqdlRUREYlhFRQUtWrRQsWuEjDG0aNGizqOuKnciIiIxTsWu8arPn53KnYiISBPjdrsZNGgQ/fr149RTT6WsrKxO299www307duXG264IUIJY8PXX3/N999/H/XjqtyJiIg0MQkJCSxYsIBff/0Vn8/HM888U6vt/H4/AJMnT2bhwoU88MADddquqalPuQvHfyuVOxERkSbsgAMOYMWKFZSWljJhwgRGjBjB4MGDee+99wCYNm0aJ5xwAoceeiiHHXYYJ5xwAiUlJQwdOpTXXnuNjIwMDj30UAYMGMBhhx3G2rVrATj33HO55JJLGDlyJDfeeCPnnnsul156Kfvuuy/du3fn66+/ZsKECfTu3Ztzzz13a55LL72UYcOG0bdvX26//faty7t27crtt9/OkCFD6N+/P0uXLgWgpKSE8847j/79+zNgwADeeustAD799FP2228/hgwZwqmnnkpJScmffu8rVqzg8MMPZ+DAgQwZMoSVK1direWGG26gX79+9O/fn9deew2oKWrHHXfc1m2vuOIKpk2bttNsGRkZPPPMMzzyyCMMGjSImTNnkpOTwymnnMLw4cMZPnw4s2bNAuCOO+5g3LhxjB49mnHjxu3xn6nulhUREWmi/H4/M2bM4Oijj+aee+7h0EMPZerUqRQUFDBixAgOP/xwAH7++WcWLlxI8+bNAUhOTmbBggUAHH/88YwfP57x48czdepUrrrqKt59912g5k7d77//Hrfbzbnnnkt+fj6zZ89m+vTpnHDCCcyaNYspU6YwfPhwFixYwKBBg7jnnnto3rw5gUCAww47jIULFzJgwAAAWrZsyc8//8xTTz3Fgw8+yJQpU7jrrrtIS0tj0aJFAOTn57N582buvvtuPv/8c5KSkrjvvvt4+OGHue222/7w+z/rrLO4+eabOemkk6ioqCAYDPL222+zYMECfvnlFzZv3szw4cM58MADd/vfckfZLrnkEpKTk7n++usBGDt2LNdeey37778/a9eu5aijjmLJkiUALF68mO+++46EhIQ9+0NF5U5ERKTJKS8vZ9CgQUDNyN3555/PqFGjmD59Og8++CBQc5ftllG4I444Ymux297s2bN5++23ARg3bhw33njj1s9OPfVU3G731vfHH388xhj69+9PmzZt6N+/PwB9+/YlIyODQYMG8frrrzN58mT8fj+ZmZksXrx4a7k7+eSTARg6dOjWY37++ef897//3XqMZs2a8cEHH7B48WJGjx4NQFVVFfvtt98fchcXF7NhwwZOOukkoGY+OYDvvvuOM888E7fbTZs2bTjooIOYM2cOqampu/xvuqNs2/v8889ZvHjx1vdFRUVbRxRPOOGEsBQ7ULkTERFpcrZcc7ctay1vvfUWPXv2/MPyH3/8kaSkpHodZ/vt4uLiAHC5XFtfb3nv9/tZvXo1Dz74IHPmzKFZs2ace+65f5gGZMs2brd7l9emWWs54ogjePXVV+uVe0c8Hg/BYHDr++2nJ6lNtmAwyA8//LC1SG6rvv+Nd0TX3ImIiAhHHXUUjz/+ONZaAObPn1+r7UaNGrV15Ozll1/mgAMOqHeGoqIikpKSSEtLIysrixkzZux2myOOOIInn3xy6/v8/Hz23XdfZs2axYoVKwAoLS3l999//8N2KSkpdOzYcesp5MrKSsrKyjjggAN47bXXCAQC5OTk8O233zJixAi6dOnC4sWLqayspKCggC+++GK32VJSUiguLt76/sgjj+Txxx/f+n77gh0uKnciIiLCrbfeSnV1NQMGDKBv377ceuuttdru8ccf5/nnn2fAgAG89NJLPPbYY/XOMHDgQAYPHkyvXr0YO3bs1tOqu3LLLbeQn59Pv379GDhwIF999RWtWrVi2rRpnHnmmQwYMID99ttv6w0Y23rppZeYOHEiAwYMYNSoUWzatImTTjqJAQMGMHDgQA499FDuv/9+2rZtS6dOnTjttNPo168fp512GoMHD95ttuOPP5533nln6w0VEydOZO7cuQwYMIA+ffrU+i7lujJbGnpTN2zYMDt37lynY4iIiITVkiVL6N27t9MxZA/s6M/QGDPPWjtsR+tr5E5EREQkhqjciYiIiMQQlTsRERGRGKJyJyIiIhJDVO5EREREYojKnYiIiEgM0RMqREREHJabm0tWVhYA7du3Jz093dlA2ykqKqK0tDRs+0tKStrt47yk/lTuREREHHbDTTezasVyAEbuux/33ftvhxP9T1FREaefcSblZeErdwmJSbz231d3WvAKCgp45ZVXuOyyywDYuHEjV111FW+++WbYMmzx7rvvsnDhQm677baw7G/RokU89NBDTJs2LSz7qw+VOxEREYfl5eVT0WUUprqc3Lx8p+P8QWlpKeVlpZT1Opagb8+ff+qqKoWlH1FaWrrLcvfUU09tLXft27ePSLEDuP/++5k+fXrY9te/f3/Wr1/P2rVr6dy5c9j2Wxe65k5ERMRhFeVlWE881hMX1tOf4RT0JWHjUvb4qzYF8eabb2blypUMGjSIG264gYyMDPr16wfAtGnTOPHEEzniiCPo2rUrTzzxBA8//DCDBw9m3333JS8vD4CVK1dy9NFHM3ToUA444IAdPn7s999/Jy4ujpYtWwKQk5PDKaecwvDhwxk+fDizZs0CYMyYMbz44osATJo0ibPOOguAOXPmMGrUKAYOHMiIESO2Pkf2+OOP3/q8XSdo5E5ERMRB1loqK8qxHh8EqykrbpjlLpruvfdefv31VxYsWABARkbGHz7/9ddfmT9/PhUVFey9997cd999zJ8/n2uvvZYXX3yRa665hosuuohnnnmGHj168OOPP3LZZZfx5Zdf/mE/s2bNYsiQIVvfX3311Vx77bXsv//+rF27lqOOOoolS5YwefJkRo8eTbdu3XjooYf44YcfqKqq4vTTT+e1115j+PDhFBUVkZCQAMCwYcO49957ufHGGyP632lnVO5EREQcVF5ejrUW6/Ji3D7Ky8ucjtTgHXLIIaSkpJCSkkJaWhrHH388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3p8LLzifbt26OR1PJGZ16NCB008/jdfeeZ+C9M5Rf461qS4ncdMCLrr0EhU70cjdFhq5i76VK1cy+dkp/PjDbGzzrpS1G0wwsZnTsWKKqySbpMz5ULCRQw87jPMnnEeHDh2cjiUSk8rKyjjtjDPJTe1BVbvoXhYRv/YHOrkL+c+LL+DxaNymKdDInTQo69atY8pzz/HN199As441FyEnafb0SAgmt6a4x1G4izL5au58vv5qHMcceyzjzzlHUySIhFliYiITzh3PE89MpqpVT/BEZx5KU1mML2cZl91xu4qdABq520ojd5GXnZ3N889P4+NPPoaUNpS2G0wgpa3TsZoOa3EXrid503xMeQEnnngi484+W6dwRMKourqaM8eexQZ3G6o6DY/KMRNXf8s+zVxMmTxJd8o3IZrEWBxVUFDA448/zplnjuWT7+ZQutdhFPU4WsUu2owhkN6Jwp7HU9J5f96d8QWnnX4Gzz//PKWlpU6nE4kJXq+Xiy+6kIScJZiqsogfz1WWj3vzSq647FIVO9lKI3chGrkLv7KyMl5//XVeefW/BDwJlLQdiL9Zt4b3DMamygbxbl5OUtZC4lyW884dzwknnKBHmonsoWAwyNnnjCejOpXKziMjeqzEVV8zqEMqj098NKLHkYZHI3cSVVVVVbz11lucevoZvPTfNylqN5SC3mPwN++uYteQGBfVrXpS0Ock8pr34Zlnp3Lm2LOYMWMGgUDA6XQijZbL5eLcc8YRn/s7proiYscxFYW4c1cz4bzxETuGNE4auQvRyN2eCwaDfPnllzwz6VnyCwspbd2f6ja9waULfBsFfxW+TYtIyFlM+3btufyyS9h33311qkekHvx+P2eMPYsN7rZUdRwakWMkZHxHnxZuJj39lP4/bYI0cicRN2/ePCacfyH/+ve9bHC3pqDvKVS3669i15h4fFR1HEpR31NYXZnA3//+Dy6/4kqWLFnidDKRRsfj8XDuOeNI2LwU/FVh37+pLMGbu4IJ545XsZM/0chdiEbu6mfVqlU88eRT/DxvHv5WPahoPxjrS3I6loSBqSgkcePPuHJXc+BBB3HxRRdpjjyROqiqquKUU08jJ7Un1W37hnXfcevm0N1XxEsvTFO5a6I0cidht3nzZv59771MOP98fl6VRWnfMZR33V/FLobY+DRKux9Caa+/MHPBMsad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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(10, 10))\n", "th.stats.display_violinplot_thicket(\n", " thickets=thickets,\n", " nodes=nodes,\n", " columns=columns\n", ")" ] }, { "cell_type": "markdown", "id": "31bfc56d", "metadata": { "papermill": { "duration": 0.015059, "end_time": "2024-09-06T18:35:23.363162", "exception": false, "start_time": "2024-09-06T18:35:23.348103", "status": "completed" }, "tags": [] }, "source": [ "**Example of Error if Not Passing Dictionary of Appropriate Values**" ] }, { "cell_type": "code", "execution_count": 65, "id": "1e4e30fb", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:23.393862Z", "iopub.status.busy": "2024-09-06T18:35:23.393746Z", "iopub.status.idle": "2024-09-06T18:35:23.396270Z", "shell.execute_reply": "2024-09-06T18:35:23.395988Z" }, "papermill": { "duration": 0.01832, "end_time": "2024-09-06T18:35:23.396849", "exception": false, "start_time": "2024-09-06T18:35:23.378529", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "# n = \"not_hatchet_node\"\n", "# plt.figure(figsize=(10, 10))\n", "# th.stats.display_violinplot_thicket(\n", "# thickets=thickets,\n", "# nodes=n,\n", "# columns=columns\n", "# )" ] }, { "cell_type": "markdown", "id": "c01b2605", "metadata": { "papermill": { "duration": 0.014965, "end_time": "2024-09-06T18:35:23.426812", "exception": false, "start_time": "2024-09-06T18:35:23.411847", "status": "completed" }, "tags": [] }, "source": [ "## 7. Creating a New Thicket From Multiple Statsframes \n", "\n", "The `from_statsframes` function allows us to compose multiple statsframes into a new thicket." ] }, { "cell_type": "code", "execution_count": 66, "id": "58fc24f9", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:23.456846Z", "iopub.status.busy": "2024-09-06T18:35:23.456713Z", "iopub.status.idle": "2024-09-06T18:35:23.963531Z", "shell.execute_reply": "2024-09-06T18:35:23.963162Z" }, "papermill": { "duration": 0.522917, "end_time": "2024-09-06T18:35:23.964333", "exception": false, "start_time": "2024-09-06T18:35:23.441416", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "clang_th = th.Thicket.from_caliperreader(clang, disable_tqdm=True)\n", "gcc_th = th.Thicket.from_caliperreader(gcc, disable_tqdm=True)" ] }, { "cell_type": "markdown", "id": "9a778c18", "metadata": { "papermill": { "duration": 0.015374, "end_time": "2024-09-06T18:35:23.995972", "exception": false, "start_time": "2024-09-06T18:35:23.980598", "status": "completed" }, "tags": [] }, "source": [ "**Compute some statistics**" ] }, { "cell_type": "code", "execution_count": 67, "id": "e2df6ee1", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:24.026199Z", "iopub.status.busy": "2024-09-06T18:35:24.026082Z", "iopub.status.idle": "2024-09-06T18:35:24.031511Z", "shell.execute_reply": "2024-09-06T18:35:24.031249Z" }, "papermill": { "duration": 0.021469, "end_time": "2024-09-06T18:35:24.032099", "exception": false, "start_time": "2024-09-06T18:35:24.010630", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "metrics = [\"time (exc)\", \"Machine clears\"]\n", "th.stats.minimum(clang_th, columns=metrics)\n", "th.stats.minimum(gcc_th, columns=metrics)" ] }, { "cell_type": "markdown", "id": "4acae91a", "metadata": { "papermill": { "duration": 0.015202, "end_time": "2024-09-06T18:35:24.063247", "exception": false, "start_time": "2024-09-06T18:35:24.048045", "status": "completed" }, "tags": [] }, "source": [ "**Call `from_statsframes` with optional argument `metadata_key` as new index in the `Thicket.dataframe`**" ] }, { "cell_type": "code", "execution_count": 68, "id": "29212bcf", "metadata": { "execution": { "iopub.execute_input": "2024-09-06T18:35:24.093789Z", "iopub.status.busy": "2024-09-06T18:35:24.093681Z", "iopub.status.idle": "2024-09-06T18:35:24.144615Z", "shell.execute_reply": "2024-09-06T18:35:24.144284Z" }, "papermill": { "duration": 0.067196, "end_time": "2024-09-06T18:35:24.145228", "exception": false, "start_time": "2024-09-06T18:35:24.078032", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
nametime (exc)_minMachine clears_min
nodecompiler
{'name': 'RAJAPerf', 'type': 'function'}clang++-14.0.6RAJAPerf4.696939e+060.001099
g++-10.3.1RAJAPerf5.199698e+060.001071
{'name': 'Algorithm', 'type': 'function'}clang++-14.0.6Algorithm5.176070e+050.000000
g++-10.3.1Algorithm5.844520e+050.000000
{'name': 'Algorithm_MEMCPY', 'type': 'function'}clang++-14.0.6Algorithm_MEMCPY1.982438e+090.990401
g++-10.3.1Algorithm_MEMCPY2.024616e+090.956393
{'name': 'Algorithm_MEMSET', 'type': 'function'}clang++-14.0.6Algorithm_MEMSET2.006252e+090.988505
g++-10.3.1Algorithm_MEMSET2.034808e+090.980433
{'name': 'Algorithm_REDUCE_SUM', 'type': 'function'}clang++-14.0.6Algorithm_REDUCE_SUM4.467119e+080.954967
g++-10.3.1Algorithm_REDUCE_SUM2.380119e+080.770469
{'name': 'Algorithm_SCAN', 'type': 'function'}clang++-14.0.6Algorithm_SCAN1.272137e+090.989927
g++-10.3.1Algorithm_SCAN1.306501e+090.962202
{'name': 'Algorithm_SORT', 'type': 'function'}clang++-14.0.6Algorithm_SORT1.417282e+100.000016
g++-10.3.1Algorithm_SORT1.508977e+100.000114
{'name': 'Algorithm_SORTPAIRS', 'type': 'function'}clang++-14.0.6Algorithm_SORTPAIRS1.705134e+100.000849
g++-10.3.1Algorithm_SORTPAIRS1.852289e+100.000919
{'name': 'Apps', 'type': 'function'}clang++-14.0.6Apps1.002347e+060.001507
g++-10.3.1Apps1.125346e+060.000000
{'name': 'Apps_CONVECTION3DPA', 'type': 'function'}clang++-14.0.6Apps_CONVECTION3DPA3.485457e+090.695832
g++-10.3.1Apps_CONVECTION3DPA2.035302e+090.589267
{'name': 'Apps_DEL_DOT_VEC_2D', 'type': 'function'}clang++-14.0.6Apps_DEL_DOT_VEC_2D8.818507e+090.993517
g++-10.3.1Apps_DEL_DOT_VEC_2D8.138586e+090.950013
{'name': 'Apps_DIFFUSION3DPA', 'type': 'function'}clang++-14.0.6Apps_DIFFUSION3DPA6.505443e+090.680727
g++-10.3.1Apps_DIFFUSION3DPA6.312666e+090.748137
{'name': 'Apps_ENERGY', 'type': 'function'}clang++-14.0.6Apps_ENERGY1.885688e+100.998366
g++-10.3.1Apps_ENERGY2.919249e+100.980559
{'name': 'Apps_FIR', 'type': 'function'}clang++-14.0.6Apps_FIR1.230339e+100.948637
g++-10.3.1Apps_FIR3.977866e+090.973124
{'name': 'Apps_HALOEXCHANGE', 'type': 'function'}clang++-14.0.6Apps_HALOEXCHANGE1.555491e+080.718031
g++-10.3.1Apps_HALOEXCHANGE1.531869e+080.445912
{'name': 'Apps_HALOEXCHANGE_FUSED', 'type': 'function'}clang++-14.0.6Apps_HALOEXCHANGE_FUSED1.563669e+080.725641
g++-10.3.1Apps_HALOEXCHANGE_FUSED1.509247e+080.497782
{'name': 'Apps_LTIMES', 'type': 'function'}clang++-14.0.6Apps_LTIMES1.079771e+100.002366
g++-10.3.1Apps_LTIMES1.206911e+100.000787
{'name': 'Apps_LTIMES_NOVIEW', 'type': 'function'}clang++-14.0.6Apps_LTIMES_NOVIEW1.088326e+100.002322
g++-10.3.1Apps_LTIMES_NOVIEW1.207351e+100.000811
{'name': 'Apps_MASS3DEA', 'type': 'function'}clang++-14.0.6Apps_MASS3DEA1.307013e+090.012053
g++-10.3.1Apps_MASS3DEA1.177887e+080.020143
{'name': 'Apps_MASS3DPA', 'type': 'function'}clang++-14.0.6Apps_MASS3DPA1.632654e+090.861799
g++-10.3.1Apps_MASS3DPA1.514143e+090.695740
{'name': 'Apps_NODAL_ACCUMULATION_3D', 'type': 'function'}clang++-14.0.6Apps_NODAL_ACCUMULATION_3D5.087484e+090.995387
g++-10.3.1Apps_NODAL_ACCUMULATION_3D4.565159e+090.993159
{'name': 'Apps_PRESSURE', 'type': 'function'}clang++-14.0.6Apps_PRESSURE2.634017e+100.998777
g++-10.3.1Apps_PRESSURE2.689227e+100.994130
{'name': 'Apps_VOL3D', 'type': 'function'}clang++-14.0.6Apps_VOL3D1.153690e+100.987049
g++-10.3.1Apps_VOL3D1.132905e+100.861125
{'name': 'Apps_ZONAL_ACCUMULATION_3D', 'type': 'function'}clang++-14.0.6Apps_ZONAL_ACCUMULATION_3D2.096993e+090.981001
g++-10.3.1Apps_ZONAL_ACCUMULATION_3D2.164459e+090.978043
{'name': 'Basic', 'type': 'function'}clang++-14.0.6Basic1.105029e+060.000532
g++-10.3.1Basic1.264477e+060.001196
{'name': 'Basic_COPY8', 'type': 'function'}clang++-14.0.6Basic_COPY81.156202e+100.998887
g++-10.3.1Basic_COPY81.173505e+100.998167
{'name': 'Basic_DAXPY', 'type': 'function'}clang++-14.0.6Basic_DAXPY6.645260e+090.996983
g++-10.3.1Basic_DAXPY6.782508e+090.978549
{'name': 'Basic_DAXPY_ATOMIC', 'type': 'function'}clang++-14.0.6Basic_DAXPY_ATOMIC6.655151e+090.997314
g++-10.3.1Basic_DAXPY_ATOMIC6.854517e+090.988269
{'name': 'Basic_IF_QUAD', 'type': 'function'}clang++-14.0.6Basic_IF_QUAD1.158306e+100.000182
g++-10.3.1Basic_IF_QUAD7.745695e+090.984839
{'name': 'Basic_INDEXLIST', 'type': 'function'}clang++-14.0.6Basic_INDEXLIST3.937568e+090.000042
g++-10.3.1Basic_INDEXLIST4.016778e+090.000075
{'name': 'Basic_INDEXLIST_3LOOP', 'type': 'function'}clang++-14.0.6Basic_INDEXLIST_3LOOP5.144519e+090.000306
g++-10.3.1Basic_INDEXLIST_3LOOP5.713977e+090.000266
{'name': 'Basic_INIT3', 'type': 'function'}clang++-14.0.6Basic_INIT31.865034e+100.999212
g++-10.3.1Basic_INIT31.777127e+100.994807
{'name': 'Basic_INIT_VIEW1D', 'type': 'function'}clang++-14.0.6Basic_INIT_VIEW1D2.023364e+100.985776
g++-10.3.1Basic_INIT_VIEW1D1.962609e+100.998530
{'name': 'Basic_INIT_VIEW1D_OFFSET', 'type': 'function'}clang++-14.0.6Basic_INIT_VIEW1D_OFFSET2.020699e+100.979328
g++-10.3.1Basic_INIT_VIEW1D_OFFSET1.968236e+100.985769
{'name': 'Basic_MAT_MAT_SHARED', 'type': 'function'}clang++-14.0.6Basic_MAT_MAT_SHARED4.962396e+100.070220
g++-10.3.1Basic_MAT_MAT_SHARED3.832422e+100.279999
{'name': 'Basic_MULADDSUB', 'type': 'function'}clang++-14.0.6Basic_MULADDSUB1.391843e+100.998635
g++-10.3.1Basic_MULADDSUB1.245770e+100.992326
{'name': 'Basic_NESTED_INIT', 'type': 'function'}clang++-14.0.6Basic_NESTED_INIT8.099161e+090.506959
g++-10.3.1Basic_NESTED_INIT7.894613e+090.001727
{'name': 'Basic_PI_ATOMIC', 'type': 'function'}clang++-14.0.6Basic_PI_ATOMIC5.833036e+080.631692
g++-10.3.1Basic_PI_ATOMIC5.949396e+080.953870
{'name': 'Basic_PI_REDUCE', 'type': 'function'}clang++-14.0.6Basic_PI_REDUCE5.780467e+080.504244
g++-10.3.1Basic_PI_REDUCE6.029129e+080.939911
{'name': 'Basic_REDUCE3_INT', 'type': 'function'}clang++-14.0.6Basic_REDUCE3_INT6.474681e+070.672811
g++-10.3.1Basic_REDUCE3_INT6.901483e+070.620335
{'name': 'Basic_REDUCE_STRUCT', 'type': 'function'}clang++-14.0.6Basic_REDUCE_STRUCT1.243684e+090.987559
g++-10.3.1Basic_REDUCE_STRUCT5.322239e+080.928560
{'name': 'Basic_TRAP_INT', 'type': 'function'}clang++-14.0.6Basic_TRAP_INT1.544182e+090.699819
g++-10.3.1Basic_TRAP_INT1.618216e+090.959196
{'name': 'Lcals', 'type': 'function'}clang++-14.0.6Lcals7.566380e+050.000620
g++-10.3.1Lcals8.872600e+050.000000
{'name': 'Lcals_DIFF_PREDICT', 'type': 'function'}clang++-14.0.6Lcals_DIFF_PREDICT1.601193e+110.999996
g++-10.3.1Lcals_DIFF_PREDICT2.255699e+110.999958
{'name': 'Lcals_EOS', 'type': 'function'}clang++-14.0.6Lcals_EOS1.198971e+100.983399
g++-10.3.1Lcals_EOS1.219471e+100.993526
{'name': 'Lcals_FIRST_DIFF', 'type': 'function'}clang++-14.0.6Lcals_FIRST_DIFF2.636335e+100.998028
g++-10.3.1Lcals_FIRST_DIFF2.687214e+100.992378
{'name': 'Lcals_FIRST_MIN', 'type': 'function'}clang++-14.0.6Lcals_FIRST_MIN1.163231e+090.977132
g++-10.3.1Lcals_FIRST_MIN1.083891e+090.964905
{'name': 'Lcals_FIRST_SUM', 'type': 'function'}clang++-14.0.6Lcals_FIRST_SUM2.624228e+100.997765
g++-10.3.1Lcals_FIRST_SUM2.683986e+100.991579
{'name': 'Lcals_GEN_LIN_RECUR', 'type': 'function'}clang++-14.0.6Lcals_GEN_LIN_RECUR2.457303e+100.998405
g++-10.3.1Lcals_GEN_LIN_RECUR2.552379e+100.992075
{'name': 'Lcals_HYDRO_1D', 'type': 'function'}clang++-14.0.6Lcals_HYDRO_1D1.857676e+100.997940
g++-10.3.1Lcals_HYDRO_1D1.903829e+100.993380
{'name': 'Lcals_HYDRO_2D', 'type': 'function'}clang++-14.0.6Lcals_HYDRO_2D1.454849e+100.261911
g++-10.3.1Lcals_HYDRO_2D1.623377e+100.167969
{'name': 'Lcals_INT_PREDICT', 'type': 'function'}clang++-14.0.6Lcals_INT_PREDICT2.973949e+100.999176
g++-10.3.1Lcals_INT_PREDICT2.617019e+100.997796
{'name': 'Lcals_PLANCKIAN', 'type': 'function'}clang++-14.0.6Lcals_PLANCKIAN6.389718e+090.986164
g++-10.3.1Lcals_PLANCKIAN2.002844e+090.634681
{'name': 'Lcals_TRIDIAG_ELIM', 'type': 'function'}clang++-14.0.6Lcals_TRIDIAG_ELIM2.398415e+100.998861
g++-10.3.1Lcals_TRIDIAG_ELIM2.495542e+100.993832
{'name': 'Polybench', 'type': 'function'}clang++-14.0.6Polybench9.125410e+050.000000
g++-10.3.1Polybench1.034472e+060.000000
{'name': 'Polybench_2MM', 'type': 'function'}clang++-14.0.6Polybench_2MM2.769955e+110.051111
g++-10.3.1Polybench_2MM2.776056e+110.052509
{'name': 'Polybench_3MM', 'type': 'function'}clang++-14.0.6Polybench_3MM3.063964e+110.036013
g++-10.3.1Polybench_3MM2.996033e+110.032251
{'name': 'Polybench_ADI', 'type': 'function'}clang++-14.0.6Polybench_ADI5.163312e+090.142598
g++-10.3.1Polybench_ADI4.422240e+090.203495
{'name': 'Polybench_ATAX', 'type': 'function'}clang++-14.0.6Polybench_ATAX5.560644e+090.051479
g++-10.3.1Polybench_ATAX4.898450e+090.049076
{'name': 'Polybench_FDTD_2D', 'type': 'function'}clang++-14.0.6Polybench_FDTD_2D1.470718e+100.077050
g++-10.3.1Polybench_FDTD_2D1.476767e+100.043012
{'name': 'Polybench_FLOYD_WARSHALL', 'type': 'function'}clang++-14.0.6Polybench_FLOYD_WARSHALL3.063373e+110.067700
g++-10.3.1Polybench_FLOYD_WARSHALL3.066635e+110.040239
{'name': 'Polybench_GEMM', 'type': 'function'}clang++-14.0.6Polybench_GEMM6.364274e+100.002912
g++-10.3.1Polybench_GEMM4.471498e+100.006174
{'name': 'Polybench_GEMVER', 'type': 'function'}clang++-14.0.6Polybench_GEMVER1.220057e+090.065141
g++-10.3.1Polybench_GEMVER1.140922e+090.041755
{'name': 'Polybench_GESUMMV', 'type': 'function'}clang++-14.0.6Polybench_GESUMMV1.656512e+090.044970
g++-10.3.1Polybench_GESUMMV1.316184e+090.033470
{'name': 'Polybench_HEAT_3D', 'type': 'function'}clang++-14.0.6Polybench_HEAT_3D1.349970e+100.007887
g++-10.3.1Polybench_HEAT_3D1.401785e+100.006088
{'name': 'Polybench_JACOBI_1D', 'type': 'function'}clang++-14.0.6Polybench_JACOBI_1D4.176803e+100.995135
g++-10.3.1Polybench_JACOBI_1D5.078132e+100.991681
{'name': 'Polybench_JACOBI_2D', 'type': 'function'}clang++-14.0.6Polybench_JACOBI_2D5.575725e+100.053653
g++-10.3.1Polybench_JACOBI_2D5.738136e+100.060893
{'name': 'Polybench_MVT', 'type': 'function'}clang++-14.0.6Polybench_MVT5.127557e+090.047232
g++-10.3.1Polybench_MVT4.586034e+090.045896
{'name': 'Stream', 'type': 'function'}clang++-14.0.6Stream3.487670e+050.000000
g++-10.3.1Stream4.002550e+050.000000
{'name': 'Stream_ADD', 'type': 'function'}clang++-14.0.6Stream_ADD1.839583e+100.997971
g++-10.3.1Stream_ADD1.893905e+100.991825
{'name': 'Stream_COPY', 'type': 'function'}clang++-14.0.6Stream_COPY2.318353e+100.997559
g++-10.3.1Stream_COPY2.406787e+100.991807
{'name': 'Stream_DOT', 'type': 'function'}clang++-14.0.6Stream_DOT2.856834e+100.996162
g++-10.3.1Stream_DOT2.135819e+100.989492
{'name': 'Stream_MUL', 'type': 'function'}clang++-14.0.6Stream_MUL2.356351e+100.997419
g++-10.3.1Stream_MUL2.420444e+100.992119
{'name': 'Stream_TRIAD', 'type': 'function'}clang++-14.0.6Stream_TRIAD1.840735e+100.997505
g++-10.3.1Stream_TRIAD1.904871e+100.993449
\n", "
" ], "text/plain": [ " name \\\n", "node compiler \n", "{'name': 'RAJAPerf', 'type': 'function'} clang++-14.0.6 RAJAPerf \n", " g++-10.3.1 RAJAPerf \n", "{'name': 'Algorithm', 'type': 'function'} clang++-14.0.6 Algorithm \n", " g++-10.3.1 Algorithm \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} clang++-14.0.6 Algorithm_MEMCPY \n", " g++-10.3.1 Algorithm_MEMCPY \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} clang++-14.0.6 Algorithm_MEMSET \n", " g++-10.3.1 Algorithm_MEMSET \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... clang++-14.0.6 Algorithm_REDUCE_SUM \n", " g++-10.3.1 Algorithm_REDUCE_SUM \n", "{'name': 'Algorithm_SCAN', 'type': 'function'} clang++-14.0.6 Algorithm_SCAN \n", " g++-10.3.1 Algorithm_SCAN \n", "{'name': 'Algorithm_SORT', 'type': 'function'} clang++-14.0.6 Algorithm_SORT \n", " g++-10.3.1 Algorithm_SORT \n", "{'name': 'Algorithm_SORTPAIRS', 'type': 'functi... clang++-14.0.6 Algorithm_SORTPAIRS \n", " g++-10.3.1 Algorithm_SORTPAIRS \n", "{'name': 'Apps', 'type': 'function'} clang++-14.0.6 Apps \n", " g++-10.3.1 Apps \n", "{'name': 'Apps_CONVECTION3DPA', 'type': 'functi... clang++-14.0.6 Apps_CONVECTION3DPA \n", " g++-10.3.1 Apps_CONVECTION3DPA \n", "{'name': 'Apps_DEL_DOT_VEC_2D', 'type': 'functi... clang++-14.0.6 Apps_DEL_DOT_VEC_2D \n", " g++-10.3.1 Apps_DEL_DOT_VEC_2D \n", "{'name': 'Apps_DIFFUSION3DPA', 'type': 'function'} clang++-14.0.6 Apps_DIFFUSION3DPA \n", " g++-10.3.1 Apps_DIFFUSION3DPA \n", "{'name': 'Apps_ENERGY', 'type': 'function'} clang++-14.0.6 Apps_ENERGY \n", " g++-10.3.1 Apps_ENERGY \n", "{'name': 'Apps_FIR', 'type': 'function'} clang++-14.0.6 Apps_FIR \n", " g++-10.3.1 Apps_FIR \n", "{'name': 'Apps_HALOEXCHANGE', 'type': 'function'} clang++-14.0.6 Apps_HALOEXCHANGE \n", " g++-10.3.1 Apps_HALOEXCHANGE \n", "{'name': 'Apps_HALOEXCHANGE_FUSED', 'type': 'fu... clang++-14.0.6 Apps_HALOEXCHANGE_FUSED \n", " g++-10.3.1 Apps_HALOEXCHANGE_FUSED \n", "{'name': 'Apps_LTIMES', 'type': 'function'} clang++-14.0.6 Apps_LTIMES \n", " g++-10.3.1 Apps_LTIMES \n", "{'name': 'Apps_LTIMES_NOVIEW', 'type': 'function'} clang++-14.0.6 Apps_LTIMES_NOVIEW \n", " g++-10.3.1 Apps_LTIMES_NOVIEW \n", "{'name': 'Apps_MASS3DEA', 'type': 'function'} clang++-14.0.6 Apps_MASS3DEA \n", " g++-10.3.1 Apps_MASS3DEA \n", "{'name': 'Apps_MASS3DPA', 'type': 'function'} clang++-14.0.6 Apps_MASS3DPA \n", " g++-10.3.1 Apps_MASS3DPA \n", "{'name': 'Apps_NODAL_ACCUMULATION_3D', 'type': ... clang++-14.0.6 Apps_NODAL_ACCUMULATION_3D \n", " g++-10.3.1 Apps_NODAL_ACCUMULATION_3D \n", "{'name': 'Apps_PRESSURE', 'type': 'function'} clang++-14.0.6 Apps_PRESSURE \n", " g++-10.3.1 Apps_PRESSURE \n", "{'name': 'Apps_VOL3D', 'type': 'function'} clang++-14.0.6 Apps_VOL3D \n", " g++-10.3.1 Apps_VOL3D \n", "{'name': 'Apps_ZONAL_ACCUMULATION_3D', 'type': ... clang++-14.0.6 Apps_ZONAL_ACCUMULATION_3D \n", " g++-10.3.1 Apps_ZONAL_ACCUMULATION_3D \n", "{'name': 'Basic', 'type': 'function'} clang++-14.0.6 Basic \n", " g++-10.3.1 Basic \n", "{'name': 'Basic_COPY8', 'type': 'function'} clang++-14.0.6 Basic_COPY8 \n", " g++-10.3.1 Basic_COPY8 \n", "{'name': 'Basic_DAXPY', 'type': 'function'} clang++-14.0.6 Basic_DAXPY \n", " g++-10.3.1 Basic_DAXPY \n", "{'name': 'Basic_DAXPY_ATOMIC', 'type': 'function'} clang++-14.0.6 Basic_DAXPY_ATOMIC \n", " g++-10.3.1 Basic_DAXPY_ATOMIC \n", "{'name': 'Basic_IF_QUAD', 'type': 'function'} clang++-14.0.6 Basic_IF_QUAD \n", " g++-10.3.1 Basic_IF_QUAD \n", "{'name': 'Basic_INDEXLIST', 'type': 'function'} clang++-14.0.6 Basic_INDEXLIST \n", " g++-10.3.1 Basic_INDEXLIST \n", "{'name': 'Basic_INDEXLIST_3LOOP', 'type': 'func... clang++-14.0.6 Basic_INDEXLIST_3LOOP \n", " g++-10.3.1 Basic_INDEXLIST_3LOOP \n", "{'name': 'Basic_INIT3', 'type': 'function'} clang++-14.0.6 Basic_INIT3 \n", " g++-10.3.1 Basic_INIT3 \n", "{'name': 'Basic_INIT_VIEW1D', 'type': 'function'} clang++-14.0.6 Basic_INIT_VIEW1D \n", " g++-10.3.1 Basic_INIT_VIEW1D \n", "{'name': 'Basic_INIT_VIEW1D_OFFSET', 'type': 'f... clang++-14.0.6 Basic_INIT_VIEW1D_OFFSET \n", " g++-10.3.1 Basic_INIT_VIEW1D_OFFSET \n", "{'name': 'Basic_MAT_MAT_SHARED', 'type': 'funct... clang++-14.0.6 Basic_MAT_MAT_SHARED \n", " g++-10.3.1 Basic_MAT_MAT_SHARED \n", "{'name': 'Basic_MULADDSUB', 'type': 'function'} clang++-14.0.6 Basic_MULADDSUB \n", " g++-10.3.1 Basic_MULADDSUB \n", "{'name': 'Basic_NESTED_INIT', 'type': 'function'} clang++-14.0.6 Basic_NESTED_INIT \n", " g++-10.3.1 Basic_NESTED_INIT \n", "{'name': 'Basic_PI_ATOMIC', 'type': 'function'} clang++-14.0.6 Basic_PI_ATOMIC \n", " g++-10.3.1 Basic_PI_ATOMIC \n", "{'name': 'Basic_PI_REDUCE', 'type': 'function'} clang++-14.0.6 Basic_PI_REDUCE \n", " g++-10.3.1 Basic_PI_REDUCE \n", "{'name': 'Basic_REDUCE3_INT', 'type': 'function'} clang++-14.0.6 Basic_REDUCE3_INT \n", " g++-10.3.1 Basic_REDUCE3_INT \n", "{'name': 'Basic_REDUCE_STRUCT', 'type': 'functi... clang++-14.0.6 Basic_REDUCE_STRUCT \n", " g++-10.3.1 Basic_REDUCE_STRUCT \n", "{'name': 'Basic_TRAP_INT', 'type': 'function'} clang++-14.0.6 Basic_TRAP_INT \n", " g++-10.3.1 Basic_TRAP_INT \n", "{'name': 'Lcals', 'type': 'function'} clang++-14.0.6 Lcals \n", " g++-10.3.1 Lcals \n", "{'name': 'Lcals_DIFF_PREDICT', 'type': 'function'} clang++-14.0.6 Lcals_DIFF_PREDICT \n", " g++-10.3.1 Lcals_DIFF_PREDICT \n", "{'name': 'Lcals_EOS', 'type': 'function'} clang++-14.0.6 Lcals_EOS \n", " g++-10.3.1 Lcals_EOS \n", "{'name': 'Lcals_FIRST_DIFF', 'type': 'function'} clang++-14.0.6 Lcals_FIRST_DIFF \n", " g++-10.3.1 Lcals_FIRST_DIFF \n", "{'name': 'Lcals_FIRST_MIN', 'type': 'function'} clang++-14.0.6 Lcals_FIRST_MIN \n", " g++-10.3.1 Lcals_FIRST_MIN \n", "{'name': 'Lcals_FIRST_SUM', 'type': 'function'} clang++-14.0.6 Lcals_FIRST_SUM \n", " g++-10.3.1 Lcals_FIRST_SUM \n", "{'name': 'Lcals_GEN_LIN_RECUR', 'type': 'functi... clang++-14.0.6 Lcals_GEN_LIN_RECUR \n", " g++-10.3.1 Lcals_GEN_LIN_RECUR \n", "{'name': 'Lcals_HYDRO_1D', 'type': 'function'} clang++-14.0.6 Lcals_HYDRO_1D \n", " g++-10.3.1 Lcals_HYDRO_1D \n", "{'name': 'Lcals_HYDRO_2D', 'type': 'function'} clang++-14.0.6 Lcals_HYDRO_2D \n", " g++-10.3.1 Lcals_HYDRO_2D \n", "{'name': 'Lcals_INT_PREDICT', 'type': 'function'} clang++-14.0.6 Lcals_INT_PREDICT \n", " g++-10.3.1 Lcals_INT_PREDICT \n", "{'name': 'Lcals_PLANCKIAN', 'type': 'function'} clang++-14.0.6 Lcals_PLANCKIAN \n", " g++-10.3.1 Lcals_PLANCKIAN \n", "{'name': 'Lcals_TRIDIAG_ELIM', 'type': 'function'} clang++-14.0.6 Lcals_TRIDIAG_ELIM \n", " g++-10.3.1 Lcals_TRIDIAG_ELIM \n", "{'name': 'Polybench', 'type': 'function'} clang++-14.0.6 Polybench \n", " g++-10.3.1 Polybench \n", "{'name': 'Polybench_2MM', 'type': 'function'} clang++-14.0.6 Polybench_2MM \n", " g++-10.3.1 Polybench_2MM \n", "{'name': 'Polybench_3MM', 'type': 'function'} clang++-14.0.6 Polybench_3MM \n", " g++-10.3.1 Polybench_3MM \n", "{'name': 'Polybench_ADI', 'type': 'function'} clang++-14.0.6 Polybench_ADI \n", " g++-10.3.1 Polybench_ADI \n", "{'name': 'Polybench_ATAX', 'type': 'function'} clang++-14.0.6 Polybench_ATAX \n", " g++-10.3.1 Polybench_ATAX \n", "{'name': 'Polybench_FDTD_2D', 'type': 'function'} clang++-14.0.6 Polybench_FDTD_2D \n", " g++-10.3.1 Polybench_FDTD_2D \n", "{'name': 'Polybench_FLOYD_WARSHALL', 'type': 'f... clang++-14.0.6 Polybench_FLOYD_WARSHALL \n", " g++-10.3.1 Polybench_FLOYD_WARSHALL \n", "{'name': 'Polybench_GEMM', 'type': 'function'} clang++-14.0.6 Polybench_GEMM \n", " g++-10.3.1 Polybench_GEMM \n", "{'name': 'Polybench_GEMVER', 'type': 'function'} clang++-14.0.6 Polybench_GEMVER \n", " g++-10.3.1 Polybench_GEMVER \n", "{'name': 'Polybench_GESUMMV', 'type': 'function'} clang++-14.0.6 Polybench_GESUMMV \n", " g++-10.3.1 Polybench_GESUMMV \n", "{'name': 'Polybench_HEAT_3D', 'type': 'function'} clang++-14.0.6 Polybench_HEAT_3D \n", " g++-10.3.1 Polybench_HEAT_3D \n", "{'name': 'Polybench_JACOBI_1D', 'type': 'functi... clang++-14.0.6 Polybench_JACOBI_1D \n", " g++-10.3.1 Polybench_JACOBI_1D \n", "{'name': 'Polybench_JACOBI_2D', 'type': 'functi... clang++-14.0.6 Polybench_JACOBI_2D \n", " g++-10.3.1 Polybench_JACOBI_2D \n", "{'name': 'Polybench_MVT', 'type': 'function'} clang++-14.0.6 Polybench_MVT \n", " g++-10.3.1 Polybench_MVT \n", "{'name': 'Stream', 'type': 'function'} clang++-14.0.6 Stream \n", " g++-10.3.1 Stream \n", "{'name': 'Stream_ADD', 'type': 'function'} clang++-14.0.6 Stream_ADD \n", " g++-10.3.1 Stream_ADD \n", "{'name': 'Stream_COPY', 'type': 'function'} clang++-14.0.6 Stream_COPY \n", " g++-10.3.1 Stream_COPY \n", "{'name': 'Stream_DOT', 'type': 'function'} clang++-14.0.6 Stream_DOT \n", " g++-10.3.1 Stream_DOT \n", "{'name': 'Stream_MUL', 'type': 'function'} clang++-14.0.6 Stream_MUL \n", " g++-10.3.1 Stream_MUL \n", "{'name': 'Stream_TRIAD', 'type': 'function'} clang++-14.0.6 Stream_TRIAD \n", " g++-10.3.1 Stream_TRIAD \n", "\n", " time (exc)_min \\\n", "node compiler \n", "{'name': 'RAJAPerf', 'type': 'function'} clang++-14.0.6 4.696939e+06 \n", " g++-10.3.1 5.199698e+06 \n", "{'name': 'Algorithm', 'type': 'function'} clang++-14.0.6 5.176070e+05 \n", " g++-10.3.1 5.844520e+05 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} clang++-14.0.6 1.982438e+09 \n", " g++-10.3.1 2.024616e+09 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} clang++-14.0.6 2.006252e+09 \n", " g++-10.3.1 2.034808e+09 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... clang++-14.0.6 4.467119e+08 \n", " g++-10.3.1 2.380119e+08 \n", "{'name': 'Algorithm_SCAN', 'type': 'function'} clang++-14.0.6 1.272137e+09 \n", " g++-10.3.1 1.306501e+09 \n", "{'name': 'Algorithm_SORT', 'type': 'function'} clang++-14.0.6 1.417282e+10 \n", " g++-10.3.1 1.508977e+10 \n", "{'name': 'Algorithm_SORTPAIRS', 'type': 'functi... clang++-14.0.6 1.705134e+10 \n", " g++-10.3.1 1.852289e+10 \n", "{'name': 'Apps', 'type': 'function'} clang++-14.0.6 1.002347e+06 \n", " g++-10.3.1 1.125346e+06 \n", "{'name': 'Apps_CONVECTION3DPA', 'type': 'functi... clang++-14.0.6 3.485457e+09 \n", " g++-10.3.1 2.035302e+09 \n", "{'name': 'Apps_DEL_DOT_VEC_2D', 'type': 'functi... clang++-14.0.6 8.818507e+09 \n", " g++-10.3.1 8.138586e+09 \n", "{'name': 'Apps_DIFFUSION3DPA', 'type': 'function'} clang++-14.0.6 6.505443e+09 \n", " g++-10.3.1 6.312666e+09 \n", "{'name': 'Apps_ENERGY', 'type': 'function'} clang++-14.0.6 1.885688e+10 \n", " g++-10.3.1 2.919249e+10 \n", "{'name': 'Apps_FIR', 'type': 'function'} clang++-14.0.6 1.230339e+10 \n", " g++-10.3.1 3.977866e+09 \n", "{'name': 'Apps_HALOEXCHANGE', 'type': 'function'} clang++-14.0.6 1.555491e+08 \n", " g++-10.3.1 1.531869e+08 \n", "{'name': 'Apps_HALOEXCHANGE_FUSED', 'type': 'fu... clang++-14.0.6 1.563669e+08 \n", " g++-10.3.1 1.509247e+08 \n", "{'name': 'Apps_LTIMES', 'type': 'function'} clang++-14.0.6 1.079771e+10 \n", " g++-10.3.1 1.206911e+10 \n", "{'name': 'Apps_LTIMES_NOVIEW', 'type': 'function'} clang++-14.0.6 1.088326e+10 \n", " g++-10.3.1 1.207351e+10 \n", "{'name': 'Apps_MASS3DEA', 'type': 'function'} clang++-14.0.6 1.307013e+09 \n", " g++-10.3.1 1.177887e+08 \n", "{'name': 'Apps_MASS3DPA', 'type': 'function'} clang++-14.0.6 1.632654e+09 \n", " g++-10.3.1 1.514143e+09 \n", "{'name': 'Apps_NODAL_ACCUMULATION_3D', 'type': ... clang++-14.0.6 5.087484e+09 \n", " g++-10.3.1 4.565159e+09 \n", "{'name': 'Apps_PRESSURE', 'type': 'function'} clang++-14.0.6 2.634017e+10 \n", " g++-10.3.1 2.689227e+10 \n", "{'name': 'Apps_VOL3D', 'type': 'function'} clang++-14.0.6 1.153690e+10 \n", " g++-10.3.1 1.132905e+10 \n", "{'name': 'Apps_ZONAL_ACCUMULATION_3D', 'type': ... clang++-14.0.6 2.096993e+09 \n", " g++-10.3.1 2.164459e+09 \n", "{'name': 'Basic', 'type': 'function'} clang++-14.0.6 1.105029e+06 \n", " g++-10.3.1 1.264477e+06 \n", "{'name': 'Basic_COPY8', 'type': 'function'} clang++-14.0.6 1.156202e+10 \n", " g++-10.3.1 1.173505e+10 \n", "{'name': 'Basic_DAXPY', 'type': 'function'} clang++-14.0.6 6.645260e+09 \n", " g++-10.3.1 6.782508e+09 \n", "{'name': 'Basic_DAXPY_ATOMIC', 'type': 'function'} clang++-14.0.6 6.655151e+09 \n", " g++-10.3.1 6.854517e+09 \n", "{'name': 'Basic_IF_QUAD', 'type': 'function'} clang++-14.0.6 1.158306e+10 \n", " g++-10.3.1 7.745695e+09 \n", "{'name': 'Basic_INDEXLIST', 'type': 'function'} clang++-14.0.6 3.937568e+09 \n", " g++-10.3.1 4.016778e+09 \n", "{'name': 'Basic_INDEXLIST_3LOOP', 'type': 'func... clang++-14.0.6 5.144519e+09 \n", " g++-10.3.1 5.713977e+09 \n", "{'name': 'Basic_INIT3', 'type': 'function'} clang++-14.0.6 1.865034e+10 \n", " g++-10.3.1 1.777127e+10 \n", "{'name': 'Basic_INIT_VIEW1D', 'type': 'function'} clang++-14.0.6 2.023364e+10 \n", " g++-10.3.1 1.962609e+10 \n", "{'name': 'Basic_INIT_VIEW1D_OFFSET', 'type': 'f... clang++-14.0.6 2.020699e+10 \n", " g++-10.3.1 1.968236e+10 \n", "{'name': 'Basic_MAT_MAT_SHARED', 'type': 'funct... clang++-14.0.6 4.962396e+10 \n", " g++-10.3.1 3.832422e+10 \n", "{'name': 'Basic_MULADDSUB', 'type': 'function'} clang++-14.0.6 1.391843e+10 \n", " g++-10.3.1 1.245770e+10 \n", "{'name': 'Basic_NESTED_INIT', 'type': 'function'} clang++-14.0.6 8.099161e+09 \n", " g++-10.3.1 7.894613e+09 \n", "{'name': 'Basic_PI_ATOMIC', 'type': 'function'} clang++-14.0.6 5.833036e+08 \n", " g++-10.3.1 5.949396e+08 \n", "{'name': 'Basic_PI_REDUCE', 'type': 'function'} clang++-14.0.6 5.780467e+08 \n", " g++-10.3.1 6.029129e+08 \n", "{'name': 'Basic_REDUCE3_INT', 'type': 'function'} clang++-14.0.6 6.474681e+07 \n", " g++-10.3.1 6.901483e+07 \n", "{'name': 'Basic_REDUCE_STRUCT', 'type': 'functi... clang++-14.0.6 1.243684e+09 \n", " g++-10.3.1 5.322239e+08 \n", "{'name': 'Basic_TRAP_INT', 'type': 'function'} clang++-14.0.6 1.544182e+09 \n", " g++-10.3.1 1.618216e+09 \n", "{'name': 'Lcals', 'type': 'function'} clang++-14.0.6 7.566380e+05 \n", " g++-10.3.1 8.872600e+05 \n", "{'name': 'Lcals_DIFF_PREDICT', 'type': 'function'} clang++-14.0.6 1.601193e+11 \n", " g++-10.3.1 2.255699e+11 \n", "{'name': 'Lcals_EOS', 'type': 'function'} clang++-14.0.6 1.198971e+10 \n", " g++-10.3.1 1.219471e+10 \n", "{'name': 'Lcals_FIRST_DIFF', 'type': 'function'} clang++-14.0.6 2.636335e+10 \n", " g++-10.3.1 2.687214e+10 \n", "{'name': 'Lcals_FIRST_MIN', 'type': 'function'} clang++-14.0.6 1.163231e+09 \n", " g++-10.3.1 1.083891e+09 \n", "{'name': 'Lcals_FIRST_SUM', 'type': 'function'} clang++-14.0.6 2.624228e+10 \n", " g++-10.3.1 2.683986e+10 \n", "{'name': 'Lcals_GEN_LIN_RECUR', 'type': 'functi... clang++-14.0.6 2.457303e+10 \n", " g++-10.3.1 2.552379e+10 \n", "{'name': 'Lcals_HYDRO_1D', 'type': 'function'} clang++-14.0.6 1.857676e+10 \n", " g++-10.3.1 1.903829e+10 \n", "{'name': 'Lcals_HYDRO_2D', 'type': 'function'} clang++-14.0.6 1.454849e+10 \n", " g++-10.3.1 1.623377e+10 \n", "{'name': 'Lcals_INT_PREDICT', 'type': 'function'} clang++-14.0.6 2.973949e+10 \n", " g++-10.3.1 2.617019e+10 \n", "{'name': 'Lcals_PLANCKIAN', 'type': 'function'} clang++-14.0.6 6.389718e+09 \n", " g++-10.3.1 2.002844e+09 \n", "{'name': 'Lcals_TRIDIAG_ELIM', 'type': 'function'} clang++-14.0.6 2.398415e+10 \n", " g++-10.3.1 2.495542e+10 \n", "{'name': 'Polybench', 'type': 'function'} clang++-14.0.6 9.125410e+05 \n", " g++-10.3.1 1.034472e+06 \n", "{'name': 'Polybench_2MM', 'type': 'function'} clang++-14.0.6 2.769955e+11 \n", " g++-10.3.1 2.776056e+11 \n", "{'name': 'Polybench_3MM', 'type': 'function'} clang++-14.0.6 3.063964e+11 \n", " g++-10.3.1 2.996033e+11 \n", "{'name': 'Polybench_ADI', 'type': 'function'} clang++-14.0.6 5.163312e+09 \n", " g++-10.3.1 4.422240e+09 \n", "{'name': 'Polybench_ATAX', 'type': 'function'} clang++-14.0.6 5.560644e+09 \n", " g++-10.3.1 4.898450e+09 \n", "{'name': 'Polybench_FDTD_2D', 'type': 'function'} clang++-14.0.6 1.470718e+10 \n", " g++-10.3.1 1.476767e+10 \n", "{'name': 'Polybench_FLOYD_WARSHALL', 'type': 'f... clang++-14.0.6 3.063373e+11 \n", " g++-10.3.1 3.066635e+11 \n", "{'name': 'Polybench_GEMM', 'type': 'function'} clang++-14.0.6 6.364274e+10 \n", " g++-10.3.1 4.471498e+10 \n", "{'name': 'Polybench_GEMVER', 'type': 'function'} clang++-14.0.6 1.220057e+09 \n", " g++-10.3.1 1.140922e+09 \n", "{'name': 'Polybench_GESUMMV', 'type': 'function'} clang++-14.0.6 1.656512e+09 \n", " g++-10.3.1 1.316184e+09 \n", "{'name': 'Polybench_HEAT_3D', 'type': 'function'} clang++-14.0.6 1.349970e+10 \n", " g++-10.3.1 1.401785e+10 \n", "{'name': 'Polybench_JACOBI_1D', 'type': 'functi... clang++-14.0.6 4.176803e+10 \n", " g++-10.3.1 5.078132e+10 \n", "{'name': 'Polybench_JACOBI_2D', 'type': 'functi... clang++-14.0.6 5.575725e+10 \n", " g++-10.3.1 5.738136e+10 \n", "{'name': 'Polybench_MVT', 'type': 'function'} clang++-14.0.6 5.127557e+09 \n", " g++-10.3.1 4.586034e+09 \n", "{'name': 'Stream', 'type': 'function'} clang++-14.0.6 3.487670e+05 \n", " g++-10.3.1 4.002550e+05 \n", "{'name': 'Stream_ADD', 'type': 'function'} clang++-14.0.6 1.839583e+10 \n", " g++-10.3.1 1.893905e+10 \n", "{'name': 'Stream_COPY', 'type': 'function'} clang++-14.0.6 2.318353e+10 \n", " g++-10.3.1 2.406787e+10 \n", "{'name': 'Stream_DOT', 'type': 'function'} clang++-14.0.6 2.856834e+10 \n", " g++-10.3.1 2.135819e+10 \n", "{'name': 'Stream_MUL', 'type': 'function'} clang++-14.0.6 2.356351e+10 \n", " g++-10.3.1 2.420444e+10 \n", "{'name': 'Stream_TRIAD', 'type': 'function'} clang++-14.0.6 1.840735e+10 \n", " g++-10.3.1 1.904871e+10 \n", "\n", " Machine clears_min \n", "node compiler \n", "{'name': 'RAJAPerf', 'type': 'function'} clang++-14.0.6 0.001099 \n", " g++-10.3.1 0.001071 \n", "{'name': 'Algorithm', 'type': 'function'} clang++-14.0.6 0.000000 \n", " g++-10.3.1 0.000000 \n", "{'name': 'Algorithm_MEMCPY', 'type': 'function'} clang++-14.0.6 0.990401 \n", " g++-10.3.1 0.956393 \n", "{'name': 'Algorithm_MEMSET', 'type': 'function'} clang++-14.0.6 0.988505 \n", " g++-10.3.1 0.980433 \n", "{'name': 'Algorithm_REDUCE_SUM', 'type': 'funct... clang++-14.0.6 0.954967 \n", " g++-10.3.1 0.770469 \n", "{'name': 'Algorithm_SCAN', 'type': 'function'} clang++-14.0.6 0.989927 \n", " g++-10.3.1 0.962202 \n", "{'name': 'Algorithm_SORT', 'type': 'function'} clang++-14.0.6 0.000016 \n", " g++-10.3.1 0.000114 \n", "{'name': 'Algorithm_SORTPAIRS', 'type': 'functi... clang++-14.0.6 0.000849 \n", " g++-10.3.1 0.000919 \n", "{'name': 'Apps', 'type': 'function'} clang++-14.0.6 0.001507 \n", " g++-10.3.1 0.000000 \n", "{'name': 'Apps_CONVECTION3DPA', 'type': 'functi... clang++-14.0.6 0.695832 \n", " g++-10.3.1 0.589267 \n", "{'name': 'Apps_DEL_DOT_VEC_2D', 'type': 'functi... clang++-14.0.6 0.993517 \n", " g++-10.3.1 0.950013 \n", "{'name': 'Apps_DIFFUSION3DPA', 'type': 'function'} clang++-14.0.6 0.680727 \n", " g++-10.3.1 0.748137 \n", "{'name': 'Apps_ENERGY', 'type': 'function'} clang++-14.0.6 0.998366 \n", " g++-10.3.1 0.980559 \n", "{'name': 'Apps_FIR', 'type': 'function'} clang++-14.0.6 0.948637 \n", " g++-10.3.1 0.973124 \n", "{'name': 'Apps_HALOEXCHANGE', 'type': 'function'} clang++-14.0.6 0.718031 \n", " g++-10.3.1 0.445912 \n", "{'name': 'Apps_HALOEXCHANGE_FUSED', 'type': 'fu... clang++-14.0.6 0.725641 \n", " g++-10.3.1 0.497782 \n", "{'name': 'Apps_LTIMES', 'type': 'function'} clang++-14.0.6 0.002366 \n", " g++-10.3.1 0.000787 \n", "{'name': 'Apps_LTIMES_NOVIEW', 'type': 'function'} clang++-14.0.6 0.002322 \n", " g++-10.3.1 0.000811 \n", "{'name': 'Apps_MASS3DEA', 'type': 'function'} clang++-14.0.6 0.012053 \n", " g++-10.3.1 0.020143 \n", "{'name': 'Apps_MASS3DPA', 'type': 'function'} clang++-14.0.6 0.861799 \n", " g++-10.3.1 0.695740 \n", "{'name': 'Apps_NODAL_ACCUMULATION_3D', 'type': ... clang++-14.0.6 0.995387 \n", " g++-10.3.1 0.993159 \n", "{'name': 'Apps_PRESSURE', 'type': 'function'} clang++-14.0.6 0.998777 \n", " g++-10.3.1 0.994130 \n", "{'name': 'Apps_VOL3D', 'type': 'function'} clang++-14.0.6 0.987049 \n", " g++-10.3.1 0.861125 \n", "{'name': 'Apps_ZONAL_ACCUMULATION_3D', 'type': ... clang++-14.0.6 0.981001 \n", " g++-10.3.1 0.978043 \n", "{'name': 'Basic', 'type': 'function'} clang++-14.0.6 0.000532 \n", " g++-10.3.1 0.001196 \n", "{'name': 'Basic_COPY8', 'type': 'function'} clang++-14.0.6 0.998887 \n", " g++-10.3.1 0.998167 \n", "{'name': 'Basic_DAXPY', 'type': 'function'} clang++-14.0.6 0.996983 \n", " g++-10.3.1 0.978549 \n", "{'name': 'Basic_DAXPY_ATOMIC', 'type': 'function'} clang++-14.0.6 0.997314 \n", " g++-10.3.1 0.988269 \n", "{'name': 'Basic_IF_QUAD', 'type': 'function'} clang++-14.0.6 0.000182 \n", " g++-10.3.1 0.984839 \n", "{'name': 'Basic_INDEXLIST', 'type': 'function'} clang++-14.0.6 0.000042 \n", " g++-10.3.1 0.000075 \n", "{'name': 'Basic_INDEXLIST_3LOOP', 'type': 'func... clang++-14.0.6 0.000306 \n", " g++-10.3.1 0.000266 \n", "{'name': 'Basic_INIT3', 'type': 'function'} clang++-14.0.6 0.999212 \n", " g++-10.3.1 0.994807 \n", "{'name': 'Basic_INIT_VIEW1D', 'type': 'function'} clang++-14.0.6 0.985776 \n", " g++-10.3.1 0.998530 \n", "{'name': 'Basic_INIT_VIEW1D_OFFSET', 'type': 'f... clang++-14.0.6 0.979328 \n", " g++-10.3.1 0.985769 \n", "{'name': 'Basic_MAT_MAT_SHARED', 'type': 'funct... clang++-14.0.6 0.070220 \n", " g++-10.3.1 0.279999 \n", "{'name': 'Basic_MULADDSUB', 'type': 'function'} clang++-14.0.6 0.998635 \n", " g++-10.3.1 0.992326 \n", "{'name': 'Basic_NESTED_INIT', 'type': 'function'} clang++-14.0.6 0.506959 \n", " g++-10.3.1 0.001727 \n", "{'name': 'Basic_PI_ATOMIC', 'type': 'function'} clang++-14.0.6 0.631692 \n", " g++-10.3.1 0.953870 \n", "{'name': 'Basic_PI_REDUCE', 'type': 'function'} clang++-14.0.6 0.504244 \n", " g++-10.3.1 0.939911 \n", "{'name': 'Basic_REDUCE3_INT', 'type': 'function'} clang++-14.0.6 0.672811 \n", " g++-10.3.1 0.620335 \n", "{'name': 'Basic_REDUCE_STRUCT', 'type': 'functi... clang++-14.0.6 0.987559 \n", " g++-10.3.1 0.928560 \n", "{'name': 'Basic_TRAP_INT', 'type': 'function'} clang++-14.0.6 0.699819 \n", " g++-10.3.1 0.959196 \n", "{'name': 'Lcals', 'type': 'function'} clang++-14.0.6 0.000620 \n", " g++-10.3.1 0.000000 \n", "{'name': 'Lcals_DIFF_PREDICT', 'type': 'function'} clang++-14.0.6 0.999996 \n", " g++-10.3.1 0.999958 \n", "{'name': 'Lcals_EOS', 'type': 'function'} clang++-14.0.6 0.983399 \n", " g++-10.3.1 0.993526 \n", "{'name': 'Lcals_FIRST_DIFF', 'type': 'function'} clang++-14.0.6 0.998028 \n", " g++-10.3.1 0.992378 \n", "{'name': 'Lcals_FIRST_MIN', 'type': 'function'} clang++-14.0.6 0.977132 \n", " g++-10.3.1 0.964905 \n", "{'name': 'Lcals_FIRST_SUM', 'type': 'function'} clang++-14.0.6 0.997765 \n", " g++-10.3.1 0.991579 \n", "{'name': 'Lcals_GEN_LIN_RECUR', 'type': 'functi... clang++-14.0.6 0.998405 \n", " g++-10.3.1 0.992075 \n", "{'name': 'Lcals_HYDRO_1D', 'type': 'function'} clang++-14.0.6 0.997940 \n", " g++-10.3.1 0.993380 \n", "{'name': 'Lcals_HYDRO_2D', 'type': 'function'} clang++-14.0.6 0.261911 \n", " g++-10.3.1 0.167969 \n", "{'name': 'Lcals_INT_PREDICT', 'type': 'function'} clang++-14.0.6 0.999176 \n", " g++-10.3.1 0.997796 \n", "{'name': 'Lcals_PLANCKIAN', 'type': 'function'} clang++-14.0.6 0.986164 \n", " g++-10.3.1 0.634681 \n", "{'name': 'Lcals_TRIDIAG_ELIM', 'type': 'function'} clang++-14.0.6 0.998861 \n", " g++-10.3.1 0.993832 \n", "{'name': 'Polybench', 'type': 'function'} clang++-14.0.6 0.000000 \n", " g++-10.3.1 0.000000 \n", "{'name': 'Polybench_2MM', 'type': 'function'} clang++-14.0.6 0.051111 \n", " g++-10.3.1 0.052509 \n", "{'name': 'Polybench_3MM', 'type': 'function'} clang++-14.0.6 0.036013 \n", " g++-10.3.1 0.032251 \n", "{'name': 'Polybench_ADI', 'type': 'function'} clang++-14.0.6 0.142598 \n", " g++-10.3.1 0.203495 \n", "{'name': 'Polybench_ATAX', 'type': 'function'} clang++-14.0.6 0.051479 \n", " g++-10.3.1 0.049076 \n", "{'name': 'Polybench_FDTD_2D', 'type': 'function'} clang++-14.0.6 0.077050 \n", " g++-10.3.1 0.043012 \n", "{'name': 'Polybench_FLOYD_WARSHALL', 'type': 'f... clang++-14.0.6 0.067700 \n", " g++-10.3.1 0.040239 \n", "{'name': 'Polybench_GEMM', 'type': 'function'} clang++-14.0.6 0.002912 \n", " g++-10.3.1 0.006174 \n", "{'name': 'Polybench_GEMVER', 'type': 'function'} clang++-14.0.6 0.065141 \n", " g++-10.3.1 0.041755 \n", "{'name': 'Polybench_GESUMMV', 'type': 'function'} clang++-14.0.6 0.044970 \n", " g++-10.3.1 0.033470 \n", "{'name': 'Polybench_HEAT_3D', 'type': 'function'} clang++-14.0.6 0.007887 \n", " g++-10.3.1 0.006088 \n", "{'name': 'Polybench_JACOBI_1D', 'type': 'functi... clang++-14.0.6 0.995135 \n", " g++-10.3.1 0.991681 \n", "{'name': 'Polybench_JACOBI_2D', 'type': 'functi... clang++-14.0.6 0.053653 \n", " g++-10.3.1 0.060893 \n", "{'name': 'Polybench_MVT', 'type': 'function'} clang++-14.0.6 0.047232 \n", " g++-10.3.1 0.045896 \n", "{'name': 'Stream', 'type': 'function'} clang++-14.0.6 0.000000 \n", " g++-10.3.1 0.000000 \n", "{'name': 'Stream_ADD', 'type': 'function'} clang++-14.0.6 0.997971 \n", " g++-10.3.1 0.991825 \n", "{'name': 'Stream_COPY', 'type': 'function'} clang++-14.0.6 0.997559 \n", " g++-10.3.1 0.991807 \n", "{'name': 'Stream_DOT', 'type': 'function'} clang++-14.0.6 0.996162 \n", " g++-10.3.1 0.989492 \n", "{'name': 'Stream_MUL', 'type': 'function'} clang++-14.0.6 0.997419 \n", " g++-10.3.1 0.992119 \n", "{'name': 'Stream_TRIAD', 'type': 'function'} clang++-14.0.6 0.997505 \n", " g++-10.3.1 0.993449 " ] }, "execution_count": 68, "metadata": {}, "output_type": "execute_result" } ], "source": [ "stk = th.Thicket.from_statsframes(\n", " [clang_th, gcc_th],\n", " metadata_key=\"compiler\",\n", " disable_tqdm=True,\n", ")\n", "stk.dataframe" ] } ], "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.9.12" }, "papermill": { "default_parameters": {}, "duration": 8.004546, "end_time": "2024-09-06T18:35:24.480912", "environment_variables": {}, "exception": null, "input_path": "04_stats-functions.ipynb", "output_path": "04_stats-functions.ipynb", "parameters": {}, "start_time": "2024-09-06T18:35:16.476366", "version": "2.5.0" }, "vscode": { "interpreter": { "hash": "31f2aee4e71d21fbe5cf8b01ff0e069b9275f58929596ceb00d14d90e3e16cd6" } } }, "nbformat": 4, "nbformat_minor": 5 }