| <!DOCTYPE html> | |
| <html> | |
| <!-- | |
| Copyright 2022 The IREE Authors | |
| Licensed under the Apache License v2.0 with LLVM Exceptions. | |
| See https://llvm.org/LICENSE.txt for license information. | |
| SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| --> | |
| <head> | |
| <meta charset="utf-8" /> | |
| <title>IREE Dynamic Web Benchmarks</title> | |
| <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| <link rel="icon" href="./ghost.svg" type="image/svg+xml"> | |
| <style> | |
| body { | |
| padding: 16px; | |
| } | |
| </style> | |
| <!-- https://getbootstrap.com/ for some webpage styling--> | |
| <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous"> | |
| <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script> | |
| <script src="./iree_api.js"></script> | |
| </head> | |
| <body> | |
| <div class="container"> | |
| <h1>IREE Dynamic Web Benchmarks</h1> | |
| <p> | |
| <br><b>Note:</b> Some outputs are logged to the console.</p> | |
| </p> | |
| <!-- TODO: button to run startup benchmarks --> | |
| <!-- TODO: button to run inference benchmarks --> | |
| <!-- TODO: button to run all benchmarks --> | |
| <!-- TODO: UI to set number of iterations --> | |
| </div> | |
| <script> | |
| async function runProgramBenchmarks(programPath, functionName, inputs) { | |
| // Program loading. | |
| // The IREE runtime has already been initialized, so this: | |
| // * issues an XMLHttpRequest for the program data | |
| // * passes the program data in via the WebAssembly heap | |
| // * creates an IREE "runtime session" and loads the program into it | |
| console.log("Running benchmarks for program '" + programPath + | |
| "' and function '" + functionName + "'"); | |
| const startLoadTime = performance.now(); | |
| const program = await ireeLoadProgram(programPath); | |
| const totalLoadTime = performance.now() - startLoadTime; | |
| console.log(" Application load time (including overheads): " + | |
| totalLoadTime.toFixed(3) + "ms"); | |
| // Function calling. | |
| // The runtime is initialized and the program is loaded, so this: | |
| // * passes the inputs in as a string from JS to Wasm | |
| // * parses the inputs string into buffer data | |
| // * invokes the function | |
| // * formats the function outputs into a string and passes that to JS | |
| const startCallTime = performance.now(); | |
| const iterations = 1; | |
| const resultObject = | |
| await ireeCallFunction(program, functionName, inputs, iterations); | |
| const totalCallTime = performance.now() - startCallTime; | |
| console.log(" Application call time (including overheads): " + | |
| totalCallTime.toFixed(3) + "ms"); | |
| } | |
| async function runAllBenchmarks() { | |
| await runProgramBenchmarks("deeplabv3_wasm.vmfb", "main", "1x257x257x3xf32"); | |
| await runProgramBenchmarks("mobile_ssd_v2_float_coco_wasm.vmfb", "main", "1x320x320x3xf32"); | |
| await runProgramBenchmarks("posenet_wasm.vmfb", "main", "1x353x257x3xf32"); | |
| await runProgramBenchmarks("mobilebertsquad_wasm.vmfb", "main", ["1x384xi32", "1x384xi32", "1x384xi32"]); | |
| await runProgramBenchmarks("mobilenet_v2_1.0_224_wasm.vmfb", "main", "1x224x224x3xf32"); | |
| await runProgramBenchmarks("MobileNetV3SmallStaticBatch_wasm.vmfb", "main", "1x224x224x3xf32"); | |
| } | |
| async function main() { | |
| // General runtime initialization. | |
| // The IREE API script has already been loaded, so this: | |
| // * initializes a Web Worker | |
| // * loads the IREE runtime worker script | |
| // * loads the IREE runtime JavaScript bundle (compiled via Emscripten) | |
| // * instantiates the IREE runtime WebAssembly module | |
| // * initializes the IREE runtime (runtime context, HAL devices, etc.) | |
| // * (if threading is enabled) creates worker thread Web Workers | |
| const startInitTime = performance.now(); | |
| await ireeInitializeWorker(); | |
| const totalInitTime = performance.now() - startInitTime; | |
| console.log("IREE runtime initialized after " + totalInitTime.toFixed(3) + "ms"); | |
| await runAllBenchmarks(); | |
| } | |
| console.log("=== Running benchmarks ==="); | |
| main().then(() => { console.log("=== Finished running benchmarks ==="); }) | |
| .catch((error) => { console.error("Error: '" + error + "'"); }); | |
| </script> | |
| </body> | |
| </html> |