From f235f0e8d0ac71644f55abacb042c51e73200007 Mon Sep 17 00:00:00 2001 From: lg Date: Wed, 22 Jan 2025 01:20:09 +0000 Subject: [PATCH 01/12] inv cluster.provision/delete works --- K8S_VERSION | 1 + config/granny_aks_kubelet_config.json | 1 + config/granny_aks_os_config.json | 13 +++ tasks/__init__.py | 2 + tasks/cluster.py | 143 ++++++++++++++++++++++++++ tasks/util/env.py | 9 ++ tasks/util/version.py | 23 +++++ 7 files changed, 192 insertions(+) create mode 100644 K8S_VERSION create mode 100644 config/granny_aks_kubelet_config.json create mode 100644 config/granny_aks_os_config.json create mode 100644 tasks/cluster.py create mode 100644 tasks/util/version.py diff --git a/K8S_VERSION b/K8S_VERSION new file mode 100644 index 0000000..82a5f3b --- /dev/null +++ b/K8S_VERSION @@ -0,0 +1 @@ +1.28.5 diff --git a/config/granny_aks_kubelet_config.json b/config/granny_aks_kubelet_config.json new file mode 100644 index 0000000..0b11bb8 --- /dev/null +++ b/config/granny_aks_kubelet_config.json @@ -0,0 +1 @@ +{ "allowedUnsafeSysctls": ["net.*"] } diff --git a/config/granny_aks_os_config.json b/config/granny_aks_os_config.json new file mode 100644 index 0000000..84e27c7 --- /dev/null +++ b/config/granny_aks_os_config.json @@ -0,0 +1,13 @@ +{ + "sysctls": { + "netCoreRmemMax": 16777216, + "netCoreWmemMax": 16777216, + "netIpv4TcpRmem": "4096 87380 16777216", + "netIpv4TcpWmem": "4096 65536 16777216", + "netCoreNetdevMaxBacklog": "30000", + "netCoreRmemDefault": 16777216, + "netCoreWmemDefault": 16777216, + "netIpv4TcpMem": "16777216 16777216 16777216", + "netIpv4RouteFlush": 1 + } +} diff --git a/tasks/__init__.py b/tasks/__init__.py index a25b3b8..352bfe9 100644 --- a/tasks/__init__.py +++ b/tasks/__init__.py @@ -1,5 +1,6 @@ from invoke import Collection +from . import cluster from . import docker from . import format_code @@ -20,6 +21,7 @@ logging.getLogger().setLevel(logging.DEBUG) ns = Collection( + cluster, docker, format_code, ) diff --git a/tasks/cluster.py b/tasks/cluster.py new file mode 100644 index 0000000..f1df932 --- /dev/null +++ b/tasks/cluster.py @@ -0,0 +1,143 @@ +from invoke import task +from os.path import join +from subprocess import run +from tasks.util.env import ( + ACR_NAME, + AKS_CLUSTER_NAME, + AKS_NODE_COUNT, + AKS_REGION, + AKS_VM_SIZE, + AZURE_PUB_SSH_KEY, + AZURE_RESOURCE_GROUP, + CONFIG_DIR, + KUBECTL_BIN, +) +from tasks.util.version import get_k8s_version + + +# AKS commandline reference here: +# https://docs.microsoft.com/en-us/cli/azure/aks?view=azure-cli-latest +def _run_aks_cmd(name, az_args=None): + cmd = [ + "az", + "aks {}".format(name), + "--resource-group {}".format(AZURE_RESOURCE_GROUP), + ] + + if az_args: + cmd.extend(az_args) + + cmd = " ".join(cmd) + print(cmd) + run(cmd, shell=True, check=True) + + +@task +def list(ctx): + """ + List all AKS resources + """ + _run_aks_cmd("list") + + +@task(optional=["sgx"]) +def provision( + ctx, + nodes=AKS_NODE_COUNT, + vm=AKS_VM_SIZE, + location=AKS_REGION, + name=AKS_CLUSTER_NAME, + sgx=False, + granny=True, +): + """ + Provision the AKS cluster + """ + k8s_ver = get_k8s_version() + sgx = sgx and (sgx.lower() != "false") + granny_kubelet_config = join(CONFIG_DIR, "granny_aks_kubelet_config.json") + granny_os_config = join(CONFIG_DIR, "granny_aks_os_config.json") + + if sgx and "Standard_DC" not in vm: + print( + "Error provisioning SGX cluster: only `Standard_DC` VMs are supported" + ) + return + + _run_aks_cmd( + "create", + [ + "--name {}".format(name), + "--node-count {}".format(nodes), + "--node-vm-size {}".format(vm), + "--os-sku Ubuntu", + "--kubernetes-version {}".format(k8s_ver), + "--ssh-key-value {}".format(AZURE_PUB_SSH_KEY), + "--location {}".format(location), + # Could not create a role assignment for ACR. Are you an Owner on this subscription? + # "--attach-acr {}".format(ACR_NAME.split(".")[0]), + "{}".format( + "--kubelet-config {}".format(granny_kubelet_config) + if granny + else "" + ), + "{}".format( + "--linux-os-config {}".format(granny_os_config) + if granny + else "" + ), + "{}".format( + "--enable-addons confcom --enable-sgxquotehelper" + if sgx + else "" + ), + ], + ) + + +@task +def details(ctx): + """ + Show the details of the cluster + """ + _run_aks_cmd( + "show", + [ + "--name {}".format(AKS_CLUSTER_NAME), + ], + ) + + +@task +def delete(ctx, name=AKS_CLUSTER_NAME): + """ + Delete the AKS cluster + """ + _run_aks_cmd( + "delete", + [ + "--name {}".format(name), + "--yes", + ], + ) + + +@task +def credentials(ctx, name=AKS_CLUSTER_NAME, out_file=None): + """ + Get credentials for the AKS cluster + """ + # Set up the credentials + _run_aks_cmd( + "get-credentials", + [ + "--name {}".format(name), + "--overwrite-existing", + "--file {}".format(out_file) if out_file else "", + ], + ) + + # Check we can access the cluster + cmd = "{} get nodes".format(KUBECTL_BIN) + print(cmd) + run(cmd, shell=True, check=True) diff --git a/tasks/util/env.py b/tasks/util/env.py index d44584c..81eb65c 100644 --- a/tasks/util/env.py +++ b/tasks/util/env.py @@ -5,10 +5,19 @@ HOME_DIR = expanduser("~") PROJ_ROOT = dirname(dirname(dirname(realpath(__file__)))) +CONFIG_DIR = join(PROJ_ROOT, "config") FAASM_ROOT = join(HOME_DIR, "faasm") SYSTEM_NAME = "Granny" +AZURE_RESOURCE_GROUP = "faasm" ACR_NAME = "faasm.azurecr.io" +AKS_CLUSTER_NAME = "faasm-cluster" # TODO: named based on $USER ? +AKS_VM_SIZE = "Standard_DS5_v2" +AKS_NODE_COUNT = 4 +AKS_REGION = "eastus" +AZURE_PUB_SSH_KEY = "~/.ssh/id_rsa.pub" +KUBECTL_BIN = join(PROJ_ROOT, "bin", "kubectl") + FAABRIC_EXP_IMAGE_NAME = "faabric-experiments" NATIVE_BUILD_DIR = join(PROJ_ROOT, "build", "native") diff --git a/tasks/util/version.py b/tasks/util/version.py new file mode 100644 index 0000000..46baaaa --- /dev/null +++ b/tasks/util/version.py @@ -0,0 +1,23 @@ +from os.path import join + +from tasks.util.env import PROJ_ROOT + +# Note - this must match the version used by Faasm +KNATIVE_VERSION = "1.1.0" +K9S_VERSION = "0.24.15" + + +def _read_ver_file(file_path): + with open(file_path, "r") as fh: + ver = fh.read() + ver = ver.strip() + + return ver + + +def get_version(): + return _read_ver_file(join(PROJ_ROOT, "VERSION")) + + +def get_k8s_version(): + return _read_ver_file(join(PROJ_ROOT, "K8S_VERSION")) From 8cb10f1f0f6e5fbe238446ac736f2b6df0cd1b3e Mon Sep 17 00:00:00 2001 From: lg Date: Wed, 22 Jan 2025 11:02:35 +0000 Subject: [PATCH 02/12] simplify README --- tasks/kernels_mpi/README.md | 12 ++++++------ tasks/kernels_omp/README.md | 12 ++++++------ tasks/lammps/README.md | 2 +- tasks/lulesh/README.md | 16 ++++++++-------- tasks/makespan/README.md | 18 +++++++++--------- tasks/makespan/eviction.md | 18 +++++++++--------- tasks/openmpi/README.md | 14 +++++++------- 7 files changed, 46 insertions(+), 46 deletions(-) diff --git a/tasks/kernels_mpi/README.md b/tasks/kernels_mpi/README.md index f0ea50e..5f10336 100644 --- a/tasks/kernels_mpi/README.md +++ b/tasks/kernels_mpi/README.md @@ -5,10 +5,10 @@ as a microbenchmark for Granny's MPI implementation. ## Start AKS cluster -In the `experiment-base` terminal, run: +Create a new cluster: ```bash -(faasm-exp-base) inv cluster.provision --vm Standard_D8_v5 --nodes 3 cluster.credentials +inv cluster.provision --vm Standard_D8_v5 --nodes 3 cluster.credentials ``` ## Granny @@ -16,19 +16,19 @@ In the `experiment-base` terminal, run: Deploy the cluster: ```bash -(faasm-exp-faabric) faasmctl deploy.k8s --workers=2 +faasmctl deploy.k8s --workers=2 ``` Upload the WASM file: ```bash -(faasm-exp-faabric) inv kernels-mpi.wasm.upload +inv kernels-mpi.wasm.upload ``` and run the experiment with: ```bash -(faasm-exp-faabric) inv kernels-mpi.run.wasm +inv kernels-mpi.run.wasm ``` finally, delete the Granny cluster: @@ -73,5 +73,5 @@ the plot will be available in [`./plots/kernels-mpi/mpi_kernels_slowdown.pdf`]( Finally, delete the AKS cluster: ```bash -(faasm-exp-base) inv cluster.delete +inv cluster.delete ``` diff --git a/tasks/kernels_omp/README.md b/tasks/kernels_omp/README.md index 3d0f3ef..45d7342 100644 --- a/tasks/kernels_omp/README.md +++ b/tasks/kernels_omp/README.md @@ -5,10 +5,10 @@ as a microbenchmark for Granny's OpenMP implementation. ## Start AKS cluster -In the `experiment-base` terminal, run: +Create a new cluster: ```bash -(faasm-exp-base) inv cluster.provision --vm Standard_D8_v5 --nodes 2 cluster.credentials +inv cluster.provision --vm Standard_D8_v5 --nodes 2 cluster.credentials ``` ## Faasm @@ -16,19 +16,19 @@ In the `experiment-base` terminal, run: Deploy the cluster: ```bash -(faasm-exp-faabric) faasmctl deploy.k8s --workers=1 +faasmctl deploy.k8s --workers=1 ``` Upload the WASM file: ```bash -(faasm-exp-faabric) inv kernels-omp.wasm.upload +inv kernels-omp.wasm.upload ``` and run the experiment with: ```bash -(faasm-exp-faabric) inv kernels-omp.run.wasm +inv kernels-omp.run.wasm ``` finally, delete the cluster: @@ -73,5 +73,5 @@ the plot will be available in [`./plots/kernels-omp/openmp_kernels_slowdown.pdf` Finally, delete the AKS cluster: ```bash -(faasm-exp-base) inv cluster.delete +inv cluster.delete ``` diff --git a/tasks/lammps/README.md b/tasks/lammps/README.md index 132f45b..a608d8f 100644 --- a/tasks/lammps/README.md +++ b/tasks/lammps/README.md @@ -5,7 +5,7 @@ as part of the array experiment. ## Start AKS cluster -In the `experiment-base` terminal, run: +Create a new cluster: ```bash inv cluster.provision --vm Standard_D8_v5 --nodes 3 diff --git a/tasks/lulesh/README.md b/tasks/lulesh/README.md index 0043969..7236088 100644 --- a/tasks/lulesh/README.md +++ b/tasks/lulesh/README.md @@ -10,11 +10,11 @@ This experiment is a single execution of the LULESH simulation using OpenMP. ## Start AKS cluster -In the `experiment-base` terminal, run: +Create a new cluster: ```bash -(faasm-exp-base) inv cluster.provision --vm Standard_D8_v5 --nodes 1 -(faasm-exp-base) inv cluster.credentials +inv cluster.provision --vm Standard_D8_v5 --nodes 1 +inv cluster.credentials ``` ## Granny @@ -22,25 +22,25 @@ In the `experiment-base` terminal, run: Deploy the cluster: ```bash -(faasm-exp-faabric) faasmctl deploy.k8s --workers=1 +faasmctl deploy.k8s --workers=1 ``` Upload the WASM file: ```bash -(faasm-exp-faabric) inv lammps.wasm.upload +inv lammps.wasm.upload ``` and run the experiment with: ```bash -(faasm-exp-faabric) inv lammps.run.granny -w compute -w network +inv lammps.run.granny -w compute -w network ``` To remove the cluster, run: ```bash -(faasm-exp-mpi) faasmctl delete +faasmctl delete ``` ## Native @@ -78,7 +78,7 @@ which will generate a plot in [`./plots/lammps/runtime.png`]( ## Clean-Up -Remember to delete the cluster. From the experiment base terminal: +Remember to delete the cluster. ```bash inv cluster.delete diff --git a/tasks/makespan/README.md b/tasks/makespan/README.md index c2d112b..573fac0 100644 --- a/tasks/makespan/README.md +++ b/tasks/makespan/README.md @@ -7,11 +7,11 @@ NOTE: we only compare to ourselves! TODO: add README for the conservative plot -First, from the `faasm-exp-base` shell, deploy the VM cluster: +Create a new cluster: ```bash -(faasm-exp-base) inv cluster.provision --vm Standard_D8_v5 --nodes 33 -(faasm-exp-base) inv cluster.credentials +inv cluster.provision --vm Standard_D8_v5 --nodes 33 +inv cluster.credentials ``` ## Native @@ -19,14 +19,14 @@ First, from the `faasm-exp-base` shell, deploy the VM cluster: First, deploy the native `k8s` cluster: ```bash -(faasm-exp-base) inv makespan.native.deploy --num-vms 32 +inv makespan.native.deploy --num-vms 32 ``` Now, you can run the different baselines: ```bash -(faasm-exp-base) inv makespan.run.native-batch --workload mpi-migrate --num-vms 32 --num-tasks 100 -(faasm-exp-base) inv makespan.run.native-slurm --workload mpi-migrate --num-vms 32 --num-tasks 100 +inv makespan.run.native-batch --workload mpi-migrate --num-vms 32 --num-tasks 100 +inv makespan.run.native-slurm --workload mpi-migrate --num-vms 32 --num-tasks 100 ``` Lastly, remove the native `k8s` cluster: @@ -46,20 +46,20 @@ faasmctl deploy.k8s --workers=32 Second, upload the corresponding WASM files: ```bash -(faasm-exp-faabric) inv makespan.wasm.upload +inv makespan.wasm.upload ``` Third, run the experiment: ```bash -(faasm-exp-faabric) inv makespan.run.granny --num-vms 32 --num-tasks 100 --workload mpi-migrate [--migrate] +inv makespan.run.granny --num-vms 32 --num-tasks 100 --workload mpi-migrate [--migrate] ``` During an experiment, you may monitor the state of the cluster (in a separete shell) by using: ```bash -(faasm-exp-faabric) faasmctl monitor.planner +faasmctl monitor.planner ``` ## Plot the results diff --git a/tasks/makespan/eviction.md b/tasks/makespan/eviction.md index b8e9c01..c399b51 100644 --- a/tasks/makespan/eviction.md +++ b/tasks/makespan/eviction.md @@ -1,10 +1,10 @@ # Makespan Experiment (Eviction version) -First, from the `faasm-exp-base` shell, deploy the VM cluster: +Create a new cluster: ```bash -(faasm-exp-base) inv cluster.provision --vm Standard_D8_v5 --nodes 33 -(faasm-exp-base) inv cluster.credentials +inv cluster.provision --vm Standard_D8_v5 --nodes 33 +inv cluster.credentials ``` ## Native @@ -12,14 +12,14 @@ First, from the `faasm-exp-base` shell, deploy the VM cluster: First, deploy the native `k8s` cluster: ```bash -(faasm-exp-base) inv makespan.native.deploy --num-vms 32 +inv makespan.native.deploy --num-vms 32 ``` Now, you can run the different baselines: ```bash -(faasm-exp-base) inv makespan.run.native-batch --workload mpi-evict --num-vms 32 --num-tasks 200 -(faasm-exp-base) inv makespan.run.native-slurm --workload mpi-evict --num-vms 32 --num-tasks 200 +inv makespan.run.native-batch --workload mpi-evict --num-vms 32 --num-tasks 200 +inv makespan.run.native-slurm --workload mpi-evict --num-vms 32 --num-tasks 200 ``` Lastly, remove the native `k8s` cluster: @@ -39,7 +39,7 @@ faasmctl deploy.k8s --workers=32 Second, upload the corresponding WASM files: ```bash -(faasm-exp-faabric) inv makespan.wasm.upload +inv makespan.wasm.upload ``` Third, run the experiment: @@ -49,14 +49,14 @@ Third, run the experiment: # (faasm-exp-faabric) inv makespan.run.granny --workload mpi # Set the --migrate flag to enable migrating Granules at runtime # TODO: rename the workload to `mpi` -(faasm-exp-faabric) inv makespan.run.granny --num-vms 32 --num-tasks 100 --workload mpi-migrate [--migrate] +inv makespan.run.granny --num-vms 32 --num-tasks 100 --workload mpi-migrate [--migrate] ``` During an experiment, you may monitor the state of the cluster (in a separete shell) by using: ```bash -(faasm-exp-faabric) faasmctl monitor.planner +faasmctl monitor.planner ``` ## Plot the results diff --git a/tasks/openmpi/README.md b/tasks/openmpi/README.md index 85dccac..a608d8f 100644 --- a/tasks/openmpi/README.md +++ b/tasks/openmpi/README.md @@ -5,11 +5,11 @@ as part of the array experiment. ## Start AKS cluster -In the `experiment-base` terminal, run: +Create a new cluster: ```bash -(faasm-exp-base) inv cluster.provision --vm Standard_D8_v5 --nodes 3 -(faasm-exp-base) inv cluster.credentials +inv cluster.provision --vm Standard_D8_v5 --nodes 3 +inv cluster.credentials ``` ## Granny @@ -17,25 +17,25 @@ In the `experiment-base` terminal, run: Deploy the cluster: ```bash -(faasm-exp-faabric) faasmctl deploy.k8s --workers=2 +faasmctl deploy.k8s --workers=2 ``` Upload the WASM file: ```bash -(faasm-exp-faabric) inv lammps.wasm.upload +inv lammps.wasm.upload ``` and run the experiment with: ```bash -(faasm-exp-faabric) inv lammps.run.wasm -w compute -w network +inv lammps.run.wasm -w compute -w network ``` To remove the cluster, run: ```bash -(faasm-exp-mpi) faasmctl delete +faasmctl delete ``` ## Native From a21bf558fd2f950d8ef23c53d9f7ae30163e7627 Mon Sep 17 00:00:00 2001 From: lg Date: Thu, 23 Jan 2025 20:11:25 +0000 Subject: [PATCH 03/12] pass over documents --- README.md | 18 +++--------------- tasks/makespan/eviction.md | 2 +- tasks/migration/README.md | 10 +++++----- 3 files changed, 9 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index 91c82c6..c2a4bbb 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,10 @@ # Granny Experiments -This repo contains the experiments for the [Granny paper]( -https://arxiv.org/abs/2302.11358). +This repo contains the experiments for the [Granny paper](https://arxiv.org/abs/2302.11358). -When following any instructions in this repository, it is recommended to -have two open terminals: -* One on the [`experiment-base`](https://github.com/faasm/experiment-base) repo - with the virtual environment activated (`source ./bin/workon.sh`). From now - onward, we will refer to this shell by its venv name: `faasm-exp-base`. -* One with this repo and the virtual environment activated - (`source ./bin/workon.sh`). From now onward, we will refer to this shell by - its venv name: `faasm-exp-faabric`. +When following any instructions in this repository, it is recommended to have a dedicated terminal with virtual environment of this repo activated: (`source ./bin/workon.sh`). -The former is used to provision/deprovision K8s clusters on Azure (with AKS), -and also to access low-level monitoring tools (we recommend `k9s`). - -The latter is used to deploy Faabric clusters, run the experiments, and plot -the results. +This virtual environment provides commands for provision/deprovision K8s clusters on Azure (with AKS), accessing low-level monitoring tools (we recommend `k9s`), and also commands for deploy Faabric clusters, run the experiments, and plot the results. ## Experiments in this repository diff --git a/tasks/makespan/eviction.md b/tasks/makespan/eviction.md index c399b51..016af35 100644 --- a/tasks/makespan/eviction.md +++ b/tasks/makespan/eviction.md @@ -46,7 +46,7 @@ Third, run the experiment: ```bash # TODO: will probably ditch --workload=mpi -# (faasm-exp-faabric) inv makespan.run.granny --workload mpi +# inv makespan.run.granny --workload mpi # Set the --migrate flag to enable migrating Granules at runtime # TODO: rename the workload to `mpi` inv makespan.run.granny --num-vms 32 --num-tasks 100 --workload mpi-migrate [--migrate] diff --git a/tasks/migration/README.md b/tasks/migration/README.md index aaed8b1..466beff 100644 --- a/tasks/migration/README.md +++ b/tasks/migration/README.md @@ -13,31 +13,31 @@ inv cluster.credentials --name ${CLUSTER_NAME} Second, deploy the cluster ```bash -(faasm-exp-faabric) faasmctl deploy.k8s --workers 2 +faasmctl deploy.k8s --workers 2 ``` Second, upload the WASM files: ```bash -(faasm-exp-faabric) inv migration.wasm.upload +inv migration.wasm.upload ``` Third, run the experiments: ```bash -(faasm-exp-faabric) inv migration.run -w compute -w network +inv migration.run -w compute -w network ``` Lastly, plot the results: ```bash -(faasm-exp-faabric) inv migration.plot +inv migration.plot ``` and clean up: ```bash -(faasm-exp-faabric) faasmctl delete +faasmctl delete ``` ## Migration Oracle From 544905061fcb2b2f36ae32c3f4ccfc93e9f330cb Mon Sep 17 00:00:00 2001 From: lg Date: Tue, 4 Feb 2025 16:39:45 +0000 Subject: [PATCH 04/12] pass over experiments (WIP) --- tasks/__init__.py | 2 + tasks/elastic/README.md | 8 +++- tasks/k8s.py | 91 +++++++++++++++++++++++++++++++++++++ tasks/kernels_mpi/README.md | 2 +- tasks/kernels_omp/README.md | 2 +- tasks/lammps/README.md | 3 +- tasks/migration/README.md | 3 +- tasks/polybench/README.md | 6 +-- tasks/polybench/native.py | 7 ++- tasks/util/env.py | 8 +++- 10 files changed, 118 insertions(+), 14 deletions(-) create mode 100644 tasks/k8s.py diff --git a/tasks/__init__.py b/tasks/__init__.py index 352bfe9..74d8f83 100644 --- a/tasks/__init__.py +++ b/tasks/__init__.py @@ -3,6 +3,7 @@ from . import cluster from . import docker from . import format_code +from . import k8s import logging @@ -24,6 +25,7 @@ cluster, docker, format_code, + k8s, ) ns.add_collection(elastic_ns, name="elastic") diff --git a/tasks/elastic/README.md b/tasks/elastic/README.md index eab7b6c..ee574f7 100644 --- a/tasks/elastic/README.md +++ b/tasks/elastic/README.md @@ -1,4 +1,4 @@ -# Elastic Scaling Micro-Benchmark +# Elastic Scaling Micro-Benchmark (Fig.12) In this experiment we measure the benefits of elastically scaling-up OpenMP applications to benefit from idle resources. We run a pipe-lined algorithm @@ -44,6 +44,12 @@ You may now plot the results using: inv elastic.plot ``` +the plot will be available in [`./plots/elastic/elastic_speedup.pdf`]( +./plots/elastic/elastic_speedup.pdf), we also include it below: + +![Elastic Scaling Plot](./plots/elastic/elastic_speedup.png) + + ## Clean-Up Finally, delete the Granny cluster: diff --git a/tasks/k8s.py b/tasks/k8s.py new file mode 100644 index 0000000..9e6be95 --- /dev/null +++ b/tasks/k8s.py @@ -0,0 +1,91 @@ +from invoke import task +from os.path import join, exists +from os import makedirs +from shutil import copy, rmtree +from subprocess import run + +from tasks.util.env import ( + BIN_DIR, + GLOBAL_BIN_DIR, + K9S_VERSION, +) + +from tasks.util.version import get_k8s_version + + +def _download_binary(url, binary_name): + makedirs(BIN_DIR, exist_ok=True) + cmd = "curl -LO {}".format(url) + run(cmd, shell=True, check=True, cwd=BIN_DIR) + run("chmod +x {}".format(binary_name), shell=True, check=True, cwd=BIN_DIR) + + return join(BIN_DIR, binary_name) + + +def _symlink_global_bin(binary_path, name): + global_path = join(GLOBAL_BIN_DIR, name) + if exists(global_path): + print("Removing existing binary at {}".format(global_path)) + run( + "sudo rm -f {}".format(global_path), + shell=True, + check=True, + ) + + print("Symlinking {} -> {}".format(global_path, binary_path)) + run( + "sudo ln -s {} {}".format(binary_path, name), + shell=True, + check=True, + cwd=GLOBAL_BIN_DIR, + ) + + +@task +def install_kubectl(ctx, system=False): + """ + Install the k8s CLI (kubectl) + """ + k8s_ver = get_k8s_version() + url = "https://dl.k8s.io/release/v{}/bin/linux/amd64/kubectl".format( + k8s_ver + ) + + binary_path = _download_binary(url, "kubectl") + + # Symlink for kubectl globally + if system: + _symlink_global_bin(binary_path, "kubectl") + + +@task +def install_k9s(ctx, system=False): + """ + Install the K9s CLI + """ + tar_name = "k9s_Linux_amd64.tar.gz" + url = "https://github.com/derailed/k9s/releases/download/v{}/{}".format( + K9S_VERSION, tar_name + ) + print(url) + + # Download the TAR + workdir = "/tmp/k9s-csg" + makedirs(workdir, exist_ok=True) + + cmd = "curl -LO {}".format(url) + run(cmd, shell=True, check=True, cwd=workdir) + + # Untar + run("tar -xf {}".format(tar_name), shell=True, check=True, cwd=workdir) + + # Copy k9s into place + binary_path = join(BIN_DIR, "k9s") + copy(join(workdir, "k9s"), binary_path) + + # Remove tar + rmtree(workdir) + + # Symlink for k9s command globally + if system: + _symlink_global_bin(binary_path, "k9s") diff --git a/tasks/kernels_mpi/README.md b/tasks/kernels_mpi/README.md index 5f10336..f75667a 100644 --- a/tasks/kernels_mpi/README.md +++ b/tasks/kernels_mpi/README.md @@ -1,4 +1,4 @@ -# ParRes Kernels Experiment (MPI) +# ParRes Kernels Experiment - MPI (Fig.9b) This experiment runs a set of the [ParRes Kernels](https://github.com/ParRes/Kernels) as a microbenchmark for Granny's MPI implementation. diff --git a/tasks/kernels_omp/README.md b/tasks/kernels_omp/README.md index 45d7342..598b695 100644 --- a/tasks/kernels_omp/README.md +++ b/tasks/kernels_omp/README.md @@ -1,4 +1,4 @@ -# ParRes Kernels Experiment (OpenMP) +# ParRes Kernels Experiment - OpenMP (Fig.10) This experiment runs a set of the [ParRes Kernels](https://github.com/ParRes/Kernels) as a microbenchmark for Granny's OpenMP implementation. diff --git a/tasks/lammps/README.md b/tasks/lammps/README.md index a608d8f..4ccd6a5 100644 --- a/tasks/lammps/README.md +++ b/tasks/lammps/README.md @@ -8,8 +8,7 @@ as part of the array experiment. Create a new cluster: ```bash -inv cluster.provision --vm Standard_D8_v5 --nodes 3 -inv cluster.credentials +inv cluster.provision --vm Standard_D8_v5 --nodes 3 cluster.credentials ``` ## Granny diff --git a/tasks/migration/README.md b/tasks/migration/README.md index 466beff..b97ac2f 100644 --- a/tasks/migration/README.md +++ b/tasks/migration/README.md @@ -6,8 +6,7 @@ applications to benefit from dynamic changes in the compute environment. First, provision the cluster: ```bash -inv cluster.provision --vm Standard_D8_v5 --nodes 3 --name ${CLUSTER_NAME} -inv cluster.credentials --name ${CLUSTER_NAME} +inv cluster.provision --vm Standard_D8_v5 --nodes 3 cluster.credentials ``` Second, deploy the cluster diff --git a/tasks/polybench/README.md b/tasks/polybench/README.md index 3ecb70d..0b56c36 100644 --- a/tasks/polybench/README.md +++ b/tasks/polybench/README.md @@ -12,8 +12,8 @@ First, provision the cluster. For ease of deployment, we still deploy a K8s cluster of just one node, which we will access directly. ```bash -inv cluster.provision --vm Standard_D8_v5 --nodes 1 --name ${CLUSTER_NAME} -inv cluster.credentials --name ${CLUSTER_NAME} +inv cluster.provision --vm Standard_D8_v5 --nodes 1 +inv cluster.credentials ``` ## Native @@ -81,5 +81,5 @@ which will generate a `.pdf` file in `./plots/polybench/slowdown.pdf`. Lastly, clean the cluster: ```bash -inv cluster.delete --name ${CLUSTER_NAME} +inv cluster.delete ``` diff --git a/tasks/polybench/native.py b/tasks/polybench/native.py index 1528b15..1d292c7 100644 --- a/tasks/polybench/native.py +++ b/tasks/polybench/native.py @@ -17,8 +17,10 @@ def deploy(ctx, backend="k8s", num_vms=1, num_cores_per_vm=8, ctrs_per_vm=1): num_ctrs = int(num_vms) * int(ctrs_per_vm) num_cores_per_ctr = int(num_cores_per_vm / ctrs_per_vm) if backend == "k8s": + print('deploy_native_mpi') deploy_native_mpi( - "polybench", FAABRIC_EXP_IMAGE_NAME, num_ctrs, num_cores_per_ctr + "polybench", FAABRIC_EXP_IMAGE_NAME, num_ctrs, + # num_cores_per_ctr, ) wait_for_pods( @@ -39,7 +41,8 @@ def delete(ctx, backend="k8s", num_vms=2, num_cores_per_vm=8, ctrs_per_vm=1): if backend == "k8s": delete_native_mpi( - "polybench", FAABRIC_EXP_IMAGE_NAME, num_ctrs, num_cores_per_ctr + "polybench", FAABRIC_EXP_IMAGE_NAME, num_ctrs, + # num_cores_per_ctr, ) else: raise RuntimeError("Compose backend not implemented!") diff --git a/tasks/util/env.py b/tasks/util/env.py index 81eb65c..973da5d 100644 --- a/tasks/util/env.py +++ b/tasks/util/env.py @@ -1,17 +1,21 @@ from os.path import dirname, realpath, expanduser, join, exists from shutil import rmtree -from os import makedirs +from os import getenv, makedirs from subprocess import run HOME_DIR = expanduser("~") PROJ_ROOT = dirname(dirname(dirname(realpath(__file__)))) +BIN_DIR = join(PROJ_ROOT, "bin") +GLOBAL_BIN_DIR = "/usr/local/bin" CONFIG_DIR = join(PROJ_ROOT, "config") FAASM_ROOT = join(HOME_DIR, "faasm") SYSTEM_NAME = "Granny" +K9S_VERSION = "0.32.2" + AZURE_RESOURCE_GROUP = "faasm" ACR_NAME = "faasm.azurecr.io" -AKS_CLUSTER_NAME = "faasm-cluster" # TODO: named based on $USER ? +AKS_CLUSTER_NAME = getenv('USER') + "-faasm-cluster" AKS_VM_SIZE = "Standard_DS5_v2" AKS_NODE_COUNT = 4 AKS_REGION = "eastus" From 4d562800abf28609d3288bf4ce414e8c5e3cfb68 Mon Sep 17 00:00:00 2001 From: lg Date: Tue, 4 Feb 2025 16:50:58 +0000 Subject: [PATCH 05/12] include plots --- .gitignore | 4 ++++ plots/.gitignore | 1 + plots/elastic/elastic_speedup.png | Bin 12783 -> 18168 bytes plots/kernels-mpi/mpi_kernels_slowdown.png | Bin 18901 -> 24076 bytes plots/kernels-omp/openmp_kernels_slowdown.png | Bin 16538 -> 20905 bytes 5 files changed, 5 insertions(+) create mode 100644 plots/.gitignore diff --git a/.gitignore b/.gitignore index cf96943..1a0a13e 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,10 @@ __pycache__/ venv/ *.egg-info/ +# Plots and results (uncomment once results are stable, and publicly available) +#plots/ +#results/ + # Kubernetes .kube/ diff --git a/plots/.gitignore b/plots/.gitignore new file mode 100644 index 0000000..630315c --- /dev/null +++ b/plots/.gitignore @@ -0,0 +1 @@ +0.27.0/* diff --git a/plots/elastic/elastic_speedup.png b/plots/elastic/elastic_speedup.png index 88c6272864e6d1db4fb13302106e0a05b261b370..03a86baaa8f18995d0c14f14ffd1a7ae340fdcbf 100644 GIT binary patch literal 18168 zcmc({cRbep-#>h4mFiiVI;LX?$KLKz`5oFTGjc1eqTaWQbgr_ebaJ?)CmG$;R4Jyb|PN1+_~>zIm? zu2;fHhmY}x*%gKH*QW+AYpaDE>yNRdQLjrlY|-$X@0xw+SF7n%ll4vKU5qO?7+u~v zqjY}#)AxH?E#72&du+a5>l52OZS7ABv#P@f<8y|J?hg-*7j!waXpFTi{Ps7g_Z%zo z_AWOYYcb-dy+q;1ugt&W(pa~UzX%)1u;ACO&|p^l5&if7)<2J_Hqm`j-M)SM(Gw?B zo6(xs`20i zZqr>ou}pVhaFFiAi4&=P5fKsQ=g*6Xj(vSf!?gK8V0n4DaYAI|dXe3`%?y+9a$SW_ zgL^f_Y?tPzojg55va_>|7h;9=&)C~Xe9ktqY%g#=s-e+*@(OwBoj)(-KX{P0e0g5@ zxkHCg%jnS1wI4rhWMpKv2nej6{Qmw>vb>*DPh~K@Y8wYT`~Am{Pa1!C|315+J@o3; zqkFl}_dGk-v_sPF^SaK?PM48-(|K1nx64^s!sqSn^DJMlS5J`9GB>+-@7_&mM^lZo z6&1zSNZ}Jk+FrbF&e9hSr(3`Nh^A)boZ9i@K3{iX zF=*}nxTRi(SJsVIKi4#Sd|l(yU%!4ijkNA7Sr{#5tNAfFsD#nUnAOzKIIO1^*I4*j z&&tZmra3b89G#WBb39q4{>6;m8`%-e@X}ia8 zOKu2myvS`(JEwlIDZQ$$j^X+9=VVeJ89%RM_*lI6W%y; zVfgdzx%v6t&Qc$7X=&B5&Qj;aIp>>q?vy)~oj!fq%lITEohjsAX#OC>Z2GPXgR{;a z@8$nGdzLJ~`_!qL9GXiDvmsk(*>a*HBSl-R&YurgjoN&wKto;qUER@aZH-47=I5=o z`o<37#>Di4Hf_=*GtMiLa23B|UR7fHt{y%1|JOfdZ)*l}U-|S&7msvKHiE;#%Ib<< zw&6KhMt=UrE$o`QecC!YJs=!Yeqrdv=#P{sk5O4I%W~+ax--5@{RBe^RhhH`~v!UjUkB?XM*Twhu9(Dg` z0`3h;Vw^LxF<(hZN#j#fx)+MscN^Y4{nU!SB{(F+vhl&O@!44#3O=JJ-pv2y6-FL$ zyU&j}j>Y4BLj}|q^b?;x-TUa#BXO_sGn)>2>z)@A5>mFX;BW8fsFvEjdv`%`vB1`? z_bQj^85pAP+!3Bdow+}suEeIPr>A%I+O^6LiE??a1DapHe7PI2vV2rcZPiIx_Vj`R zPImTR@i#<7M7G>`EA&%ZQgUNWO-*lIO-6t>502I+9d!QohJ}(kIb~yKC$M*~ zj_3~jHkwn68b-Eh?vcrDc=>y~lkr0vk7;UNiH&8WDC+BTbQF848XG4Rls$N`#@X4~ z$a-f~ekm?4{!ns3gE0b9I|w)XXegmpSPI?rsI>0iEl zS>U%ICFR(;j)F%BEG<1K>p2?!I*PBa&9S_Ctb8T1%YQ-R=OLlk%KCbygWgk$xL-`% zMNIUBs2uLgw&0Vt%qgi|sr(y4*XZXMD-D0n7LJhfn}61RIqqy<_~POsGcRvMc=);p zX=&Gn!>(Nuw{MkfFZ1KMa^;GXo7=0GK{WmIoO`X-jdqrX?RWjIxZ}pluV1^yPu*7ZpS#UA#BGY=mM zx{Y<3bPO_MICp7`)MpwMIBmr$b)NZodL6eUErpqbBSa@%^X>a?4Kk~350}E5hI7j! zFJE4R#d+p+B=6i{dh*BT_C^VEp6mVQr?fm}@j?|fodvF)6ekalnz-FYk`td*Y-4ZV zzV_&mh(`K^^1FBMKBAD5j;<^GFx9E{{d+d+Rk^k~J3eq~P9L_l71|{0R?#Qx-xO4K zkxJC8=v8m%Ra#r21a)=w>(S8{|Fs#fAKlh(u|_FSguL z&Dz@9s<5%zPw!M>z8)8s7WroYGY?~)zP7dXp?v+BCng^sANO=pu^&k0b7-EmypSi6pqvD&@5x*GGfCLuAgIhFvQ=-N+uGKu?LsTBvg z(kBP%59#ac8>eSwF`xpfC(E0d{F$N*b^BnQuN`j7%gY9N7HbFWung|Ys*YGDNIA3% z>Pz;2|89Z3QQ$WCcahGYH4=(7(vYIscgL}ein4Lz#=B@ZoCm!ni#$fI0kdR&YU!y8 z>FMuZYiDP7blZlXU!SHo&Y2W@n3GK_Egcda&C=f9{y1R8zmNbUW&Y?lrLt~6?rNKo z<)DyJ>Llws_jpdc3x(hi^P0b`tu6a&V+{(N?y33p4-8bjeM=V|9j#VA+x;>q&#_B> z+m0O;6@gUazkY3aZ5BJ&UbuJ9o;|Nxq6JiSYs0WUhj!*Ge3Ra}Q#Il60VyeV$MPj9 zjF*J(oYT9T5{FXD4jeq#GdP&x=BuJ|x&0T4Zzx~DB8$S(6sxhZ@hcBrUS0!3!^{{4 z3~6(KtyluU;Pva*DJV6sYHIj*?4YLL!B*$j_vvbDUkYL3yB2JGOISarqP3NKetsV1 z>yV9&O=|t1kcfzix%s^U4(9;8pry6-u8P_TWisyqT=$& zREA1%cC@3R)W@^%Io3i+UPEAeS zO;4YF(zGqJ35~k)%LnDAbIdHIy4<@G96E}EOMPbf_w8dleE6`-aAj4M-Bjrd`?f1| ztUI>s*l{GoVmBH^OO8oZ@mQHr$^}fN)=2tHy5V*3N(S)O%*-{+#=4W7PZ-<^8xt zMMZmcR{=rdFE{sEucr_&o{^DZv4|EtF*T^OX3d(4+FCVVjYQc~;f3zQ?7n_}J>A`b z*q=uh( z-`=XtHkStk&|W&(GY`C4*grQnC$u1PXEW(NKQ7oR^nEIDwsbbWfnJ?sQoJK4Yk0B@ zgGbwSMBpx;*$Y6S!x;jB3@u3j*gW(H@-Toc8D1cFh+*q^aM!#OFUp^}?Z}GTZ3Icombv7C}K;b93`I=#ggRrPHCcK~-H| zeTeLTDY@3%ZJ!@Cgh~@K9CwV8ZT1-Fq%QQ?K~~bQj*wjCCg8;cg9m`)cXaH4~yTb=RT^BTwx!~iYU!ch!UGe%g z4R&kLy?Z@%Z%B22_*rW{r|9p$Hw5Q`2zOUpTn%VjSsBb=w?`jy${(S9LH5!B7Y~mm zzDH22$4Kk+9vAYh%-GE7>t=`1dje7FN*|5l<7{_pR(*6TeO5V$y9S}par49F%s#hK zQP%Uxho>Ho=a-ORfdcRal`GXUkFrHxels>`z|u4a8pHVSfn>|Yxd|5uv?zljw_Shj z;YvtI7@ux2O94a@+vkbP-jQKER5hbbpZ@LJU!+h}g)rrc*EBS+czAelN?5Ep61j;^ zU%!RJzw5u#j?C~A$Bw-m@2Q$-P~|g6H@F%WR)uQGBrGiK<>f`8Ja_C`pP_pV5Uc?0 zfuDcX=FOW6e1GpTd}cFIxgT7nqvjkZw^S;_PF7ad;7Jj5(>@Sf&I4ZJ=ob1tGr&4B zPTds$#R=8$P5U=s`W;IqsE>qmUIdywWM*d8|Lx#^bW2^`jXy_5CYtrls3@`?Kd%a? zMxOcotKZ_!?ml*7$IGrRv-a=*<}xC&uG_F%Lz~1U)zvsOv4QB@0H3>2tu#@+ib~7M z!1L`CmyI-wApn=1zRC}Hu6*6YHBm+kGwsfj1`l$BTEi~X$!4jf?K zxN!|d@EuBpe#l1$Y>Y7Nxj|pdyiGCM zAtin@10~qIIjq_5*TyS?9em#g;+Y)U=gM;#=wB^;7V|b7^-CIgq1B*cbL!W)b*zQE zdtd;AU*gUa_e_3SI{i(;zpocC5&| z2rne+Y@a#nf8-7Cm}*p@b$a}TsfSYw6X8!Rv-P*FEPdMTz3SNZdgu6s16o_3r^ySr zX}ulbIyvtrDCd0Az+lkYP)mT9c4c|psp;ZJYCr3i!zi7dXd8`N>0D<-6w!CColheo<{|^QR4ypJi)%L7j8SKf0Icmn*L!zl>LS zL5Xv#ET@95@AyjIi;A7DT`ckX0ql%nBGpVrW#>9J@r6Wk#K+fntZJL`p|{-oK3u#f z>sYVLw<}#ASt#DKqI~DAsM|{yx}K!(OkmGA)TOK<5{o)m7J(x||E<9T&oM8Q+G z8q@17WbT{z8PI(Uz*_Xs@TtQlt7m9?dH8RRctjMZtvqB zkZYw-uGAz~z3y5vHUHUuqVv_RfyTVx)f+^6Z#d5CbMkPHQ%6p@Q7BVtC6~J2B(E6# zUd-z(U=ifuDF{#)AKNQ(amD{bUF2-0CrvMhCkI7wpzcMU*Tj0=zm{&6ecAW(6h-k4 zk0-N)7>=M;=jiKl(BG=v|_m;@5y5soFBRhN~DMT zCxE`xE`MM7y;J;*Vs+l}ILcnD82`kWDYMaQmoHPG*!ufT@PAA_UY)lx8^D(9^MN74 znOojhrfg}ZO~{%tSFPA%gm8ZKJ5r2*vQ-e`%pNMZGcYn{Pwm-G@Rp~vFvGcH$0&hT zEx9RA+DaYT3ob6K)Nq@WUV9$u}eX9V?4LGqJBai~M*zmm~I-xY6+ng}#6D zMzN+mZ@wkx-mhVc+8eaW+Xwb!eSCIKC*h#aOlsF|eclbB4{D2t=4VF2fIZ%tctFt= z0DHK8<3`Z^`}~~T+`S=u{?~_JL*MxN_3PZkYd*G_tRLYwA|e=F8k@`^h&=}p?3?Z^ z?U^qWTi3eeDV3RHk||u^!n2dTru#><0I0So-(q`e(YFWNN;-?B+pQKV-st%U`k55! z#`{dJ-@snoU9Xe=FPG+3i^fSrlz2zq)U8ZH4**Su5MVp`oOA_pN<+G2n<{l^EqXE=se2n0p-EvH*CkQ zadKW=STfM3@s2I2e;Oc|d0*{k(-GN+bM+5g@}k_2&vF^ozvIfvTIiZ~J)9KkmzlDA zxhH224Vy)n`?Ko%-_F*=+1TAXX>`1OOf4!u@yM8otnJeJPDTTiJOvduM`q#C*V*`B2sol-)r}IP37+LV!APT?=^R< zqdc9fSC08~GO%fauG;9nls?T%B>Cx~Q_lOhZ(j>^E52{v;Vivu=1rTz+g>+T0!IjMeCmJ3II@+8?O^9zv>4ib?*1?dw|N&XmpZKfqVnnF zgk~j&NP?(w!T6J3596BBPgqv$4SMrHdskrNal3|w29RMzTieV6VEfJGi@zA;e}7|r zWRSONx6$)gFS`7NH4jrLmNnroAuUK)f7tZquRStyaspCP&)Wl?aV1-?7@-6RrRi=V zfbg+73hqN2G0n9affssT(Lu*dQT;l{vVCf-i!YY3;o9=7L;S!CXnX3ZOJII_-sd6# zA-Q*?((kmkwubgWdufX_-S^2l%1PsD_sYOP%DaU9PmO!r7G~@(2M71O3T3VRPW1Q( zdTJ3R>Hv4s!!6N&|9uHEN+q5E!=?RitgPbhR1zjB zE6X^vLxCV+%b4PpS+0Tl>?OT?%Cr_VFe6>y{8qR+q zFT8RdDxetGl5TCwdianQ_Rfzld6uzlVn)x`ojZ39^tU>YYPI;83d)zZwnIB^gfew) zCzp%REt6trV_PdGCid+7SM8FZ(e^@DXm3RL%WPkc)i-?!W$5wQI(C#hb_^}F@sQly z+#>^*@pk^qYoInnU|yPcKmYZ~Vc+qQn-Z4d9zP8v^<1uW)I{*~1u@B=oX#fFsAQ&L zO5Um6zQ7+0Foz^NLe2l!}Va=&5r}@$1vBy^LxsA*HdFklr$gM-; zZzyuN0}_5>T=L?DG_X97wAP@BC#k&`?&7UiB@g$%?1AKZMOP>|J$)y@%NBOo9Xod5 zTPF)Nz>DyXt^OtrVTXyA*=z;IXBM!u50e)H1ETJI@uw73rUZq6vf2@8$IkG|%1W0J zXc)a!UVmg=fmnw0n3#h~UH(1b zHT8p~CX$x{Y9HBY^78U*4*DL_CRn%t=N}&&V|7l<$r1he^XK?Xn`2fP4Oy$U+S!A& zn5PiuzM3A06>sY5SjTQ=sl#BSRDAfb9-s2DsVVD&5gD~};kA|tlx{E;8L#mza2@10 zIXNkm#-^s|_;~$(Qk`F6Ls$1hmgWbwwQI@A))e}4nG}~Ex5@7sZX>O1;3q1Iih%}e zf`fz2p}U-NP{4v&L|>#(U<-MAdXlktYF%Hm_de|)3@qx{b|B|B&SXb=QnSB8(B)n4X0@PQaO$pOouc+{&p z%n#DjiMo@SwwiJ^Jp6KEA}<6a$a2>(0D7ElP;i_LFI$^|S8`a^MDdw9986au&N>#; z)k zUshGEPLy@8?0X$0fl)UubXf~yR*j7Vph;CvkKM)9)f{Hl^MLV}G~$wyy8C!9|6_{v z_8H#4f1fmlGgVg@Z|<|xEA)c$TG)T{CMPgXoNxk!!87O1Ww^*=!gT{OAd8&;x&d7K zu)6v>l=2V=O)#HX`f4I>@Q9dl;Z6(h(+Tnlq-FvpK|AJ`kuf;m)Yy2bxL9t(h7B=8 zmaxpnCnl8ej{erZzP^V0hZ$g%oFV!_fs=W@*mkHtT1zLh>BQaL+{Qo1jp;6E1kCl& z5JeQ?9H{8uM)5H*58M>Mrv*htuVBR)7Y7Hg6$OatpV@gL=~XZT$7BB`@4^{m0(!Gw zbY6l(h4H*nFTb!32I0}8M+2Wf_bBv-nWtr7AV|zLp;9LDgr2%~tKQYciwTH}GY3&K zR$`Yjb8&8L7<*AHc8|!XhOQ9(B*$L?0y(#hLcfU0d1fYN-Y<9C)SdTQ7%kh!H9E zO?^Gb*b}^a_8WCn{ONN4gC(VguY(x%N82<_Bb74TqC+zst7P=k^TPS+SD> z#I`+zrh=XEnrwLpd$sv|`(4(+3CnObxOQX)d5YFEvaLVxOfG|F)NmaG(|^T z1eS|LV53qeAdhyzdcj03Sz|J1TTz;gKVC6B|@6EPI^HqAm}#!|mI)b;CCH>Wh$m^&DG5VB5AezkmN8 zpP8v?F$>6cqPPR%)xC`)4KgT3G=b>hxVy06rr(nT63)FU;d~040d-zArXDv(eukuZ z+7Kt2N!_lFYdqMcR^JzskPxmEL>*d(MeXG7UR~rq41+GurC$wIA*FIeVR_E-TYrCO z9ci}y{$&NQ=_1Ulu4LR+z}-i;;x-R@jVq3t7lo|n{oChxdsc3l;b6*<&yP+A0SSlJ zLBhS)o}!IayPuIlM$Hyd3sjR{gH%$-wr>xel%c9X$!~b5l|ug_!2gVwyA>UQ&yCws z8Pahnb9~kux)BQu`$LBg72c|>M|s55e>(a%9z!MnVq;JhhloMoi%xF_l!`+)c4$0C zs0W?v+ORZ2I_Mq$erfQHTerA~B$|-0iMUl*NiM_XE6YCk$Ad=s@9%D{#ziQp@e8n4 z*ASKXA7vO*l5v2_>h!(I13EfQYA=S{UWkdBm5GSX4mC5h z4+4XRHl)&ov|LV6jUu_D8@mV$*`<*Zd;^Hfp{p$W?MAXRV$vEaLtV+T)iSw{zv4>| zMH_5-o&nVrzAhkdYPPa1&eDuVAj$UE2zi0-{ph`#81YN-@f_HKVc2XIz=dR(_C?d< z9np=js+PtAR)WwTh;4Ybb|Wckz@(g#Hq6LMW&Ya*KZjOf@Z>K#=&+*fn&_Obd#l6p z&b+*2JB|KMCnqQOV|cg<5fQY2N8(cO?>2<0jHW{1gOy0gp=65Wl3Qrmh7F z+qP|+Zh;AWPEZ*wII2)LdeHt=5Tv7`;L)$Y{R`?Y2T8yY$b-}XOsbgST&#@I28qJL zLZOjARfQ1`w&O(7y5q->`%X9OgO|`y?pnT%{8Hv82ZcRD+w7n2EGo?r^G|Pn;KYOG zbN{t5M{+6UhNUVt@bGMEKYC^Vh%k1kQi zC?&RQmlDD=?Wa>~H*#?F0m?pp@?^s#DrwB{UTJ9#tbvn7uygn`lRtT6hzbfmtaOLv zS#f)x-8X6j;p6{PAZBi1VKoJP@Lj&;4hw3gwq_p~i>EJQ@q z`~6>sa|IQ9j#+^9lBxFaICB2{Bbfp@n7f9CD~Sd^d&Ii+VuFGMJ|I6rO&sjjdm#4)`zN6&W z+n%iBL>^ub- zM&-dab}}3)YQ)R`|N74d-dZw;j~uB4%Omj!^vbt4b_$1^06l?~t;U=JY@-5}8pB8H zLyY&EDIuSO9mF^{%=y4U3hVz&Nl5Gu`~{RQV9VC6R8mq>oO}MFMTgkUA?^0#{*k+I#>;4F$Dw!xD9=x)6&uc`*?-$-NqV6P&tB1(5M@b^YmR9c_H}E z<}yx5O4^KlS{)D9R@Q?MYuh{|OWD}iwn|8_jE;_4+=+{0hd&j4{rX*9zNpOyE5Xdp zAcWMinU60D4YA_oODcS+1|FBt&y>fHnNhb~#4t0N0VEoXOd>200|SFM`9=l?NRI7l zehmml4~|{fYX^??rR2h1IIhg>>{l>2FPoZJ;nUJD5GNS{v$-dEc^S*ZV$;e_O&MGx zc@7@T)zDBSj1QP%wFe&`-^4KZMkP!~`_^aV>(q?gx;e?+-De=bIq#R2j;|(>frGl~ z^)m37m5hvd@Q2F?etZ1v*(0~MvvqOA*_j)8(bfIqhrzk?uu094-h>t+WSpCxP9q>7 zP{={5oPv9iQ)6@UVQA$2)E@DSQy#9aSx&{S!N|A?$ZfPE?5rL&!f&^b8yFbra4bE|ly&If`FL#M%ikRd4)xY)qM)RBA& zkv!54TS(jkG5|0bn&7=?Ke+z)Tkm~{a_0V@a(cai6UffkoLkc8%P}qGMyr|&SQ%S+ zJI%Ub!zGej!l0llRi$a%xt^HFh{;(8#f*VnBoGwNa5jRhi+EWxBwhZA@Ui8DMMcFM zl{xnvN%iC66aB16l?;Rerg({tH=_daxZggMc+l8LKfzFOw1Zs53sDe zf#T`=qIl(~;Vl!Ej@08tC~aU$&Il7oSRpH6Q0TH90K^FbtfWIbCoFBR#kss94`Tk? z-ox~5x^5&T*-V95o>X5eB``V6a0==^D)~<+7}WIMXg>61fd&1@AaE# zfu0{ft`cT|2)xhCPp!TrvUlutko^5eB&h7@F!?Vc!A6H0*ROBkV4~n|EPU0}=m8Ck z!}IbakOLC_`KR4b^J?rI=SL9gq_Ocj1_p*g5Bz3aC{d-t+}M7v0Uandg!I|D_OE&jNgn$ya% zAK`?6y8TPuEGTq$iOB*k7;SHEm)<54`1~3cC;1$q=B~X zJ5kMnYzcc9+55IPhkSb^t=@6Am-=wHet&mSeMb;ztc9gz^~(;(Ngo^M$G*QLMmi>M z4oVHt;qM_X_2sEG6Amfx*T7U@1)n8}Bh;Y?)KEAY>}amGU4O*=gSfyN3NQ|v>1|XX zu@))YPlAx^GAoy1(-XD}o?HHCWAl*{Cx|B4FUtGbvwiH!(=JBmWU5imL#<<13hEU* zzB-0(5p*5n#ol0P9;6c|1nSfO>yVDlL1%>WNmK&?NC@Rh2d>K?RGwQlFLYbV{u*h1 zn8SE6v(IjZ`y7z%Ls)v_fUL8tYgKOfa^~Q(PY&oSy;EDKzd~pH)Bkbc<0D=?3h9(! zt&b%aT)~p=qVhoZc$U_bsfFZBe`G#VyHI%3bh5P24axF7)6QVa{~?U0$vZRgQ#4AHwl+Al*rREFjPSj%fpr2 zM%%ftp01$nLChy4R3lv`e;(B}yAL(HA+T9X1gg0#c-{EN}kDhK7uB3GHdfjhyg{9-~R+z3=Qa4dTiO z!JcjZ1uEN+rol5c+;ZX&SH^2_XmOlPTE{29NpbKNvX;+#u*bMRs7sh;rg%faqoDxs zWcH|kB4-SsiV!`Fk4Lv_?V2@b=Ei%#;ac2;Y+W%1AO|VPoRS;DX^(x0+7YeAo?_lp zKQ5vs-9sXdP$58W$;3EAV62{il?A>X>NoGsSSMu~<(iff7dBw|Hx0!J5%W#^T^@W+ zTG!3BGn0cjv>P{GhR9>$z&Rt5d40k#AQ145H-#L5!Ic7+KI4KxNb$Ah4> zimGZAFdBF?4lHd3Fb!hh5WRb@Debmq?h)b<{p0ymTPOQnK|;^GHf9%u&*0?bsTEtq(dn=O5w(|zx)TeeWh#3O_$nRv~R z9J<=Sp9}q94gwlEI|Pi^Jlwkr$wFMK8g-8QQ(sillGzJzZnPY8JG(ISw==!3Lb=~P z`W_P#Lo(TOzv{%OC`gVLIQ6VT2jy1pc?Qkd%iFuMwbigG<5K~74`O6rirj_C@d(7x z)~sENZCj+b*%4=N2B32E4kQQEprAE8IeVOJ6CBdAX?wn#au*&Nk&MCOFYdGZY$NmZ z_Kll2ui{+OUEnwiBWGs`A`XEOQ$zg*!To&Z%230j(|eyGvn4A zDz8RGIWh;S3Ts0xKr_`y*Gd7Jy$sq`m;ZZVAqAs1H`R24N2Os+%=*Z3j}h)pzgZKF zbZtv)$Y~dyFceh<7=Fzsj|}Bw-9NKwP~IeB(uHFow1$Si4&~(M=R=9Oe=l6_>v03yi)BhrX-Dj%IZ_U)9B;RGzi zSv0oI^1fH`LVhF%7iPy=+-&z{Vqx{y1$0pk-Q%6=$F=3ax4!;8AEsl z4k(J7M6&O%KjA8|^2H74*fro!c@Wp9>kChp4qS% z=Gz97iUeJlmWk>0Wja>L#M>6DniLh^IVZb2;zvtvvbg(@E*We<3<1DCI;@RK;oK5_sM|*hyr(l!n4J-$ zzkv)52RWAq-V#Jy0*&+s?09ev3hkdRAY^+3=atYvPmzOqccF$obLcROOb^9-s*OYybY!O&M2VXP{ylT}dCijx+^Z4Jk)h zs}+#>9^1D`8JBvqfyg2p8g%Cl&uCY<*~n}F3&=2GfJ#aizs$@{Sf1}FI@NQCh|Sk< zgo*fZM5V*C=OF~oT|ap^l1a<&B_2Q01*b=Wrj!pI5)RjL+rI;`QgqwiUm)i=YZpNl zA!KNq&yQ|-Q6pNxMe-gfDtT~rU6#y>+~`WZr!V0#097twC%(-tM>#^%A|)6Mx4Xl$ zi=5RgC<|Cwh6tl_@+313^K^rsIVqrkiw7+GA|tTD+uQqJT2O&0rVl(D`#S_SHSQUv z6*Dsht8@_#Ggc-a7W-N(xJ?JVm|r+{)j*G|Hh}snV(^$!R#rx)&GbS)8;;)APR9c= zA%4R5{rh(u=&MA27zdTUx^%6Kl`X8tgCfp<1!4{MtYFItc(P|KErU>=LhX_MQifa6 z-P^0}pzx0gNe5Ah!J44WaFMG$+qFu<<5mM%v-ruJ`O{1S;D- zxVXfYAV*jWXAfTZwGBs3umeDdy}PkfU55FPhQvr>`)z{cY}1mHSedNE?{3+nqN{q& z&aMy2=qvQM2ohjEX$G_+2V0x~F!-m$=OFoA9C0G-$#<$jbq-!pU1>dbC`qm*;BXMc zN^){W?7~@SRj@couZ7dj!ow5x?wxx0=7WYgQP3Ebu%^*d4(sa1R4$UD4?IVYX|4hf z##~)w5jfIa8!Jo+#A+g71*_>0+%uFh)0`-5c1v*Gxw*b5b5P+I9~v7sp#4<=&rSSv ztw+$49(<78%~PxQm7g+nh5d~ zBP@*!5#n6y;p};V7NX3rqM*Q6@i>-TL@b%;Ik4Y%d%hzo<|1-8a}a}_CwdP*f+9dH zY(IsowlRt-?vZHy1Q01PuOX)$P&#jJLHq|G!^mr*7rUsi-js4;8eZ)xzbI22yw$Li8sa>Ne0&wPWP9iOE59m|bz<_+{<1;T; znZu`Z8B2_d+d*L__6aUUkQrt#!zBQp9}L*^HotU!D610vNJLa_|9(1DEVdbPyqGHR zvCphS@NiXC)mn-&lxKYC89O`Sb-c2=qE=wbm(tVI@wIUbF8vW`bpSH`7Ol_D2|POe z^a%6i#<6lleXgTw=Ojy5Ug;hh5)zH)twZyt#Wt-3UcQVfON*jfiCji7U=2OGQGYLj z-PqBW5n}lBIy|*-yXWDBY;}igkx_eIPhUV)W24X_hQtAK3e+S3;%F==D9CK7mutG4 z!VFDV08a{XL97Y3QP$|RA2yFH1n$Q}J6?y+)%A)yd>UZlO5Epwop*POh>+gnd>TRx zvBL3kYG)k53AqmC%?#LtPCi-NaiX z0r^dvL_BBNC^qNL#R_jsI&eWdC+bK9_uJjaw`~ZvKN~=aMUI9BXakwFSR?DRXSe&4 z6E~>~zAS+C!Kks-VH^|R?>NR81z^C4JPS0Cv5coabM|a7>=&0|_y;@uvukIaaYPzb zd`+NBUq;eC1i#2WL7O8#8zEA2TD~^+?a1%Gly}b4zkXpK>;?m&fpA73>+yI|Ax6>J zsi{|(D{`=JlZ+Du5eGucpxCFm@u}>)7|g15@Uho~g^ZjW@VQb>2MQx>?n_&)Hf=0< zcfo}yePwxii_9U;4wb9XH4^3oqi~r@7)VRe>=doHJDz4pcFt$sp>Hk(z~6EzSEN zGNCss@ki^*oZKw9+X}`=mRorQ_daa#iMpeCwSC@Wod=D}e7Qj4$&XT?P*fu~MTZT3 z$rB)frUU+q1_y?x7H7Eymwr!AP6j0>^AXa)wb$yg6MsZsH&_DUyM!a@vWg(6orom%P$o!?`uGXkSYXa#;YL0!O_w6($dmck$s3=R-qy|A+PZ+=^zimIlFTAKt?L? zn&4kvUT{RLQa_97FalyAax}NpXDXZYb={5e6ATE^2dZVqq9$jyakfRMU-HogNFmVO-neD*tl}z1}lk0K#;%I=TiG&19ER93xT|hFjCbY!CVR_bZc+!IZF=_ z6Z`uLUTiMmchof*IfEx~-C3MgWV}E(a;kYc6vdq#_elx#mw)LB2DEP@G z!A(35?`QU9rltlX2!#~Wea!dVw;LyF-%B*3uq=Y_kb{M|k~jdROZ+kZ9W($dp6x(TW1hK-X`>MZ~M@hkB|K;Zb15qtmd g5IFIT=2ys18CsghX4Qo literal 12783 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 diff --git a/plots/kernels-mpi/mpi_kernels_slowdown.png b/plots/kernels-mpi/mpi_kernels_slowdown.png index e21359baa99e32dcf297594b5d227e64b6cc9bf8..6f172a8c3fb4fa48065be586426c8cccaaf80f7f 100644 GIT binary patch literal 24076 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 literal 18901 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 Date: Tue, 4 Feb 2025 16:54:53 +0000 Subject: [PATCH 06/12] fix md link --- tasks/elastic/README.md | 5 ++--- tasks/kernels_mpi/README.md | 5 ++--- tasks/kernels_omp/README.md | 5 ++--- 3 files changed, 6 insertions(+), 9 deletions(-) diff --git a/tasks/elastic/README.md b/tasks/elastic/README.md index ee574f7..bb95383 100644 --- a/tasks/elastic/README.md +++ b/tasks/elastic/README.md @@ -44,10 +44,9 @@ You may now plot the results using: inv elastic.plot ``` -the plot will be available in [`./plots/elastic/elastic_speedup.pdf`]( -./plots/elastic/elastic_speedup.pdf), we also include it below: +the plot will be available in [`/plots/elastic/elastic_speedup.pdf`](/plots/elastic/elastic_speedup.pdf), we also include it below: -![Elastic Scaling Plot](./plots/elastic/elastic_speedup.png) +![Elastic Scaling Plot](/plots/elastic/elastic_speedup.png) ## Clean-Up diff --git a/tasks/kernels_mpi/README.md b/tasks/kernels_mpi/README.md index f75667a..2a7b526 100644 --- a/tasks/kernels_mpi/README.md +++ b/tasks/kernels_mpi/README.md @@ -63,10 +63,9 @@ To plot the results, just run: inv kernels-mpi.plot ``` -the plot will be available in [`./plots/kernels-mpi/mpi_kernels_slowdown.pdf`]( -./plots/kernels-mpi/mpi_kernels_slowdown.pdf), we also include it below: +the plot will be available in [`/plots/kernels-mpi/mpi_kernels_slowdown.pdf`](/plots/kernels-mpi/mpi_kernels_slowdown.pdf), we also include it below: -![MPI Kernels Slowdown Plot](./plots/kernels-mpi/mpi_kernels_slowdown.png) +![MPI Kernels Slowdown Plot](/plots/kernels-mpi/mpi_kernels_slowdown.png) ## Clean-up diff --git a/tasks/kernels_omp/README.md b/tasks/kernels_omp/README.md index 598b695..c176b0c 100644 --- a/tasks/kernels_omp/README.md +++ b/tasks/kernels_omp/README.md @@ -63,10 +63,9 @@ To plot the results, just run: inv kernels-omp.plot ``` -the plot will be available in [`./plots/kernels-omp/openmp_kernels_slowdown.pdf`]( -./plots/kernels-omp/openmp_kernels_slowdown.pdf), we also include it below: +the plot will be available in [`/plots/kernels-omp/openmp_kernels_slowdown.pdf`](/plots/kernels-omp/openmp_kernels_slowdown.pdf), we also include it below: -![OpenMP Kernels Slowdown Plot](./plots/kernels-omp/openmp_kernels_slowdown.png) +![OpenMP Kernels Slowdown Plot](/plots/kernels-omp/openmp_kernels_slowdown.png) ## Clean-up From a3a77fa37d1032c51486f4ec387d8017b0bfe670 Mon Sep 17 00:00:00 2001 From: lg Date: Tue, 4 Feb 2025 16:58:46 +0000 Subject: [PATCH 07/12] fix key error: data-file -> data_file --- tasks/lammps/run.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tasks/lammps/run.py b/tasks/lammps/run.py index c78f838..fb50c37 100644 --- a/tasks/lammps/run.py +++ b/tasks/lammps/run.py @@ -60,7 +60,7 @@ def wasm(ctx, w, repeats=1): ) workload_config = LAMMPS_SIM_WORKLOAD_CONFIGS[workload] data_file = basename( - get_lammps_data_file(workload_config["data-file"])["data"][0] + get_lammps_data_file(workload_config["data_file"])["data"][0] ) csv_name = "lammps_granny_{}.csv".format(workload) @@ -111,7 +111,7 @@ def native(ctx, w, repeats=1): ) ) workload_config = LAMMPS_SIM_WORKLOAD_CONFIGS[workload] - data_file = get_lammps_data_file(workload_config["data-file"])["data"][ + data_file = get_lammps_data_file(workload_config["data_file"])["data"][ 0 ] From 031a5d42db546fb13814551efeb6c0fa07335aef Mon Sep 17 00:00:00 2001 From: lg Date: Wed, 5 Feb 2025 11:04:36 +0000 Subject: [PATCH 08/12] fix makedirs --- .../migration_speedup_all-to-all.png | Bin 8956 -> 12131 bytes tasks/migration/plot.py | 2 ++ 2 files changed, 2 insertions(+) diff --git a/plots/migration/migration_speedup_all-to-all.png b/plots/migration/migration_speedup_all-to-all.png index 4957276ad0f4c0de4ed7745fbc9b51941b3d51af..b56cd21d78c6a28fd7de974c86a2bf378bb3dd96 100644 GIT binary patch literal 12131 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 diff --git a/tasks/migration/plot.py b/tasks/migration/plot.py index 7d3133f..040907c 100644 --- a/tasks/migration/plot.py +++ b/tasks/migration/plot.py @@ -2,6 +2,7 @@ from invoke import task from matplotlib.pyplot import hlines, subplots import matplotlib.pyplot as plt +from os import makedirs from numpy import arange from os.path import join from pandas import read_csv @@ -59,6 +60,7 @@ def plot(ctx): Plot migration figure """ migration_results = _read_results() + makedirs(MIGRATION_PLOTS_DIR, exist_ok=True) do_plot("all-to-all", migration_results) # do_plot("compute", migration_results) From 8c1a390c4ccda98634fbc57fd8c9dc950d404a6f Mon Sep 17 00:00:00 2001 From: lg Date: Wed, 5 Feb 2025 14:13:05 +0000 Subject: [PATCH 09/12] migration --- .../migration_speedup_all-to-all.png | Bin 12131 -> 12274 bytes .../migration_speedup_very-network.png | Bin 9150 -> 12291 bytes tasks/migration/README.md | 4 ++-- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plots/migration/migration_speedup_all-to-all.png b/plots/migration/migration_speedup_all-to-all.png index b56cd21d78c6a28fd7de974c86a2bf378bb3dd96..7e007b7d6252dfb3cb2f1b4251baa7d17ed0b125 100644 GIT binary patch literal 12274 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 Date: Mon, 10 Feb 2025 13:07:34 +0000 Subject: [PATCH 10/12] add results --- results/.gitignore | 1 + results/elastic/openmp_elastic_granny.csv | 16 ++--- results/elastic/openmp_no-elastic_granny.csv | 16 ++--- .../kernels-mpi/kernels_granny_nstream.csv | 48 +++------------ results/kernels-mpi/kernels_granny_p2p.csv | 48 +++------------ results/kernels-mpi/kernels_granny_reduce.csv | 48 +++------------ results/kernels-mpi/kernels_granny_sparse.csv | 24 ++------ .../kernels-mpi/kernels_granny_stencil.csv | 48 +++------------ .../kernels-mpi/kernels_granny_transpose.csv | 48 +++------------ .../kernels-mpi/kernels_native_nstream.csv | 48 +++------------ results/kernels-mpi/kernels_native_p2p.csv | 48 +++------------ results/kernels-mpi/kernels_native_reduce.csv | 48 +++------------ results/kernels-mpi/kernels_native_sparse.csv | 24 ++------ .../kernels-mpi/kernels_native_stencil.csv | 48 +++------------ .../kernels-mpi/kernels_native_transpose.csv | 48 +++------------ results/kernels-omp/openmp_dgemm_granny.csv | 48 +++------------ results/kernels-omp/openmp_dgemm_native.csv | 48 +++------------ results/kernels-omp/openmp_nstream_granny.csv | 48 +++------------ results/kernels-omp/openmp_nstream_native.csv | 48 +++------------ results/kernels-omp/openmp_p2p_granny.csv | 48 +++------------ results/kernels-omp/openmp_p2p_native.csv | 48 +++------------ results/kernels-omp/openmp_reduce_granny.csv | 48 +++------------ results/kernels-omp/openmp_reduce_native.csv | 48 +++------------ results/kernels-omp/openmp_sparse_granny.csv | 48 +++------------ results/kernels-omp/openmp_sparse_native.csv | 48 +++------------ results/lammps/lammps_granny_compute.csv | 60 +++++-------------- results/lammps/lammps_granny_network.csv | 50 ++-------------- results/lammps/lammps_native_compute.csv | 30 +++++----- results/lammps/lammps_native_network.csv | 30 +++++----- ...info_batch_16vms_5tpusr_mpi-evict_50_8.csv | 1 + ...ores_batch_16vms_5tpusr_mpi-evict_50_8.csv | 1 + ...span_batch_16vms_5tpusr_mpi-evict_50_8.csv | 1 + ...info_batch_16vms_5tpusr_mpi-evict_50_8.csv | 12 ++++ results/migration/migration_all-to-all.csv | 12 ++-- results/migration/migration_compute.csv | 7 +++ results/migration/migration_network.csv | 7 +++ results/migration/migration_very-network.csv | 12 ++-- .../polybench/polybench_native_poly_2mm.csv | 4 ++ .../polybench/polybench_native_poly_3mm.csv | 4 ++ .../polybench/polybench_native_poly_adi.csv | 4 ++ .../polybench/polybench_native_poly_atax.csv | 4 ++ .../polybench/polybench_native_poly_bicg.csv | 4 ++ .../polybench_native_poly_cholesky.csv | 4 ++ .../polybench_native_poly_correlation.csv | 4 ++ .../polybench_native_poly_covariance.csv | 4 ++ .../polybench_native_poly_deriche.csv | 4 ++ .../polybench_native_poly_doitgen.csv | 4 ++ .../polybench_native_poly_durbin.csv | 4 ++ .../polybench_native_poly_fdtd-2d.csv | 4 ++ .../polybench_native_poly_floyd-warshall.csv | 4 ++ .../polybench_native_poly_gramschmidt.csv | 4 ++ .../polybench_native_poly_heat-3d.csv | 4 ++ .../polybench_native_poly_jacobi-1d.csv | 4 ++ .../polybench_native_poly_jacobi-2d.csv | 4 ++ .../polybench/polybench_native_poly_lu.csv | 4 ++ .../polybench_native_poly_ludcmp.csv | 4 ++ .../polybench/polybench_native_poly_mvt.csv | 4 ++ .../polybench_native_poly_nussinov.csv | 4 ++ .../polybench_native_poly_seidel-2d.csv | 4 ++ .../polybench_native_poly_trisolv.csv | 4 ++ 60 files changed, 368 insertions(+), 988 deletions(-) create mode 100644 results/.gitignore mode change 100755 => 100644 results/elastic/openmp_elastic_granny.csv mode change 100755 => 100644 results/elastic/openmp_no-elastic_granny.csv mode change 100755 => 100644 results/kernels-mpi/kernels_granny_nstream.csv mode change 100755 => 100644 results/kernels-mpi/kernels_granny_p2p.csv mode change 100755 => 100644 results/kernels-mpi/kernels_granny_reduce.csv mode change 100755 => 100644 results/kernels-mpi/kernels_granny_sparse.csv mode change 100755 => 100644 results/kernels-mpi/kernels_granny_stencil.csv mode change 100755 => 100644 results/kernels-mpi/kernels_granny_transpose.csv mode change 100755 => 100644 results/kernels-mpi/kernels_native_nstream.csv mode change 100755 => 100644 results/kernels-mpi/kernels_native_p2p.csv mode change 100755 => 100644 results/kernels-mpi/kernels_native_reduce.csv mode change 100755 => 100644 results/kernels-mpi/kernels_native_sparse.csv mode change 100755 => 100644 results/kernels-mpi/kernels_native_stencil.csv mode change 100755 => 100644 results/kernels-mpi/kernels_native_transpose.csv mode change 100755 => 100644 results/kernels-omp/openmp_dgemm_granny.csv mode change 100755 => 100644 results/kernels-omp/openmp_dgemm_native.csv mode change 100755 => 100644 results/kernels-omp/openmp_nstream_granny.csv mode change 100755 => 100644 results/kernels-omp/openmp_nstream_native.csv mode change 100755 => 100644 results/kernels-omp/openmp_p2p_granny.csv mode change 100755 => 100644 results/kernels-omp/openmp_p2p_native.csv mode change 100755 => 100644 results/kernels-omp/openmp_reduce_granny.csv mode change 100755 => 100644 results/kernels-omp/openmp_reduce_native.csv mode change 100755 => 100644 results/kernels-omp/openmp_sparse_granny.csv mode change 100755 => 100644 results/kernels-omp/openmp_sparse_native.csv mode change 100755 => 100644 results/lammps/lammps_granny_compute.csv mode change 100755 => 100644 results/lammps/lammps_granny_network.csv mode change 100755 => 100644 results/lammps/lammps_native_compute.csv mode change 100755 => 100644 results/lammps/lammps_native_network.csv create mode 100644 results/makespan/makespan_exec-task-info_batch_16vms_5tpusr_mpi-evict_50_8.csv create mode 100644 results/makespan/makespan_idle-cores_batch_16vms_5tpusr_mpi-evict_50_8.csv create mode 100644 results/makespan/makespan_makespan_batch_16vms_5tpusr_mpi-evict_50_8.csv create mode 100644 results/makespan/makespan_sched-info_batch_16vms_5tpusr_mpi-evict_50_8.csv mode change 100755 => 100644 results/migration/migration_all-to-all.csv create mode 100644 results/migration/migration_compute.csv create mode 100644 results/migration/migration_network.csv mode change 100755 => 100644 results/migration/migration_very-network.csv create mode 100644 results/polybench/polybench_native_poly_2mm.csv create mode 100644 results/polybench/polybench_native_poly_3mm.csv create mode 100644 results/polybench/polybench_native_poly_adi.csv create mode 100644 results/polybench/polybench_native_poly_atax.csv create mode 100644 results/polybench/polybench_native_poly_bicg.csv create mode 100644 results/polybench/polybench_native_poly_cholesky.csv create mode 100644 results/polybench/polybench_native_poly_correlation.csv create mode 100644 results/polybench/polybench_native_poly_covariance.csv create mode 100644 results/polybench/polybench_native_poly_deriche.csv create mode 100644 results/polybench/polybench_native_poly_doitgen.csv create mode 100644 results/polybench/polybench_native_poly_durbin.csv create mode 100644 results/polybench/polybench_native_poly_fdtd-2d.csv create mode 100644 results/polybench/polybench_native_poly_floyd-warshall.csv create mode 100644 results/polybench/polybench_native_poly_gramschmidt.csv create mode 100644 results/polybench/polybench_native_poly_heat-3d.csv create mode 100644 results/polybench/polybench_native_poly_jacobi-1d.csv create mode 100644 results/polybench/polybench_native_poly_jacobi-2d.csv create mode 100644 results/polybench/polybench_native_poly_lu.csv create mode 100644 results/polybench/polybench_native_poly_ludcmp.csv create mode 100644 results/polybench/polybench_native_poly_mvt.csv create mode 100644 results/polybench/polybench_native_poly_nussinov.csv create mode 100644 results/polybench/polybench_native_poly_seidel-2d.csv create mode 100644 results/polybench/polybench_native_poly_trisolv.csv diff --git a/results/.gitignore b/results/.gitignore new file mode 100644 index 0000000..f9be8df --- /dev/null +++ b/results/.gitignore @@ -0,0 +1 @@ +!* diff --git a/results/elastic/openmp_elastic_granny.csv b/results/elastic/openmp_elastic_granny.csv old mode 100755 new mode 100644 index 3dce98a..8ad1d3b --- a/results/elastic/openmp_elastic_granny.csv +++ b/results/elastic/openmp_elastic_granny.csv @@ -1,9 +1,9 @@ NumThreads,Run,ExecTimeSecs -1,0,39.152 -2,0,24.21 -3,0,19.185 -4,0,16.112 -5,0,14.932 -6,0,14.122 -7,0,13.619 -8,0,12.582 +1,0,53.988 +2,0,30.947 +3,0,23.405 +4,0,19.454 +5,0,17.139 +6,0,15.817 +7,0,14.957 +8,0,14.42 diff --git a/results/elastic/openmp_no-elastic_granny.csv b/results/elastic/openmp_no-elastic_granny.csv old mode 100755 new mode 100644 index a00d154..f311720 --- a/results/elastic/openmp_no-elastic_granny.csv +++ b/results/elastic/openmp_no-elastic_granny.csv @@ -1,9 +1,9 @@ NumThreads,Run,ExecTimeSecs -1,0,65.416 -2,0,34.829 -3,0,25.939 -4,0,20.568 -5,0,17.156 -6,0,17.019 -7,0,13.841 -8,0,12.806 +1,0,93.268 +2,0,47.609 +3,0,32.061 +4,0,24.377 +5,0,20.153 +6,0,17.311 +7,0,15.501 +8,0,14.299 diff --git a/results/kernels-mpi/kernels_granny_nstream.csv b/results/kernels-mpi/kernels_granny_nstream.csv old mode 100755 new mode 100644 index bf66e2f..3e7d0ff --- a/results/kernels-mpi/kernels_granny_nstream.csv +++ b/results/kernels-mpi/kernels_granny_nstream.csv @@ -1,41 +1,9 @@ WorldSize,Run,ActualTime -2,0,155.422 -4,0,47.38 -6,0,61.267 -8,0,51.265 -10,0,41.075 -12,0,34.013 -14,0,29.439 -16,0,25.82 -2,1,134.033 -4,1,47.378 -6,1,52.715 -8,1,51.308 -10,1,41.394 -12,1,34.111 -14,1,29.231 -16,1,25.865 -2,2,125.489 -4,2,46.86 -6,2,57.118 -8,2,51.329 -10,2,40.922 -12,2,34.252 -14,2,29.45 -16,2,25.58 -2,3,149.199 -4,3,49.333 -6,3,57.095 -8,3,51.363 -10,3,40.985 -12,3,34.288 -14,3,29.294 -16,3,25.835 -2,4,147.232 -4,4,48.434 -6,4,51.675 -8,4,51.256 -10,4,41.096 -12,4,34.074 -14,4,29.486 -16,4,25.881 +2,0,144.477 +4,0,55.726 +6,0,58.361 +8,0,55.774 +10,0,44.328 +12,0,38.119 +14,0,32.142 +16,0,28.315 diff --git a/results/kernels-mpi/kernels_granny_p2p.csv b/results/kernels-mpi/kernels_granny_p2p.csv old mode 100755 new mode 100644 index 78a98df..be507fb --- a/results/kernels-mpi/kernels_granny_p2p.csv +++ b/results/kernels-mpi/kernels_granny_p2p.csv @@ -1,41 +1,9 @@ WorldSize,Run,ActualTime -2,0,1.514 -4,0,1.129 -6,0,1.09 -8,0,1.095 -10,0,10.852 -12,0,10.701 -14,0,10.823 -16,0,10.369 -2,1,1.508 -4,1,1.124 -6,1,1.11 -8,1,1.107 -10,1,10.757 -12,1,10.742 -14,1,10.816 -16,1,10.501 -2,2,1.486 -4,2,1.114 -6,2,1.066 -8,2,1.079 -10,2,10.274 -12,2,10.45 -14,2,10.323 -16,2,10.553 -2,3,1.549 -4,3,1.154 -6,3,1.067 -8,3,1.033 -10,3,10.347 -12,3,10.505 -14,3,10.617 -16,3,10.909 -2,4,1.517 -4,4,1.071 -6,4,1.049 -8,4,0.952 -10,4,10.689 -12,4,10.673 -14,4,10.625 -16,4,10.71 +2,0,1.83 +4,0,1.335 +6,0,1.394 +8,0,1.348 +10,0,12.404 +12,0,12.387 +14,0,12.294 +16,0,12.262 diff --git a/results/kernels-mpi/kernels_granny_reduce.csv b/results/kernels-mpi/kernels_granny_reduce.csv old mode 100755 new mode 100644 index 1deea1b..2ace416 --- a/results/kernels-mpi/kernels_granny_reduce.csv +++ b/results/kernels-mpi/kernels_granny_reduce.csv @@ -1,41 +1,9 @@ WorldSize,Run,ActualTime -2,0,0.124 -4,0,0.425 -6,0,0.97 -8,0,1.371 -10,0,1.987 -12,0,1.853 -14,0,1.801 -16,0,2.351 -2,1,0.147 -4,1,0.538 -6,1,0.978 -8,1,1.459 -10,1,1.855 -12,1,1.851 -14,1,2.038 -16,1,2.134 -2,2,0.129 -4,2,0.412 -6,2,0.895 -8,2,1.371 -10,2,1.983 -12,2,1.825 -14,2,2.034 -16,2,2.311 -2,3,0.136 -4,3,0.582 -6,3,0.899 -8,3,1.426 -10,3,1.984 -12,3,2.074 -14,3,2.063 -16,3,2.315 -2,4,0.124 -4,4,0.417 -6,4,1.019 -8,4,1.387 -10,4,2.101 -12,4,2.003 -14,4,2.092 -16,4,2.382 +2,0,0.153 +4,0,0.474 +6,0,1.182 +8,0,1.682 +10,0,2.369 +12,0,2.339 +14,0,2.389 +16,0,2.392 diff --git a/results/kernels-mpi/kernels_granny_sparse.csv b/results/kernels-mpi/kernels_granny_sparse.csv old mode 100755 new mode 100644 index 353db30..a12e045 --- a/results/kernels-mpi/kernels_granny_sparse.csv +++ b/results/kernels-mpi/kernels_granny_sparse.csv @@ -1,21 +1,5 @@ WorldSize,Run,ActualTime -2,0,19.147 -4,0,12.854 -8,0,13.553 -16,0,12.928 -2,1,18.818 -4,1,12.921 -8,1,14.094 -16,1,12.854 -2,2,18.828 -4,2,13.307 -8,2,14.46 -16,2,12.896 -2,3,18.152 -4,3,13.409 -8,3,14.613 -16,3,13.11 -2,4,18.402 -4,4,13.028 -8,4,14.142 -16,4,13.889 +2,0,24.408 +4,0,16.227 +8,0,17.109 +16,0,15.41 diff --git a/results/kernels-mpi/kernels_granny_stencil.csv b/results/kernels-mpi/kernels_granny_stencil.csv old mode 100755 new mode 100644 index 02011ca..50a6806 --- a/results/kernels-mpi/kernels_granny_stencil.csv +++ b/results/kernels-mpi/kernels_granny_stencil.csv @@ -1,41 +1,9 @@ WorldSize,Run,ActualTime -2,0,20.212 -4,0,11.406 -6,0,15.483 -8,0,11.657 -10,0,10.918 -12,0,12.031 -14,0,10.185 -16,0,10.167 -2,1,20.508 -4,1,11.495 -6,1,15.319 -8,1,11.695 -10,1,11.046 -12,1,11.699 -14,1,8.826 -16,1,9.922 -2,2,20.533 -4,2,11.321 -6,2,15.31 -8,2,11.736 -10,2,10.98 -12,2,11.095 -14,2,8.758 -16,2,9.395 -2,3,20.494 -4,3,11.371 -6,3,15.424 -8,3,12.098 -10,3,11.091 -12,3,11.263 -14,3,9.367 -16,3,9.949 -2,4,20.268 -4,4,11.388 -6,4,15.449 -8,4,11.653 -10,4,10.845 -12,4,11.513 -14,4,9.286 -16,4,9.877 +2,0,23.814 +4,0,13.041 +6,0,15.067 +8,0,11.477 +10,0,10.371 +12,0,10.977 +14,0,9.227 +16,0,10.766 diff --git a/results/kernels-mpi/kernels_granny_transpose.csv b/results/kernels-mpi/kernels_granny_transpose.csv old mode 100755 new mode 100644 index 3e2ac79..e31c583 --- a/results/kernels-mpi/kernels_granny_transpose.csv +++ b/results/kernels-mpi/kernels_granny_transpose.csv @@ -1,41 +1,9 @@ WorldSize,Run,ActualTime -2,0,4.421 -4,0,2.126 -6,0,2.208 -8,0,1.576 -10,0,2.887 -12,0,2.756 -14,0,2.736 -16,0,2.986 -2,1,4.572 -4,1,2.123 -6,1,2.165 -8,1,1.711 -10,1,2.886 -12,1,2.831 -14,1,2.475 -16,1,2.726 -2,2,4.32 -4,2,1.978 -6,2,2.053 -8,2,1.654 -10,2,2.886 -12,2,3.043 -14,2,2.764 -16,2,2.982 -2,3,4.61 -4,3,2.11 -6,3,2.033 -8,3,1.613 -10,3,2.867 -12,3,3.009 -14,3,2.736 -16,3,2.797 -2,4,4.594 -4,4,1.977 -6,4,2.049 -8,4,1.59 -10,4,2.998 -12,4,3.147 -14,4,2.757 -16,4,3.008 +2,0,6.145 +4,0,3.386 +6,0,2.883 +8,0,2.383 +10,0,3.766 +12,0,3.805 +14,0,3.283 +16,0,3.29 diff --git a/results/kernels-mpi/kernels_native_nstream.csv b/results/kernels-mpi/kernels_native_nstream.csv old mode 100755 new mode 100644 index c52aea7..5df2519 --- a/results/kernels-mpi/kernels_native_nstream.csv +++ b/results/kernels-mpi/kernels_native_nstream.csv @@ -1,41 +1,9 @@ WorldSize,Run,ActualTime -2,0,211.80240845680237 -4,0,50.70300316810608 -6,0,74.18139553070068 -8,0,45.91553807258606 -10,0,36.96965837478638 -12,0,30.79936957359314 -14,0,26.56351089477539 -16,0,23.30944538116455 -2,1,211.2990322113037 -4,1,45.38427472114563 -6,1,60.00726628303528 -8,1,47.265791177749634 -10,1,36.79808259010315 -12,1,30.628745794296265 -14,1,26.52407145500183 -16,1,23.410788774490356 -2,2,211.14375948905945 -4,2,49.23323917388916 -6,2,73.67288994789124 -8,2,46.63195252418518 -10,2,36.83924150466919 -12,2,30.615288019180298 -14,2,26.592950105667114 -16,2,23.318421840667725 -2,3,210.9948353767395 -4,3,46.89555215835571 -6,3,79.65575861930847 -8,3,49.10797095298767 -10,3,36.69231963157654 -12,3,30.93598747253418 -14,3,26.449821710586548 -16,3,23.374608278274536 -2,4,207.72968411445618 -4,4,47.820003032684326 -6,4,57.41533017158508 -8,4,59.936208963394165 -10,4,36.6309711933136 -12,4,30.83677053451538 -14,4,26.444123029708862 -16,4,23.54766869544983 +2,0,158.54328417778015 +4,0,45.718183279037476 +6,0,79.77560114860535 +8,0,46.39321160316467 +10,0,36.71035814285278 +12,0,30.637343406677246 +14,0,28.074965953826904 +16,0,23.32197403907776 diff --git a/results/kernels-mpi/kernels_native_p2p.csv b/results/kernels-mpi/kernels_native_p2p.csv old mode 100755 new mode 100644 index e4c514c..329427d --- a/results/kernels-mpi/kernels_native_p2p.csv +++ b/results/kernels-mpi/kernels_native_p2p.csv @@ -1,41 +1,9 @@ WorldSize,Run,ActualTime -2,0,1.8275446891784668 -4,0,1.6021056175231934 -6,0,1.6116538047790527 -8,0,1.6758580207824707 -10,0,9.951421976089478 -12,0,10.237882852554321 -14,0,9.807735681533813 -16,0,10.446318864822388 -2,1,1.7834811210632324 -4,1,1.6172304153442383 -6,1,1.652186393737793 -8,1,1.5778076648712158 -10,1,10.204224586486816 -12,1,9.694399118423462 -14,1,9.935903787612915 -16,1,10.94922924041748 -2,2,1.7559447288513184 -4,2,1.5802686214447021 -6,2,1.596501350402832 -8,2,1.6116304397583008 -10,2,9.991573333740234 -12,2,9.852302312850952 -14,2,10.24347186088562 -16,2,10.291944980621338 -2,3,1.7971758842468262 -4,3,1.5568616390228271 -6,3,1.5839636325836182 -8,3,1.5862820148468018 -10,3,9.88243055343628 -12,3,10.252933025360107 -14,3,10.004428625106812 -16,3,10.406328916549683 -2,4,1.7527241706848145 -4,4,1.576845645904541 -6,4,1.5824618339538574 -8,4,1.6136491298675537 -10,4,9.458833932876587 -12,4,10.16277289390564 -14,4,10.213975429534912 -16,4,10.434766054153442 +2,0,1.7996103763580322 +4,0,1.6232829093933105 +6,0,1.6431398391723633 +8,0,1.6249024868011475 +10,0,9.889100313186646 +12,0,10.113336324691772 +14,0,10.079440593719482 +16,0,10.424075841903687 diff --git a/results/kernels-mpi/kernels_native_reduce.csv b/results/kernels-mpi/kernels_native_reduce.csv old mode 100755 new mode 100644 index f5fff66..7a9e75e --- a/results/kernels-mpi/kernels_native_reduce.csv +++ b/results/kernels-mpi/kernels_native_reduce.csv @@ -1,41 +1,9 @@ WorldSize,Run,ActualTime -2,0,1.3006765842437744 -4,0,1.4821159839630127 -6,0,1.5666041374206543 -8,0,1.8244519233703613 -10,0,2.651923179626465 -12,0,2.7560596466064453 -14,0,2.8214452266693115 -16,0,3.0188097953796387 -2,1,1.318660020828247 -4,1,1.4767401218414307 -6,1,1.551201581954956 -8,1,1.8242247104644775 -10,1,2.815175771713257 -12,1,2.7875349521636963 -14,1,2.6900227069854736 -16,1,2.9060306549072266 -2,2,1.3303911685943604 -4,2,1.5205707550048828 -6,2,1.6374084949493408 -8,2,1.727043867111206 -10,2,2.776304244995117 -12,2,2.867478847503662 -14,2,2.7892520427703857 -16,2,3.059666872024536 -2,3,1.316744327545166 -4,3,1.509899377822876 -6,3,1.5766303539276123 -8,3,1.7922968864440918 -10,3,3.0703768730163574 -12,3,2.9876925945281982 -14,3,2.6913206577301025 -16,3,2.9684088230133057 -2,4,1.337737798690796 -4,4,1.4962162971496582 -6,4,1.596050500869751 -8,4,1.8612620830535889 -10,4,2.687384843826294 -12,4,2.823078155517578 -14,4,2.8163084983825684 -16,4,2.952660322189331 +2,0,1.352208137512207 +4,0,1.5660419464111328 +6,0,1.6717712879180908 +8,0,1.766855239868164 +10,0,2.680746555328369 +12,0,2.835645914077759 +14,0,2.7887144088745117 +16,0,3.0446810722351074 diff --git a/results/kernels-mpi/kernels_native_sparse.csv b/results/kernels-mpi/kernels_native_sparse.csv old mode 100755 new mode 100644 index 1bbbda7..22738d0 --- a/results/kernels-mpi/kernels_native_sparse.csv +++ b/results/kernels-mpi/kernels_native_sparse.csv @@ -1,21 +1,5 @@ WorldSize,Run,ActualTime -2,0,14.524915933609009 -4,0,9.02392315864563 -8,0,10.741777420043945 -16,0,31.540650844573975 -2,1,14.061089038848877 -4,1,9.269188404083252 -8,1,10.398407936096191 -16,1,36.188287019729614 -2,2,14.066649436950684 -4,2,8.995222806930542 -8,2,10.35243558883667 -16,2,12.227359533309937 -2,3,14.171435117721558 -4,3,9.047401428222656 -8,3,10.570420742034912 -16,3,12.347669124603271 -2,4,14.185197114944458 -4,4,8.884148120880127 -8,4,10.396169662475586 -16,4,36.883479595184326 +2,0,13.307878494262695 +4,0,8.55131196975708 +8,0,10.292033672332764 +16,0,15.686997175216675 diff --git a/results/kernels-mpi/kernels_native_stencil.csv b/results/kernels-mpi/kernels_native_stencil.csv old mode 100755 new mode 100644 index e2e0670..ce49fcd --- a/results/kernels-mpi/kernels_native_stencil.csv +++ b/results/kernels-mpi/kernels_native_stencil.csv @@ -1,41 +1,9 @@ WorldSize,Run,ActualTime -2,0,17.950014114379883 -4,0,10.292688369750977 -6,0,12.9479079246521 -8,0,12.045936822891235 -10,0,11.777157545089722 -12,0,11.92081332206726 -14,0,11.86931300163269 -16,0,11.799824714660645 -2,1,17.989519357681274 -4,1,10.237369537353516 -6,1,12.907056093215942 -8,1,12.199209213256836 -10,1,11.709601402282715 -12,1,12.070431232452393 -14,1,10.396161794662476 -16,1,11.668048858642578 -2,2,17.878674268722534 -4,2,10.290180921554565 -6,2,13.326467990875244 -8,2,12.26327657699585 -10,2,11.687624454498291 -12,2,11.423378944396973 -14,2,10.90947675704956 -16,2,11.649436712265015 -2,3,18.052199602127075 -4,3,10.284363985061646 -6,3,12.928906202316284 -8,3,12.500142574310303 -10,3,11.51399564743042 -12,3,11.42465090751648 -14,3,11.132980346679688 -16,3,12.068653583526611 -2,4,17.936007976531982 -4,4,10.213274478912354 -6,4,12.915429830551147 -8,4,11.761768579483032 -10,4,11.291627645492554 -12,4,11.778459787368774 -14,4,10.494813919067383 -16,4,12.487107038497925 +2,0,17.08833932876587 +4,0,9.923938035964966 +6,0,13.016123533248901 +8,0,11.961041450500488 +10,0,13.063498735427856 +12,0,14.951888799667358 +14,0,14.003237962722778 +16,0,14.38931679725647 diff --git a/results/kernels-mpi/kernels_native_transpose.csv b/results/kernels-mpi/kernels_native_transpose.csv old mode 100755 new mode 100644 index 88c7bcb..4c851b9 --- a/results/kernels-mpi/kernels_native_transpose.csv +++ b/results/kernels-mpi/kernels_native_transpose.csv @@ -1,41 +1,9 @@ WorldSize,Run,ActualTime -2,0,5.06306004524231 -4,0,2.742102861404419 -6,0,2.8263349533081055 -8,0,2.7286407947540283 -10,0,5.68834662437439 -12,0,5.895431995391846 -14,0,5.997303009033203 -16,0,7.568700551986694 -2,1,4.815793514251709 -4,1,2.8279168605804443 -6,1,2.8087923526763916 -8,1,2.544917583465576 -10,1,5.357943296432495 -12,1,5.9433653354644775 -14,1,6.439666748046875 -16,1,7.5846569538116455 -2,2,4.870222091674805 -4,2,2.8053648471832275 -6,2,2.9146316051483154 -8,2,2.6600706577301025 -10,2,5.780741214752197 -12,2,5.965420722961426 -14,2,6.76208758354187 -16,2,7.517779111862183 -2,3,4.909365892410278 -4,3,2.8190712928771973 -6,3,2.8729705810546875 -8,3,2.752438545227051 -10,3,5.8181586265563965 -12,3,6.0327372550964355 -14,3,6.223717927932739 -16,3,7.460334300994873 -2,4,4.90281867980957 -4,4,2.795665979385376 -6,4,2.900256872177124 -8,4,2.7458693981170654 -10,4,5.834019660949707 -12,4,5.943347692489624 -14,4,6.297256708145142 -16,4,7.490770578384399 +2,0,4.377249717712402 +4,0,2.6716206073760986 +6,0,2.6921401023864746 +8,0,2.63102126121521 +10,0,7.199781894683838 +12,0,7.608505725860596 +14,0,7.959661960601807 +16,0,9.292933940887451 diff --git a/results/kernels-omp/openmp_dgemm_granny.csv b/results/kernels-omp/openmp_dgemm_granny.csv old mode 100755 new mode 100644 index d3231c3..4c86b79 --- a/results/kernels-omp/openmp_dgemm_granny.csv +++ b/results/kernels-omp/openmp_dgemm_granny.csv @@ -1,41 +1,9 @@ NumThreads,Run,ExecTimeSecs -1,0,467.302 -1,1,464.967 -1,2,465.363 -1,3,466.04 -1,4,477.056 -2,0,232.556 -2,1,240.458 -2,2,249.738 -2,3,238.388 -2,4,232.342 -3,0,166.951 -3,1,160.208 -3,2,160.227 -3,3,160.396 -3,4,160.345 -4,0,120.886 -4,1,118.926 -4,2,124.828 -4,3,118.896 -4,4,118.426 -5,0,154.862 -5,1,153.478 -5,2,154.009 -5,3,153.693 -5,4,153.539 -6,0,134.75 -6,1,134.432 -6,2,135.319 -6,3,134.067 -6,4,135.806 -7,0,144.396 -7,1,144.158 -7,2,143.875 -7,3,143.864 -7,4,145.247 -8,0,152.74 -8,1,152.629 -8,2,152.565 -8,3,152.552 -8,4,152.733 +1,0,468.086 +2,0,234.256 +3,0,161.25 +4,0,119.553 +5,0,155.284 +6,0,136.502 +7,0,145.845 +8,0,152.89 diff --git a/results/kernels-omp/openmp_dgemm_native.csv b/results/kernels-omp/openmp_dgemm_native.csv old mode 100755 new mode 100644 index f84fd73..202bc46 --- a/results/kernels-omp/openmp_dgemm_native.csv +++ b/results/kernels-omp/openmp_dgemm_native.csv @@ -1,41 +1,9 @@ NumThreads,Run,ExecTimeSecs -1,0,257.0 -2,0,129.25 -3,0,89.14 -4,0,65.7 -5,0,96.61 -6,0,87.38 -7,0,92.02 -8,0,81.01 -1,1,260.67 -2,1,128.1 -3,1,88.2 -4,1,66.77 -5,1,96.24 -6,1,88.15 -7,1,91.97 -8,1,80.57 -1,2,260.28 -2,2,130.94 -3,2,88.18 -4,2,66.21 -5,2,96.0 -6,2,86.24 -7,2,92.35 -8,2,80.64 -1,3,260.55 -2,3,128.26 -3,3,88.98 -4,3,65.99 -5,3,96.8 -6,3,86.95 -7,3,91.55 -8,3,80.84 -1,4,255.42 -2,4,127.91 -3,4,88.54 -4,4,66.46 -5,4,96.93 -6,4,86.41 -7,4,92.14 -8,4,80.8 +1,0,254.51 +2,0,130.11 +3,0,88.07 +4,0,65.6 +5,0,96.16 +6,0,86.68 +7,0,92.63 +8,0,80.89 diff --git a/results/kernels-omp/openmp_nstream_granny.csv b/results/kernels-omp/openmp_nstream_granny.csv old mode 100755 new mode 100644 index eb69435..43f5d3b --- a/results/kernels-omp/openmp_nstream_granny.csv +++ b/results/kernels-omp/openmp_nstream_granny.csv @@ -1,41 +1,9 @@ NumThreads,Run,ExecTimeSecs -1,0,78.3 -1,1,77.626 -1,2,77.274 -1,3,79.512 -1,4,79.214 -2,0,42.199 -2,1,42.067 -2,2,42.176 -2,3,42.083 -2,4,42.007 -3,0,30.345 -3,1,30.442 -3,2,30.576 -3,3,30.164 -3,4,30.441 -4,0,25.226 -4,1,25.379 -4,2,25.006 -4,3,25.094 -4,4,25.006 -5,0,28.428 -5,1,28.596 -5,2,28.5 -5,3,28.465 -5,4,28.451 -6,0,24.839 -6,1,24.849 -6,2,24.829 -6,3,24.765 -6,4,24.822 -7,0,22.08 -7,1,22.173 -7,2,22.176 -7,3,22.227 -7,4,22.13 -8,0,20.75 -8,1,20.748 -8,2,20.718 -8,3,20.709 -8,4,20.647 +1,0,80.698 +2,0,44.044 +3,0,32.328 +4,0,28.575 +5,0,29.891 +6,0,25.768 +7,0,22.837 +8,0,21.227 diff --git a/results/kernels-omp/openmp_nstream_native.csv b/results/kernels-omp/openmp_nstream_native.csv old mode 100755 new mode 100644 index abcc57d..d5203a3 --- a/results/kernels-omp/openmp_nstream_native.csv +++ b/results/kernels-omp/openmp_nstream_native.csv @@ -1,41 +1,9 @@ NumThreads,Run,ExecTimeSecs -1,0,82.02 -2,0,43.61 -3,0,32.13 -4,0,25.67 -5,0,30.72 -6,0,26.61 -7,0,23.57 -8,0,22.19 -1,1,80.97 -2,1,43.16 -3,1,31.39 -4,1,25.4 -5,1,30.18 -6,1,25.83 -7,1,23.13 -8,1,21.8 -1,2,78.8 -2,2,42.62 -3,2,30.34 -4,2,25.27 -5,2,29.02 -6,2,25.67 -7,2,23.1 -8,2,21.44 -1,3,81.75 -2,3,42.09 -3,3,30.74 -4,3,25.2 -5,3,30.06 -6,3,26.37 -7,3,23.88 -8,3,22.38 -1,4,80.03 -2,4,42.29 -3,4,30.87 -4,4,25.26 -5,4,30.56 -6,4,26.05 -7,4,24.85 -8,4,22.65 +1,0,80.71 +2,0,43.36 +3,0,31.49 +4,0,25.83 +5,0,31.0 +6,0,25.98 +7,0,23.64 +8,0,22.35 diff --git a/results/kernels-omp/openmp_p2p_granny.csv b/results/kernels-omp/openmp_p2p_granny.csv old mode 100755 new mode 100644 index 7e34bc2..db6b962 --- a/results/kernels-omp/openmp_p2p_granny.csv +++ b/results/kernels-omp/openmp_p2p_granny.csv @@ -1,41 +1,9 @@ NumThreads,Run,ExecTimeSecs -1,0,46.658 -1,1,46.791 -1,2,46.612 -1,3,46.64 -1,4,46.683 -2,0,23.781 -2,1,23.765 -2,2,23.782 -2,3,23.842 -2,4,23.776 -3,0,16.054 -3,1,16.075 -3,2,16.165 -3,3,16.085 -3,4,16.074 -4,0,12.215 -4,1,12.197 -4,2,12.192 -4,3,12.206 -4,4,12.201 -5,0,10.168 -5,1,9.914 -5,2,10.018 -5,3,9.954 -5,4,9.962 -6,0,8.637 -6,1,8.662 -6,2,8.721 -6,3,8.749 -6,4,8.722 -7,0,7.718 -7,1,7.658 -7,2,7.638 -7,3,7.613 -7,4,7.814 -8,0,7.251 -8,1,7.39 -8,2,7.417 -8,3,7.485 -8,4,7.344 +1,0,47.031 +2,0,23.829 +3,0,16.125 +4,0,12.254 +5,0,9.967 +6,0,8.794 +7,0,7.839 +8,0,7.408 diff --git a/results/kernels-omp/openmp_p2p_native.csv b/results/kernels-omp/openmp_p2p_native.csv old mode 100755 new mode 100644 index 94a5e92..04ffcf0 --- a/results/kernels-omp/openmp_p2p_native.csv +++ b/results/kernels-omp/openmp_p2p_native.csv @@ -1,41 +1,9 @@ NumThreads,Run,ExecTimeSecs -1,0,47.48 -2,0,24.65 -3,0,16.89 -4,0,13.09 -5,0,10.97 -6,0,9.54 -7,0,8.59 -8,0,8.12 -1,1,47.5 -2,1,24.69 -3,1,16.86 -4,1,13.02 -5,1,10.85 -6,1,9.52 -7,1,8.57 -8,1,8.13 -1,2,47.5 -2,2,24.68 -3,2,16.89 -4,2,13.0 -5,2,10.81 -6,2,9.41 -7,2,8.6 -8,2,8.12 -1,3,47.49 -2,3,24.65 -3,3,16.87 -4,3,13.37 -5,3,11.49 -6,3,9.37 -7,3,8.69 -8,3,8.08 -1,4,47.47 -2,4,24.66 -3,4,16.9 -4,4,13.05 -5,4,10.83 -6,4,9.38 -7,4,8.57 -8,4,8.27 +1,0,48.4 +2,0,25.25 +3,0,17.43 +4,0,14.48 +5,0,12.53 +6,0,10.72 +7,0,9.88 +8,0,8.9 diff --git a/results/kernels-omp/openmp_reduce_granny.csv b/results/kernels-omp/openmp_reduce_granny.csv old mode 100755 new mode 100644 index 62fb50d..9bcb5a7 --- a/results/kernels-omp/openmp_reduce_granny.csv +++ b/results/kernels-omp/openmp_reduce_granny.csv @@ -1,41 +1,9 @@ NumThreads,Run,ExecTimeSecs -1,0,5.159 -1,1,4.992 -1,2,5.137 -1,3,5.105 -1,4,4.998 -2,0,7.878 -2,1,8.11 -2,2,7.666 -2,3,7.751 -2,4,8.029 -3,0,10.509 -3,1,10.48 -3,2,10.605 -3,3,10.633 -3,4,10.613 -4,0,11.671 -4,1,11.81 -4,2,11.871 -4,3,11.865 -4,4,11.787 -5,0,14.849 -5,1,14.473 -5,2,14.87 -5,3,15.312 -5,4,15.031 -6,0,16.166 -6,1,16.531 -6,2,16.706 -6,3,16.437 -6,4,16.421 -7,0,17.66 -7,1,17.646 -7,2,17.672 -7,3,17.497 -7,4,17.595 -8,0,18.478 -8,1,18.681 -8,2,18.491 -8,3,18.536 -8,4,18.764 +1,0,5.247 +2,0,8.381 +3,0,10.701 +4,0,12.2 +5,0,15.005 +6,0,16.62 +7,0,18.98 +8,0,21.232 diff --git a/results/kernels-omp/openmp_reduce_native.csv b/results/kernels-omp/openmp_reduce_native.csv old mode 100755 new mode 100644 index 1d91b7d..c4b2d03 --- a/results/kernels-omp/openmp_reduce_native.csv +++ b/results/kernels-omp/openmp_reduce_native.csv @@ -1,41 +1,9 @@ NumThreads,Run,ExecTimeSecs -1,0,6.3 -2,0,10.22 -3,0,12.79 -4,0,11.99 -5,0,17.71 -6,0,17.49 -7,0,20.13 -8,0,20.23 -1,1,6.42 -2,1,8.68 -3,1,11.27 -4,1,11.81 -5,1,14.66 -6,1,18.03 -7,1,19.68 -8,1,20.33 -1,2,6.01 -2,2,8.5 -3,2,11.04 -4,2,11.83 -5,2,14.47 -6,2,17.62 -7,2,19.32 -8,2,20.15 -1,3,5.97 -2,3,8.56 -3,3,11.04 -4,3,11.82 -5,3,14.93 -6,3,18.86 -7,3,20.91 -8,3,22.06 -1,4,6.18 -2,4,8.56 -3,4,10.98 -4,4,11.88 -5,4,14.76 -6,4,17.38 -7,4,19.15 -8,4,19.16 +1,0,6.02 +2,0,8.56 +3,0,12.6 +4,0,14.05 +5,0,19.85 +6,0,17.52 +7,0,19.27 +8,0,20.07 diff --git a/results/kernels-omp/openmp_sparse_granny.csv b/results/kernels-omp/openmp_sparse_granny.csv old mode 100755 new mode 100644 index 44de297..ca0b205 --- a/results/kernels-omp/openmp_sparse_granny.csv +++ b/results/kernels-omp/openmp_sparse_granny.csv @@ -1,41 +1,9 @@ NumThreads,Run,ExecTimeSecs -1,0,184.536 -1,1,189.332 -1,2,195.222 -1,3,193.087 -1,4,194.758 -2,0,95.398 -2,1,95.422 -2,2,93.84 -2,3,92.897 -2,4,89.968 -3,0,62.339 -3,1,62.638 -3,2,62.371 -3,3,62.946 -3,4,62.077 -4,0,48.573 -4,1,46.507 -4,2,49.072 -4,3,49.043 -4,4,48.349 -5,0,60.82 -5,1,60.852 -5,2,59.442 -5,3,62.715 -5,4,61.494 -6,0,54.497 -6,1,53.623 -6,2,54.644 -6,3,57.133 -6,4,54.955 -7,0,51.212 -7,1,51.225 -7,2,51.835 -7,3,51.425 -7,4,49.159 -8,0,44.213 -8,1,42.235 -8,2,41.755 -8,3,44.634 -8,4,44.354 +1,0,194.393 +2,0,94.744 +3,0,63.989 +4,0,51.368 +5,0,64.165 +6,0,55.746 +7,0,52.574 +8,0,44.712 diff --git a/results/kernels-omp/openmp_sparse_native.csv b/results/kernels-omp/openmp_sparse_native.csv old mode 100755 new mode 100644 index 578ee29..17bef7b --- a/results/kernels-omp/openmp_sparse_native.csv +++ b/results/kernels-omp/openmp_sparse_native.csv @@ -1,41 +1,9 @@ NumThreads,Run,ExecTimeSecs -1,0,89.87 -2,0,96.24 -3,0,62.43 -4,0,49.68 -5,0,63.35 -6,0,52.71 -7,0,49.38 -8,0,42.73 -1,1,188.58 -2,1,87.09 -3,1,60.26 -4,1,48.0 -5,1,62.51 -6,1,53.29 -7,1,49.28 -8,1,40.0 -1,2,192.32 -2,2,90.86 -3,2,62.83 -4,2,49.1 -5,2,63.41 -6,2,55.95 -7,2,50.28 -8,2,42.13 -1,3,183.06 -2,3,91.37 -3,3,64.63 -4,3,45.48 -5,3,59.29 -6,3,53.56 -7,3,48.5 -8,3,40.34 -1,4,183.36 -2,4,89.56 -3,4,62.5 -4,4,47.28 -5,4,65.42 -6,4,51.41 -7,4,49.98 -8,4,45.85 +1,0,193.16 +2,0,91.03 +3,0,62.92 +4,0,47.7 +5,0,62.31 +6,0,52.28 +7,0,47.86 +8,0,41.72 diff --git a/results/lammps/lammps_granny_compute.csv b/results/lammps/lammps_granny_compute.csv old mode 100755 new mode 100644 index 015f8a1..692ab83 --- a/results/lammps/lammps_granny_compute.csv +++ b/results/lammps/lammps_granny_compute.csv @@ -1,46 +1,16 @@ WorldSize,Run,Time -2,0,154.20 -2,1,154.33 -2,2,154.18 -3,0,105.80 -3,1,104.69 -3,2,104.16 -4,0,79.16 -4,1,79.18 -4,2,79.10 -5,0,86.73 -5,1,86.95 -5,2,87.56 -6,0,74.48 -6,1,74.32 -6,2,74.35 -7,0,69.78 -7,1,69.56 -7,2,69.65 -8,0,62.24 -8,1,62.66 -8,2,62.25 -9,0,54.68 -9,1,54.79 -9,2,54.68 -10,0,50.58 -10,1,50.12 -10,2,50.25 -11,0,45.43 -11,1,45.30 -11,2,45.33 -12,0,42.35 -12,1,42.09 -12,2,42.39 -13,0,40.77 -13,1,41.37 -13,2,42.19 -14,0,38.74 -14,1,38.62 -14,2,38.40 -15,0,35.91 -15,1,34.45 -15,2,34.44 -16,0,33.20 -16,1,33.25 -16,2,33.10 +2,0,152.96 +3,0,104.91 +4,0,80.33 +5,0,87.46 +6,0,75.29 +7,0,70.06 +8,0,63.22 +9,0,74.74 +10,0,70.91 +11,0,63.13 +12,0,66.42 +13,0,64.05 +14,0,64.91 +15,0,65.66 +16,0,66.11 diff --git a/results/lammps/lammps_granny_network.csv b/results/lammps/lammps_granny_network.csv old mode 100755 new mode 100644 index 01d771d..6879e0d --- a/results/lammps/lammps_granny_network.csv +++ b/results/lammps/lammps_granny_network.csv @@ -1,46 +1,6 @@ WorldSize,Run,Time -2,0,152.91 -2,1,153.02 -2,2,152.84 -3,0,104.87 -3,1,104.89 -3,2,104.88 -4,0,80.08 -4,1,81.13 -4,2,80.13 -5,0,89.88 -5,1,90.54 -5,2,90.18 -6,0,78.32 -6,1,77.97 -6,2,78.05 -7,0,73.86 -7,1,73.84 -7,2,73.93 -8,0,67.68 -8,1,67.46 -8,2,67.60 -9,0,75.92 -9,1,76.42 -9,2,75.47 -10,0,76.71 -10,1,76.14 -10,2,76.63 -11,0,84.14 -11,1,83.91 -11,2,83.84 -12,0,93.51 -12,1,93.87 -12,2,93.18 -13,0,105.23 -13,1,106.09 -13,2,105.84 -14,0,114.37 -14,1,115.00 -14,2,115.84 -15,0,125.84 -15,1,125.12 -15,2,126.61 -16,0,142.10 -16,1,142.68 -16,2,138.43 +2,0,153.37 +3,0,105.62 +4,0,81.49 +5,0,90.55 +6,0,78.91 diff --git a/results/lammps/lammps_native_compute.csv b/results/lammps/lammps_native_compute.csv old mode 100755 new mode 100644 index d6edad9..fe655a2 --- a/results/lammps/lammps_native_compute.csv +++ b/results/lammps/lammps_native_compute.csv @@ -1,16 +1,16 @@ WorldSize,Run,Time -2,0,135.81 -3,0,92.38 -4,0,71.78 -5,0,91.44 -6,0,75.39 -7,0,67.51 -8,0,59.15 -9,0,52.57 -10,0,50.69 -11,0,44.60 -12,0,41.13 -13,0,39.96 -14,0,36.33 -15,0,34.36 -16,0,32.97 +2,0,138.46 +3,0,93.53 +4,0,72.82 +5,0,90.60 +6,0,76.50 +7,0,67.01 +8,0,59.40 +9,0,52.41 +10,0,49.93 +11,0,43.83 +12,0,40.84 +13,0,40.23 +14,0,35.54 +15,0,33.12 +16,0,31.58 diff --git a/results/lammps/lammps_native_network.csv b/results/lammps/lammps_native_network.csv old mode 100755 new mode 100644 index 6d1dcd2..273adb8 --- a/results/lammps/lammps_native_network.csv +++ b/results/lammps/lammps_native_network.csv @@ -1,16 +1,16 @@ WorldSize,Run,Time -2,0,137.71 -3,0,92.97 -4,0,73.77 -5,0,93.57 -6,0,81.61 -7,0,71.17 -8,0,64.45 -9,0,89.75 -10,0,90.79 -11,0,85.16 -12,0,93.25 -13,0,105.13 -14,0,114.31 -15,0,125.87 -16,0,136.95 +2,0,30.92 +3,0,8.49 +4,0,185.20 +5,0,92.91 +6,0,80.99 +7,0,70.54 +8,0,63.62 +9,0,77.15 +10,0,80.71 +11,0,83.39 +12,0,92.05 +13,0,104.10 +14,0,113.52 +15,0,124.00 +16,0,137.51 diff --git a/results/makespan/makespan_exec-task-info_batch_16vms_5tpusr_mpi-evict_50_8.csv b/results/makespan/makespan_exec-task-info_batch_16vms_5tpusr_mpi-evict_50_8.csv new file mode 100644 index 0000000..0174b98 --- /dev/null +++ b/results/makespan/makespan_exec-task-info_batch_16vms_5tpusr_mpi-evict_50_8.csv @@ -0,0 +1 @@ +TaskId,TimeExecuting,TimeInQueue,StartTimeStamp,EndTimeStamp diff --git a/results/makespan/makespan_idle-cores_batch_16vms_5tpusr_mpi-evict_50_8.csv b/results/makespan/makespan_idle-cores_batch_16vms_5tpusr_mpi-evict_50_8.csv new file mode 100644 index 0000000..2ac8c14 --- /dev/null +++ b/results/makespan/makespan_idle-cores_batch_16vms_5tpusr_mpi-evict_50_8.csv @@ -0,0 +1 @@ +TimeStampSecs,NumIdleCores diff --git a/results/makespan/makespan_makespan_batch_16vms_5tpusr_mpi-evict_50_8.csv b/results/makespan/makespan_makespan_batch_16vms_5tpusr_mpi-evict_50_8.csv new file mode 100644 index 0000000..f48a7e1 --- /dev/null +++ b/results/makespan/makespan_makespan_batch_16vms_5tpusr_mpi-evict_50_8.csv @@ -0,0 +1 @@ +MakespanSecs diff --git a/results/makespan/makespan_sched-info_batch_16vms_5tpusr_mpi-evict_50_8.csv b/results/makespan/makespan_sched-info_batch_16vms_5tpusr_mpi-evict_50_8.csv new file mode 100644 index 0000000..f65caf7 --- /dev/null +++ b/results/makespan/makespan_sched-info_batch_16vms_5tpusr_mpi-evict_50_8.csv @@ -0,0 +1,12 @@ +TaskId,SchedulingDecision +10.244.3.3,aks-nodepool1-10816412-vmss000007,10.244.16.2,aks-nodepool1-10816412-vmss00000d,10.244.5.2,aks-nodepool1-10816412-vmss000005,10.244.13.2,aks-nodepool1-10816412-vmss00000b,10.244.9.2,aks-nodepool1-10816412-vmss000001,10.244.2.3,aks-nodepool1-10816412-vmss000002,10.244.10.2,aks-nodepool1-10816412-vmss00000a,10.244.1.3,aks-nodepool1-10816412-vmss000003,10.244.8.2,aks-nodepool1-10816412-vmss000004,10.244.0.4,aks-nodepool1-10816412-vmss000009,10.244.12.2,aks-nodepool1-10816412-vmss00000g,10.244.14.2,aks-nodepool1-10816412-vmss000006,10.244.11.2,aks-nodepool1-10816412-vmss00000c,10.244.15.2,aks-nodepool1-10816412-vmss000008,10.244.6.2,aks-nodepool1-10816412-vmss00000e,10.244.7.2,aks-nodepool1-10816412-vmss000000 +0,10.244.3.3,8,10.244.16.2,8 +1,10.244.5.2,8,10.244.13.2,8 +2,10.244.9.2,8 +3,10.244.2.3,8,10.244.10.2,8 +4,10.244.1.3,8 +5,10.244.8.2,8,10.244.0.4,8 +6,10.244.12.2,8,10.244.14.2,8 +7,10.244.11.2,8 +8,10.244.15.2,8 +9,10.244.6.2,8,10.244.7.2,8 diff --git a/results/migration/migration_all-to-all.csv b/results/migration/migration_all-to-all.csv old mode 100755 new mode 100644 index d506782..b005676 --- a/results/migration/migration_all-to-all.csv +++ b/results/migration/migration_all-to-all.csv @@ -1,7 +1,7 @@ WorldSize,Check,Run,Time -8,0,0,5.04 -8,2,0,11.90 -8,4,0,18.00 -8,6,0,25.85 -8,8,0,32.97 -8,10,0,38.57 +8,0,0,7.27 +8,2,0,15.06 +8,4,0,21.56 +8,6,0,30.87 +8,8,0,38.59 +8,10,0,41.99 diff --git a/results/migration/migration_compute.csv b/results/migration/migration_compute.csv new file mode 100644 index 0000000..e799935 --- /dev/null +++ b/results/migration/migration_compute.csv @@ -0,0 +1,7 @@ +WorldSize,Check,Run,Time +8,0,0,105.56 +8,2,0,91.81 +8,4,0,78.57 +8,6,0,70.38 +8,8,0,70.64 +8,10,0,70.45 diff --git a/results/migration/migration_network.csv b/results/migration/migration_network.csv new file mode 100644 index 0000000..4953b1b --- /dev/null +++ b/results/migration/migration_network.csv @@ -0,0 +1,7 @@ +WorldSize,Check,Run,Time +8,0,0,115.47 +8,2,0,114.57 +8,4,0,114.53 +8,6,0,112.65 +8,8,0,112.70 +8,10,0,114.03 diff --git a/results/migration/migration_very-network.csv b/results/migration/migration_very-network.csv old mode 100755 new mode 100644 index 446b71c..e54e154 --- a/results/migration/migration_very-network.csv +++ b/results/migration/migration_very-network.csv @@ -1,7 +1,7 @@ WorldSize,Check,Run,Time -8,0,0,114.18 -8,2,0,149.84 -8,4,0,187.40 -8,6,0,201.21 -8,8,0,200.21 -8,10,0,198.02 +8,0,0,135.84 +8,2,0,171.25 +8,4,0,198.62 +8,6,0,224.94 +8,8,0,220.72 +8,10,0,228.35 diff --git a/results/polybench/polybench_native_poly_2mm.csv b/results/polybench/polybench_native_poly_2mm.csv new file mode 100644 index 0000000..cae4f4a --- /dev/null +++ b/results/polybench/polybench_native_poly_2mm.csv @@ -0,0 +1,4 @@ +Run,Time +0,1.92400 +1,1.90600 +2,1.90700 diff --git a/results/polybench/polybench_native_poly_3mm.csv b/results/polybench/polybench_native_poly_3mm.csv new file mode 100644 index 0000000..50c2d8b --- /dev/null +++ b/results/polybench/polybench_native_poly_3mm.csv @@ -0,0 +1,4 @@ +Run,Time +0,3.08100 +1,3.08100 +2,3.07700 diff --git a/results/polybench/polybench_native_poly_adi.csv b/results/polybench/polybench_native_poly_adi.csv new file mode 100644 index 0000000..347e8bc --- /dev/null +++ b/results/polybench/polybench_native_poly_adi.csv @@ -0,0 +1,4 @@ +Run,Time +0,7.87100 +1,7.88000 +2,7.86600 diff --git a/results/polybench/polybench_native_poly_atax.csv b/results/polybench/polybench_native_poly_atax.csv new file mode 100644 index 0000000..8fc7c89 --- /dev/null +++ b/results/polybench/polybench_native_poly_atax.csv @@ -0,0 +1,4 @@ +Run,Time +0,0.01100 +1,0.01100 +2,0.01100 diff --git a/results/polybench/polybench_native_poly_bicg.csv b/results/polybench/polybench_native_poly_bicg.csv new file mode 100644 index 0000000..011ab47 --- /dev/null +++ b/results/polybench/polybench_native_poly_bicg.csv @@ -0,0 +1,4 @@ +Run,Time +0,0.01700 +1,0.01700 +2,0.01600 diff --git a/results/polybench/polybench_native_poly_cholesky.csv b/results/polybench/polybench_native_poly_cholesky.csv new file mode 100644 index 0000000..6421281 --- /dev/null +++ b/results/polybench/polybench_native_poly_cholesky.csv @@ -0,0 +1,4 @@ +Run,Time +0,5.93400 +1,5.92000 +2,5.94200 diff --git a/results/polybench/polybench_native_poly_correlation.csv b/results/polybench/polybench_native_poly_correlation.csv new file mode 100644 index 0000000..8d7c689 --- /dev/null +++ b/results/polybench/polybench_native_poly_correlation.csv @@ -0,0 +1,4 @@ +Run,Time +0,1.17900 +1,1.19900 +2,1.19700 diff --git a/results/polybench/polybench_native_poly_covariance.csv b/results/polybench/polybench_native_poly_covariance.csv new file mode 100644 index 0000000..c25344e --- /dev/null +++ b/results/polybench/polybench_native_poly_covariance.csv @@ -0,0 +1,4 @@ +Run,Time +0,1.19200 +1,1.18100 +2,1.20000 diff --git a/results/polybench/polybench_native_poly_deriche.csv b/results/polybench/polybench_native_poly_deriche.csv new file mode 100644 index 0000000..8f4fec2 --- /dev/null +++ b/results/polybench/polybench_native_poly_deriche.csv @@ -0,0 +1,4 @@ +Run,Time +0,0.18700 +1,0.18600 +2,0.18600 diff --git a/results/polybench/polybench_native_poly_doitgen.csv b/results/polybench/polybench_native_poly_doitgen.csv new file mode 100644 index 0000000..96a4534 --- /dev/null +++ b/results/polybench/polybench_native_poly_doitgen.csv @@ -0,0 +1,4 @@ +Run,Time +0,0.53800 +1,0.53900 +2,0.53900 diff --git a/results/polybench/polybench_native_poly_durbin.csv b/results/polybench/polybench_native_poly_durbin.csv new file mode 100644 index 0000000..e4a3a9f --- /dev/null +++ b/results/polybench/polybench_native_poly_durbin.csv @@ -0,0 +1,4 @@ +Run,Time +0,0.00300 +1,0.00300 +2,0.00300 diff --git a/results/polybench/polybench_native_poly_fdtd-2d.csv b/results/polybench/polybench_native_poly_fdtd-2d.csv new file mode 100644 index 0000000..8953aa3 --- /dev/null +++ b/results/polybench/polybench_native_poly_fdtd-2d.csv @@ -0,0 +1,4 @@ +Run,Time +0,0.60500 +1,0.53700 +2,0.62600 diff --git a/results/polybench/polybench_native_poly_floyd-warshall.csv b/results/polybench/polybench_native_poly_floyd-warshall.csv new file mode 100644 index 0000000..f3eb819 --- /dev/null +++ b/results/polybench/polybench_native_poly_floyd-warshall.csv @@ -0,0 +1,4 @@ +Run,Time +0,10.88300 +1,10.90200 +2,10.83200 diff --git a/results/polybench/polybench_native_poly_gramschmidt.csv b/results/polybench/polybench_native_poly_gramschmidt.csv new file mode 100644 index 0000000..68549c7 --- /dev/null +++ b/results/polybench/polybench_native_poly_gramschmidt.csv @@ -0,0 +1,4 @@ +Run,Time +0,1.70600 +1,1.70200 +2,1.70300 diff --git a/results/polybench/polybench_native_poly_heat-3d.csv b/results/polybench/polybench_native_poly_heat-3d.csv new file mode 100644 index 0000000..5f4eb0c --- /dev/null +++ b/results/polybench/polybench_native_poly_heat-3d.csv @@ -0,0 +1,4 @@ +Run,Time +0,0.88600 +1,0.88800 +2,0.88000 diff --git a/results/polybench/polybench_native_poly_jacobi-1d.csv b/results/polybench/polybench_native_poly_jacobi-1d.csv new file mode 100644 index 0000000..40f004b --- /dev/null +++ b/results/polybench/polybench_native_poly_jacobi-1d.csv @@ -0,0 +1,4 @@ +Run,Time +0,0.00200 +1,0.00200 +2,0.00200 diff --git a/results/polybench/polybench_native_poly_jacobi-2d.csv b/results/polybench/polybench_native_poly_jacobi-2d.csv new file mode 100644 index 0000000..16775aa --- /dev/null +++ b/results/polybench/polybench_native_poly_jacobi-2d.csv @@ -0,0 +1,4 @@ +Run,Time +0,0.52300 +1,0.49700 +2,0.49600 diff --git a/results/polybench/polybench_native_poly_lu.csv b/results/polybench/polybench_native_poly_lu.csv new file mode 100644 index 0000000..732e839 --- /dev/null +++ b/results/polybench/polybench_native_poly_lu.csv @@ -0,0 +1,4 @@ +Run,Time +0,7.49200 +1,7.49100 +2,7.48800 diff --git a/results/polybench/polybench_native_poly_ludcmp.csv b/results/polybench/polybench_native_poly_ludcmp.csv new file mode 100644 index 0000000..e4974b4 --- /dev/null +++ b/results/polybench/polybench_native_poly_ludcmp.csv @@ -0,0 +1,4 @@ +Run,Time +0,7.44700 +1,7.44300 +2,7.43000 diff --git a/results/polybench/polybench_native_poly_mvt.csv b/results/polybench/polybench_native_poly_mvt.csv new file mode 100644 index 0000000..ceb07d9 --- /dev/null +++ b/results/polybench/polybench_native_poly_mvt.csv @@ -0,0 +1,4 @@ +Run,Time +0,0.01600 +1,0.01600 +2,0.01600 diff --git a/results/polybench/polybench_native_poly_nussinov.csv b/results/polybench/polybench_native_poly_nussinov.csv new file mode 100644 index 0000000..1559a5d --- /dev/null +++ b/results/polybench/polybench_native_poly_nussinov.csv @@ -0,0 +1,4 @@ +Run,Time +0,6.47200 +1,6.47000 +2,6.38400 diff --git a/results/polybench/polybench_native_poly_seidel-2d.csv b/results/polybench/polybench_native_poly_seidel-2d.csv new file mode 100644 index 0000000..0d250fe --- /dev/null +++ b/results/polybench/polybench_native_poly_seidel-2d.csv @@ -0,0 +1,4 @@ +Run,Time +0,20.19300 +1,20.19300 +2,20.19200 diff --git a/results/polybench/polybench_native_poly_trisolv.csv b/results/polybench/polybench_native_poly_trisolv.csv new file mode 100644 index 0000000..e2e0266 --- /dev/null +++ b/results/polybench/polybench_native_poly_trisolv.csv @@ -0,0 +1,4 @@ +Run,Time +0,0.00600 +1,0.00600 +2,0.00600 From aedea1a5b623032c6c42022260655219eaac78b8 Mon Sep 17 00:00:00 2001 From: lg Date: Mon, 3 Mar 2025 13:02:39 +0000 Subject: [PATCH 11/12] remove plots and results --- plots/.gitignore | 1 - plots/elastic/elastic_speedup.png | Bin 18168 -> 0 bytes plots/kernels-mpi/mpi_kernels_slowdown.png | Bin 24076 -> 0 bytes plots/kernels-omp/openmp_kernels_slowdown.png | Bin 20905 -> 0 bytes .../migration/migration_speedup_all-to-all.png | Bin 12274 -> 0 bytes .../migration_speedup_very-network.png | Bin 12291 -> 0 bytes results/.gitignore | 1 - results/elastic/openmp_elastic_granny.csv | 9 --------- results/elastic/openmp_no-elastic_granny.csv | 9 --------- results/kernels-mpi/kernels_granny_nstream.csv | 9 --------- results/kernels-mpi/kernels_granny_p2p.csv | 9 --------- results/kernels-mpi/kernels_granny_reduce.csv | 9 --------- results/kernels-mpi/kernels_granny_sparse.csv | 5 ----- results/kernels-mpi/kernels_granny_stencil.csv | 9 --------- .../kernels-mpi/kernels_granny_transpose.csv | 9 --------- results/kernels-mpi/kernels_native_nstream.csv | 9 --------- results/kernels-mpi/kernels_native_p2p.csv | 9 --------- results/kernels-mpi/kernels_native_reduce.csv | 9 --------- results/kernels-mpi/kernels_native_sparse.csv | 5 ----- results/kernels-mpi/kernels_native_stencil.csv | 9 --------- .../kernels-mpi/kernels_native_transpose.csv | 9 --------- results/kernels-omp/openmp_dgemm_granny.csv | 9 --------- results/kernels-omp/openmp_dgemm_native.csv | 9 --------- results/kernels-omp/openmp_nstream_granny.csv | 9 --------- results/kernels-omp/openmp_nstream_native.csv | 9 --------- results/kernels-omp/openmp_p2p_granny.csv | 9 --------- results/kernels-omp/openmp_p2p_native.csv | 9 --------- results/kernels-omp/openmp_reduce_granny.csv | 9 --------- results/kernels-omp/openmp_reduce_native.csv | 9 --------- results/kernels-omp/openmp_sparse_granny.csv | 9 --------- results/kernels-omp/openmp_sparse_native.csv | 9 --------- results/lammps/lammps_granny_compute.csv | 16 ---------------- results/lammps/lammps_granny_network.csv | 6 ------ results/lammps/lammps_native_compute.csv | 16 ---------------- results/lammps/lammps_native_network.csv | 16 ---------------- ...k-info_batch_16vms_5tpusr_mpi-evict_50_8.csv | 1 - ...-cores_batch_16vms_5tpusr_mpi-evict_50_8.csv | 1 - ...kespan_batch_16vms_5tpusr_mpi-evict_50_8.csv | 1 - ...d-info_batch_16vms_5tpusr_mpi-evict_50_8.csv | 12 ------------ results/migration/migration_all-to-all.csv | 7 ------- results/migration/migration_compute.csv | 7 ------- results/migration/migration_network.csv | 7 ------- results/migration/migration_very-network.csv | 7 ------- results/polybench/polybench_native_poly_2mm.csv | 4 ---- results/polybench/polybench_native_poly_3mm.csv | 4 ---- results/polybench/polybench_native_poly_adi.csv | 4 ---- .../polybench/polybench_native_poly_atax.csv | 4 ---- .../polybench/polybench_native_poly_bicg.csv | 4 ---- .../polybench_native_poly_cholesky.csv | 4 ---- .../polybench_native_poly_correlation.csv | 4 ---- .../polybench_native_poly_covariance.csv | 4 ---- .../polybench/polybench_native_poly_deriche.csv | 4 ---- .../polybench/polybench_native_poly_doitgen.csv | 4 ---- .../polybench/polybench_native_poly_durbin.csv | 4 ---- .../polybench/polybench_native_poly_fdtd-2d.csv | 4 ---- .../polybench_native_poly_floyd-warshall.csv | 4 ---- .../polybench_native_poly_gramschmidt.csv | 4 ---- .../polybench/polybench_native_poly_heat-3d.csv | 4 ---- .../polybench_native_poly_jacobi-1d.csv | 4 ---- .../polybench_native_poly_jacobi-2d.csv | 4 ---- results/polybench/polybench_native_poly_lu.csv | 4 ---- .../polybench/polybench_native_poly_ludcmp.csv | 4 ---- results/polybench/polybench_native_poly_mvt.csv | 4 ---- .../polybench_native_poly_nussinov.csv | 4 ---- .../polybench_native_poly_seidel-2d.csv | 4 ---- .../polybench/polybench_native_poly_trisolv.csv | 4 ---- 66 files changed, 399 deletions(-) delete mode 100644 plots/.gitignore delete mode 100644 plots/elastic/elastic_speedup.png delete mode 100644 plots/kernels-mpi/mpi_kernels_slowdown.png delete mode 100644 plots/kernels-omp/openmp_kernels_slowdown.png delete mode 100644 plots/migration/migration_speedup_all-to-all.png delete mode 100644 plots/migration/migration_speedup_very-network.png delete mode 100644 results/.gitignore delete mode 100644 results/elastic/openmp_elastic_granny.csv delete mode 100644 results/elastic/openmp_no-elastic_granny.csv delete mode 100644 results/kernels-mpi/kernels_granny_nstream.csv delete mode 100644 results/kernels-mpi/kernels_granny_p2p.csv delete mode 100644 results/kernels-mpi/kernels_granny_reduce.csv delete mode 100644 results/kernels-mpi/kernels_granny_sparse.csv delete mode 100644 results/kernels-mpi/kernels_granny_stencil.csv delete mode 100644 results/kernels-mpi/kernels_granny_transpose.csv delete mode 100644 results/kernels-mpi/kernels_native_nstream.csv delete mode 100644 results/kernels-mpi/kernels_native_p2p.csv delete mode 100644 results/kernels-mpi/kernels_native_reduce.csv delete mode 100644 results/kernels-mpi/kernels_native_sparse.csv delete mode 100644 results/kernels-mpi/kernels_native_stencil.csv delete mode 100644 results/kernels-mpi/kernels_native_transpose.csv delete mode 100644 results/kernels-omp/openmp_dgemm_granny.csv delete mode 100644 results/kernels-omp/openmp_dgemm_native.csv delete mode 100644 results/kernels-omp/openmp_nstream_granny.csv delete mode 100644 results/kernels-omp/openmp_nstream_native.csv delete mode 100644 results/kernels-omp/openmp_p2p_granny.csv delete mode 100644 results/kernels-omp/openmp_p2p_native.csv delete mode 100644 results/kernels-omp/openmp_reduce_granny.csv delete mode 100644 results/kernels-omp/openmp_reduce_native.csv delete mode 100644 results/kernels-omp/openmp_sparse_granny.csv delete mode 100644 results/kernels-omp/openmp_sparse_native.csv delete mode 100644 results/lammps/lammps_granny_compute.csv delete mode 100644 results/lammps/lammps_granny_network.csv delete mode 100644 results/lammps/lammps_native_compute.csv delete mode 100644 results/lammps/lammps_native_network.csv delete mode 100644 results/makespan/makespan_exec-task-info_batch_16vms_5tpusr_mpi-evict_50_8.csv delete mode 100644 results/makespan/makespan_idle-cores_batch_16vms_5tpusr_mpi-evict_50_8.csv delete mode 100644 results/makespan/makespan_makespan_batch_16vms_5tpusr_mpi-evict_50_8.csv delete mode 100644 results/makespan/makespan_sched-info_batch_16vms_5tpusr_mpi-evict_50_8.csv delete mode 100644 results/migration/migration_all-to-all.csv delete mode 100644 results/migration/migration_compute.csv delete mode 100644 results/migration/migration_network.csv delete mode 100644 results/migration/migration_very-network.csv delete mode 100644 results/polybench/polybench_native_poly_2mm.csv delete mode 100644 results/polybench/polybench_native_poly_3mm.csv delete mode 100644 results/polybench/polybench_native_poly_adi.csv delete mode 100644 results/polybench/polybench_native_poly_atax.csv delete mode 100644 results/polybench/polybench_native_poly_bicg.csv delete mode 100644 results/polybench/polybench_native_poly_cholesky.csv delete mode 100644 results/polybench/polybench_native_poly_correlation.csv delete mode 100644 results/polybench/polybench_native_poly_covariance.csv delete mode 100644 results/polybench/polybench_native_poly_deriche.csv delete mode 100644 results/polybench/polybench_native_poly_doitgen.csv delete mode 100644 results/polybench/polybench_native_poly_durbin.csv delete mode 100644 results/polybench/polybench_native_poly_fdtd-2d.csv delete mode 100644 results/polybench/polybench_native_poly_floyd-warshall.csv delete mode 100644 results/polybench/polybench_native_poly_gramschmidt.csv delete mode 100644 results/polybench/polybench_native_poly_heat-3d.csv delete mode 100644 results/polybench/polybench_native_poly_jacobi-1d.csv delete mode 100644 results/polybench/polybench_native_poly_jacobi-2d.csv delete mode 100644 results/polybench/polybench_native_poly_lu.csv delete mode 100644 results/polybench/polybench_native_poly_ludcmp.csv delete mode 100644 results/polybench/polybench_native_poly_mvt.csv delete mode 100644 results/polybench/polybench_native_poly_nussinov.csv delete mode 100644 results/polybench/polybench_native_poly_seidel-2d.csv delete mode 100644 results/polybench/polybench_native_poly_trisolv.csv diff --git a/plots/.gitignore b/plots/.gitignore deleted file mode 100644 index 630315c..0000000 --- a/plots/.gitignore +++ /dev/null @@ -1 +0,0 @@ -0.27.0/* diff --git a/plots/elastic/elastic_speedup.png b/plots/elastic/elastic_speedup.png deleted file mode 100644 index 03a86baaa8f18995d0c14f14ffd1a7ae340fdcbf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18168 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 g5IFIT=2ys18CsghX4Qo diff --git a/plots/kernels-mpi/mpi_kernels_slowdown.png b/plots/kernels-mpi/mpi_kernels_slowdown.png deleted file mode 100644 index 6f172a8c3fb4fa48065be586426c8cccaaf80f7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24076 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 diff --git a/plots/kernels-omp/openmp_kernels_slowdown.png b/plots/kernels-omp/openmp_kernels_slowdown.png deleted file mode 100644 index 819539e3b172f311b543ded046e13a1a4b478b4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20905 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 OLPbFnQz>WlIeiD1H5j= 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 Date: Mon, 3 Mar 2025 13:23:51 +0000 Subject: [PATCH 12/12] revert --- .gitignore | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.gitignore b/.gitignore index 1a0a13e..cf96943 100644 --- a/.gitignore +++ b/.gitignore @@ -12,10 +12,6 @@ __pycache__/ venv/ *.egg-info/ -# Plots and results (uncomment once results are stable, and publicly available) -#plots/ -#results/ - # Kubernetes .kube/