<html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>Precompilation · TensorOperations.jl</title><meta name="title" content="Precompilation · TensorOperations.jl"/><meta property="og:title" content="Precompilation · TensorOperations.jl"/><meta property="twitter:title" content="Precompilation · TensorOperations.jl"/><meta name="description" content="Documentation for TensorOperations.jl."/><meta property="og:description" content="Documentation for TensorOperations.jl."/><meta property="twitter:description" content="Documentation for TensorOperations.jl."/><script data-outdated-warner src="../../assets/warner.js"></script><link href="https://cdnjs.cloudflare.com/ajax/libs/lato-font/3.0.0/css/lato-font.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/juliamono/0.050/juliamono.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/fontawesome.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/solid.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/brands.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.8/katex.min.css" rel="stylesheet" type="text/css"/><script>documenterBaseURL="../.."</script><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js" data-main="../../assets/documenter.js"></script><script src="../../search_index.js"></script><script src="../../siteinfo.js"></script><script src="../../../versions.js"></script><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../../assets/themes/catppuccin-mocha.css" data-theme-name="catppuccin-mocha"/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../../assets/themes/catppuccin-macchiato.css" data-theme-name="catppuccin-macchiato"/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../../assets/themes/catppuccin-frappe.css" data-theme-name="catppuccin-frappe"/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../../assets/themes/catppuccin-latte.css" data-theme-name="catppuccin-latte"/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../../assets/themes/documenter-dark.css" data-theme-name="documenter-dark" data-theme-primary-dark/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../../assets/themes/documenter-light.css" data-theme-name="documenter-light" data-theme-primary/><script src="../../assets/themeswap.js"></script></head><body><div id="documenter"><nav class="docs-sidebar"><a class="docs-logo" href="../../"><img src="../../assets/logo.svg" alt="TensorOperations.jl logo"/></a><div class="docs-package-name"><span class="docs-autofit"><a href="../../">TensorOperations.jl</a></span></div><button class="docs-search-query input is-rounded is-small is-clickable my-2 mx-auto py-1 px-2" id="documenter-search-query">Search docs (Ctrl + /)</button><ul class="docs-menu"><li><a class="tocitem" href="../../">Home</a></li><li><span class="tocitem">Manual</span><ul><li><a class="tocitem" href="../indexnotation/">Index notation with macros</a></li><li><a class="tocitem" href="../functions/">Functions</a></li><li><a class="tocitem" href="../interface/">Interface</a></li><li><a class="tocitem" href="../backends/">Backends and Allocators</a></li><li><a class="tocitem" href="../autodiff/">Automatic differentiation</a></li><li><a class="tocitem" href="../implementation/">Implementation</a></li><li class="is-active"><a class="tocitem" href>Precompilation</a><ul class="internal"><li><a class="tocitem" href="#Defaults"><span>Defaults</span></a></li><li><a class="tocitem" href="#Custom-settings"><span>Custom settings</span></a></li></ul></li></ul></li><li><a class="tocitem" href="../../index/">Index</a></li></ul><div class="docs-version-selector field has-addons"><div class="control"><span class="docs-label button is-static is-size-7">Version</span></div><div class="docs-selector control is-expanded"><div class="select is-fullwidth is-size-7"><select id="documenter-version-selector"></select></div></div></div></nav><div class="docs-main"><header class="docs-navbar"><a class="docs-sidebar-button docs-navbar-link fa-solid fa-bars is-hidden-desktop" id="documenter-sidebar-button" href="#"></a><nav class="breadcrumb"><ul class="is-hidden-mobile"><li><a class="is-disabled">Manual</a></li><li class="is-active"><a href>Precompilation</a></li></ul><ul class="is-hidden-tablet"><li class="is-active"><a href>Precompilation</a></li></ul></nav><div class="docs-right"><a class="docs-navbar-link" href="https://github.com/Jutho/TensorOperations.jl" title="View the repository on GitHub"><span class="docs-icon fa-brands"></span><span class="docs-label is-hidden-touch">GitHub</span></a><a class="docs-navbar-link" href="https://github.com/Jutho/TensorOperations.jl/blob/master/docs/src/man/precompilation.md" title="Edit source on GitHub"><span class="docs-icon fa-solid"></span></a><a class="docs-settings-button docs-navbar-link fa-solid fa-gear" id="documenter-settings-button" href="#" title="Settings"></a><a class="docs-article-toggle-button fa-solid fa-chevron-up" id="documenter-article-toggle-button" href="javascript:;" title="Collapse all docstrings"></a></div></header><article class="content" id="documenter-page"><h1 id="Precompilation"><a class="docs-heading-anchor" href="#Precompilation">Precompilation</a><a id="Precompilation-1"></a><a class="docs-heading-anchor-permalink" href="#Precompilation" title="Permalink"></a></h1><p>TensorOperations.jl has some support for precompiling commonly called functions. The guiding philosophy is that often, tensor contractions are (part of) the bottlenecks of typical workflows, and as such we want to maximize performance. As a result, we are choosing to specialize many functions which may lead to a rather large time-to-first-execution (TTFX). In order to mitigate this, some of that work can be moved to precompile-time, avoiding the need to re-compile these specializations for every fresh Julia session.</p><p>Nevertheless, TensorOperations is designed to work with a large variety of input types, and simply enumerating all of these tends to lead to prohibitively large precompilation times, as well as large system images. Therefore, there is some customization possible to tweak the desired level of precompilation, trading in faster precompile times for fast TTFX for a wider range of inputs.</p><div class="admonition is-compat" id="TensorOperations-v5.2.0-ae46ca5937b6ae52"><header class="admonition-header">TensorOperations v5.2.0<a class="admonition-anchor" href="#TensorOperations-v5.2.0-ae46ca5937b6ae52" title="Permalink"></a></header><div class="admonition-body"><p>Precompilation support requires at least TensorOperations v5.2.0.</p></div></div><h2 id="Defaults"><a class="docs-heading-anchor" href="#Defaults">Defaults</a><a id="Defaults-1"></a><a class="docs-heading-anchor-permalink" href="#Defaults" title="Permalink"></a></h2><p>By default, precompilation is disabled, but can be enabled for "tensors" of type <code>Array{T,N}</code>, where <code>T</code> and <code>N</code> range over the following values:</p><ul><li><code>T</code> is either <code>Float64</code> or <code>ComplexF64</code></li><li><code>tensoradd!</code> is precompiled up to <code>N = 5</code></li><li><code>tensortrace!</code> is precompiled up to <code>4</code> free output indices and <code>2</code> pairs of traced indices</li><li><code>tensorcontract!</code> is precompiled up to <code>3</code> free output indices on both inputs, and <code>2</code> contracted indices</li></ul><p>To enable precompilation with these default settings, you can <em>locally</em> change the <code>"precompile_workload"</code> key in the preferences.</p><pre><code class="language-julia hljs">using TensorOperations, Preferences
0 commit comments