CINXE.COM

cuLitho - Accelerate Computational Lithography | NVIDIA Developer

<!DOCTYPE html> <html lang='en' class='h-100'> <head> <meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="csrf-param" content="authenticity_token" /> <meta name="csrf-token" content="GvNn0xBUblvonLHvyaWDjR4JbS2rsur4QGPcsPdbCGDmlTuwxuSaL0vHwFxNqQXN6AjYLLlhCIAlI1qN3G5bnw" /> <meta name="csp-nonce" /> <title>cuLitho - Accelerate Computational Lithography | NVIDIA Developer</title> <meta name="description" content="NVIDIA cuLitho is a library with optimized tools and algorithms for GPU-accelerating computational lithography and manufacturing process of semiconductors."> <meta name="keywords" content="culitho, computational lithography, inverse lithography technology, semiconductor manufacturing, nvidia"> <link rel="canonical" href="https://developer.nvidia.com/culitho"> <link rel="alternate" href="https://developer.nvidia.com/culitho" hreflang="x-default"> <link rel="alternate" href="https://developer.nvidia.com/culitho" hreflang="en-us"> <link rel="alternate" href="https://developer.nvidia.cn/culitho" hreflang="zh-cn"> <meta property="og:site_name" content="NVIDIA Developer"> <meta property="og:title" content="NVIDIA cuLitho"> <meta property="og:description" content="Helps drive silicon scaling, reduce costs, and accelerate technology advancements."> <meta property="og:type" content="website"> <meta property="og:image" content="https://d29g4g2dyqv443.cloudfront.net/sites/default/files/akamai/cuLitho-computational-lithography-1200x630.jpg"> <meta property="og:url" content="https://developer.nvidia.com/culitho"> <meta name="twitter:title" content="NVIDIA cuLitho"> <meta name="twitter:description" content="A library with optimized tools and algorithms for GPU-accelerating computational lithography and manufacturing process of semiconductors."> <meta name="twitter:image" content="https://d29g4g2dyqv443.cloudfront.net/sites/default/files/akamai/cuLitho-computational-lithography-1200x630.jpg"> <meta name="twitter:site" content="@NVIDIA"> <meta name="twitter:card" content="summary_large_image"> <meta name="twitter:creator" content="@NVIDIA"> <meta property="industry" content="HPC / Scientific Computing"> <meta property="interest" content="Models / Libraries / Frameworks"> <link rel="stylesheet" href="https://dirms4qsy6412.cloudfront.net/assets/application-bcbae7afc1d8f4f6b58668c1d609c2c7dec6b9a28a3fe5be8fbda6347905c1d8.css" media="all" /> <link rel="stylesheet" href="https://dirms4qsy6412.cloudfront.net/assets/devzone3/shared/modal-b27162ea9a12461a0b0076440408cdd94ddf4273a6a89539e4b81f4641416436.css" media="all" /> <link rel="stylesheet" href="https://dirms4qsy6412.cloudfront.net/assets/one-trust-bea625cf16a072ce5fdb0707a19f2645daf63c05eb1a016db72773eba008fc07.css" /> <script src="https://cdn.cookielaw.org/scripttemplates/otSDKStub.js" charset="UTF-8" data-document-language="true" data-domain-script="3e2b62ff-7ae7-4ac5-87c8-d5949ecafff5"></script> <script src="https://images.nvidia.com/aem-dam/Solutions/ot-js/ot-custom.js"></script> <script> function OptanonWrapper() { let event = new Event('bannerLoaded'); window.dispatchEvent(event); if (window.OnetrustActiveGroups && window.OnetrustActiveGroups.includes("C0002")) { window.DD_RUM && window.DD_RUM.init({ clientToken: 'pub0430c74fae5d2b467bcb8d48b13e5b32', applicationId: '9fc963c7-14e6-403d-bdec-ee671550bb7f', site: 'datadoghq.com', service: 'devzone', env: 'production', version: '', sessionSampleRate: 10, sessionReplaySampleRate: 5, trackUserInteractions: true, trackResources: true, trackLongTasks: true, defaultPrivacyLevel: 'mask-user-input', }); } } </script> <link rel="preload" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css" as="style" type="text/css"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css" /> <link rel="stylesheet" href="https://dirms4qsy6412.cloudfront.net/assets/devzone3/vars-cd3a0769a3c2f2d9ea6b83ac53ce86bceef4c719e4dbd22ed41d48d01f200901.css" media="all" /> <link rel="stylesheet" href="https://dirms4qsy6412.cloudfront.net/assets/devzone3/new/application-67ca57477bc7d9f93e5e90f311c18c966732363e1bf2e2b145c05a3ca779e502.css" media="all" /> <link rel="stylesheet" href="https://dirms4qsy6412.cloudfront.net/assets/feed-aggregator/feed-aggregator-9ace7521871242143cb35fa86d5be702c4dacb409600041fa6a5b14fa2a71dde.css" media="all" /> <link rel="stylesheet" href="https://dirms4qsy6412.cloudfront.net/assets/twentytwenty/css/twentytwenty-4ef2ccd719d09a97572e93c499c1fb11cc971d2a3519cfe105dcff2be92f65b9.css" media="all" /> <script src="https://dirms4qsy6412.cloudfront.net/assets/horizontal-chart/d3.v4.min-41cfecdf7c41476e805de7afacf4aacdd1a4be6947fbecf95217e947ebc2faf5.js"></script> <script src="https://dirms4qsy6412.cloudfront.net/assets/horizontal-chart/visualize-d-06443fdef48364af6635f0d1d3535da26910671f6f6a680c531eff0e54ed595f.js"></script> <link rel="stylesheet" href="https://dirms4qsy6412.cloudfront.net/assets/sf-validation/sf-validation-805362e079494cd052f713be5f91a44eb602f545c342f794abbd4a8050c0acb3.css" /> <script src="https://assets.adobedtm.com/5d4962a43b79/c1061d2c5e7b/launch-191c2462b890.min.js" data-ot-ignore="true"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.3/jquery.min.js" integrity="sha512-STof4xm1wgkfm7heWqFJVn58Hm3EtS31XFaagaa8VMReCXAkQnJZ+jEy8PCC/iT18dFy95WcExNHFTqLyp72eQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script> <script src="https://api-prod.nvidia.com/search/nvidia-gallery-widget.js"></script> <script src="https://dirms4qsy6412.cloudfront.net/assets/devzone3/modules/nvidia_editor/nod_widgets-8c38a7d04ed3c3acd9117aa126bf76d7902d3c57c72b76dbf3c281c96ed09975.js"></script> <link rel="icon" type="image/x-icon" href="https://dirms4qsy6412.cloudfront.net/assets/favicon-81bff16cada05fcff11e5711f7e6212bdc2e0a32ee57cd640a8cf66c87a6cbe6.ico" /> </head> <body class='d-flex flex-column h-100' data-theme='devzone3_new'> <div id='header'></div> <main class="main-content dz3-main-section dz-new-theme page-culitho page-culitho" data-id="2234"> <section class="sct--xs"> <div class="cntnr--narrow txt-cntr"> <h1 class="h--large">NVIDIA cuLitho</h1> <h2 class="h--small">Accelerate computational lithography</h2> <p class="p--medium">NVIDIA cuLitho is a library with optimized tools and algorithms for GPU-accelerating computational lithography and the manufacturing process of semiconductors by orders of magnitude over current CPU-based methods. </p> <br> <p class="p--medium">Manufacturing computer chips requires a critical step called computational lithography – a complex computation – involving electromagnetic physics, photochemistry, computational geometry, iterative optimization, and distributed computing. </p> <br> <p class="p--medium">This computational lithography step is already one of the largest compute workloads in semiconductor production, necessitating massive data centers, and the silicon miniaturization evolution process exponentially amplifies the computation requirements over time.</p> <br> <a target="_blank" class="cta--prim" href="https://www.nvidia.com/en-us/on-demand/session/gtcspring23-s52510/">Watch GTC Session</a> </div> </section> <div class="container"><hr></div> <section class="sct--xs"> <div class="cntnr--cw txt-cntr"> <h2 class="h--medium">The Challenge</h2> <p class="p--large">As silicon feature sizes become smaller, and the impacts of optical diffraction have to be offset, there arises a need to proactively manipulate mask patterns with optical proximity correction (OPC) or inverse lithography technology (ILT) to accurately image wafers. This requires advanced computational lithography techniques and increased compute efficiency. Every industry needs to accelerate every workload, so that we can reclaim power and do more with less.</p> <br> <img style="max-width: 850px;" src="https://d29g4g2dyqv443.cloudfront.net/sites/default/files/akamai/culitho-1ccw-t-2x.jpg" alt="Advanced computational lithography (cuLitho) techniques for computer chips" title="Advanced computational lithography (cuLitho) techniques for computer chips"> <br> <br> </div> </section> <section class="sct--xs sct--lt-gry2"> <div class="cntnr--cw"> <h2 class="h--medium txt-cntr ">Benefits</h2> <p class="p--large txt-cntr">Acceleration libraries are at the core of accelerated computing. NVIDIA cuLitho is a library that targets the emerging challenges of nanoscale computational lithography. With GPUs, it accelerates inverse lithography by 40X, helping create new solutions to make future semiconductor technologies cheaper and more predictable. It introduces new innovations and leverages decades of investment in CUDA® infrastructure.</p> <br> <div class="row"> <div class="col-md-3"> <img style="width:96px;" class="img-responsive" src="https://d29g4g2dyqv443.cloudfront.net/sites/default/files/akamai/m48-speed-256px-blk.png" alt=" Improved performance from faster computational lithography ILT" title=" Improved performance from faster computational lithography ILT"> <h3 class="h--smallest">Performance</h3> <p class="p--medium">Faster inverse lithography technology (ILT) powers a 40X performance speedup, generating accurate photomasks faster.</p> </div> <div class="col-md-3"> <img style="width:96px;" class="img-responsive" src="https://d29g4g2dyqv443.cloudfront.net/sites/default/files/akamai/m48-clock-time-256px-blk.png" alt=" Increased productivity with cuLitho" title="Increased productivity with cuLitho"> <h3 class="h--smallest">Productivity</h3> <p class="p--medium">Photomasks that took two weeks can be processed overnight.</p> <br> <p class="p--medium">3X to 5X more masks can be generated per day.</p> </div> <div class="col-md-3"> <img style="width:96px;" class="img-responsive" src="https://d29g4g2dyqv443.cloudfront.net/sites/default/files/akamai/m48-lower-cost-256px-blk_0.png" alt=" cuLitho helps with cost savings by using less data center power" title=" cuLitho helps with cost savings by using less data center power"> <h3 class="h--smallest">Cost Savings</h3> <p class="p--medium">500 NVIDIA Hopper™ GPU systems running cuLitho can do the work of 40,000 CPU systems. That's 1/9 the power and 1/8 the space.</p> </div> <div class="col-md-3"> <img style="width:96px;" class="img-responsive" src="https://d29g4g2dyqv443.cloudfront.net/sites/default/files/icons/m48-scalability-down-sample-256px-blk.png" alt=" New lithography innovations can support future silicon scaling" title=" New lithography innovations can support future silicon scaling"> <h3 class="h--smallest">Future Silicon Scaling</h3> <p class="p--medium">Faster OPC enables new lithography innovations to address miniaturization of next-generation semiconductors, including subatomic modeling, curvilinear OPC, and high-numerical aperture extreme-ultraviolet (high-NA EUV) lithography.</p> </div> </div> </div> </section> <section class="sct--xs"> <div class="cntnr--cw txt-cntr"> <h2 class="h--medium">Collaborators</h2> <p class="p--large">Semiconductor and electronic design automation (EDA) industry leaders are leveraging NVIDIA cuLitho to drive silicon scaling and enable their end users to reduce costs and accelerate technology advancements. </p> <br> <div class="row"> <div class="col-md-12"> <div id="carouselExampleIndicators" class="carousel slide" data-ride="carousel"> <ul class="carousel-indicators"> <li style="background-color:#EEEEEE;" data-target="#carouselExampleIndicators" data-slide-to="0" class="active"> <li style="background-color:#EEEEEE;" data-target="#carouselExampleIndicators" data-slide-to="1"> <li style="background-color:#EEEEEE;" data-target="#carouselExampleIndicators" data-slide-to="2"> </ul> <div class="carousel-inner"> <div class="carousel-item active"> <div class="quote" > <div class="mySlides"> <blockquote class="center"> <img style="width:140px;" src="https://d29g4g2dyqv443.cloudfront.net/sites/default/files/akamai/asml.svg" alt="NVIDIA collaborator - ASML" title="NVIDIA collaborator - ASML"> <p class="p--medium"> “We are planning to integrate support for GPUs into all of our computational lithography software products. Our collaboration with NVIDIA on GPUs and cuLitho should result in tremendous benefit to computational lithography and therefore to semiconductor scaling. This will be especially true in the era of High-NA EUV lithography.” </p> <br> <p class="p--medium"><small>— Peter Wennink, CEO, ASML</small></p> </blockquote> </div> </div> <img style="margin-top:5%;" class="d-block w-100" src="..." alt=""> </div> <div class="carousel-item"> <div class="quote" > <div class="mySlides"> <blockquote class="center"> <img style="width:140px;" src="https://d29g4g2dyqv443.cloudfront.net/sites/default/files/akamai/synopsys.svg" alt="NVIDIA collaborator - Synopsys" title="NVIDIA collaborator - Synopsys"> <p class="p--medium"> “For more than two decades Synopsys Proteus mask synthesis software products have been the production-proven choice for accelerating computational lithography — the most demanding workload in semiconductor manufacturing. With the move to advanced nodes, computational lithography has dramatically increased in complexity and compute cost. Our collaboration with TSMC and NVIDIA is critical to enabling angstrom-level scaling as we pioneer advanced technologies to reduce turnaround time by orders of magnitude through the power of accelerated computing.” </p> <br> <p class="p--medium"><small>— Sassine Ghazi, President and CEO, Synopsys</small></p> </blockquote> </div> </div> <img style="margin-top:5%;" class="d-block w-100" src="..." alt=""> </div> <div class="carousel-item"> <div class="quote" > <div class="mySlides"> <blockquote class="center"> <img style="width:140px;" src="https://d29g4g2dyqv443.cloudfront.net/sites/default/files/akamai/tsmc.svg" alt="NVIDIA collaborator - TSMC" title="NVIDIA collaborator - TSMC"> <p class="p--medium"> “Our work with NVIDIA to integrate GPU-accelerated computing in the TSMC workflow has resulted in great leaps in performance, dramatic throughput improvement, shortened cycle time and reduced power requirements. We are moving NVIDIA cuLitho into production at TSMC, leveraging this computational lithography technology to drive a critical component of semiconductor scaling” </p> <br> <p class="p--medium"><small>— Dr. C.C. Wei, CEO, TSMC</small></p> </blockquote> </div> </div> <img style="margin-top:5%;" class="d-block w-100" src="..." alt=""> </div> </div> <a class="carousel-control-prev" href="#carouselExampleIndicators" role="button" data-slide="prev"> <span class="carousel-control-prev-icon" aria-hidden="true"></span> <span class="sr-only">Previous</span> </a> <a class="carousel-control-next" href="#carouselExampleIndicators" role="button" data-slide="next"> <span class="carousel-control-next-icon" aria-hidden="true"></span> <span class="sr-only">Next</span> </a> </div> </div> </div> </div> </section> <section class="sct--xs sct--lt-gry1"> <div class="cntnr--cw"> <h2 class="h--medium txt-cntr">Press Release</h2> <div class="row"> <div class="col-md-6"> <div class="card" onclick="window.open('https://nvidianews.nvidia.com/news/nvidia-asml-tsmc-and-synopsys-set-foundation-for-next-generation-chip-manufacturing');"> <div class="card-cntnt-cntnr"> <h3 class="h--smaller">Read 2023 Press Release</h3> <p>NVIDIA, ASML, TSMC, and Synopsys collaborate to advance next-generation chip manufacturing by adopting NVIDIA's groundbreaking computational lithography, thereby pushing the boundaries of physics in the industry.</p> <div class="cta--tert mt-auto" style="padding-top: 15px;">Read the Press Release <span class="fas fa-angle-right fa-fw"></span></div> </div> </div> </div> <div class="col-md-6"> <div class="card" onclick="window.open('https://nvidianews.nvidia.com/news/tsmc-synopsys-nvidia-culitho');"> <div class="card-cntnt-cntnr"> <h3 class="h--smaller">Read 2024 Press Release </h3> <p>NVIDIA introduces Gen AI to computational lithography, and integration partners go into production with cuLitho.</p> <div class="cta--tert mt-auto" >Read the Press Release <span class="fas fa-angle-right fa-fw"></span></div> </div> </div> </div> </div> </div> </section> <style> @media only screen and (max-width:1023px) { .cta--scnd { font-size: 16px; line-height: 1em; margin: 4px 16px 16px 0; cursor: pointer; white-space: nowrap; padding: 12px; display: inline-block; -moz-osx-font-smoothing: grayscale; } } </style> <section class="sct--xs sct--drk-gry4"> <div class="cntnr--narrow txt-cntr"> <h2 class="h--small text-white">Learn More About NVIDIA cuLitho at GTC</h2> <br> <center> <a style="margin-top: 0px;margin-bottom: 10px;margin-right: 0px;" target="_blank" href="https://nvidianews.nvidia.com/news/tsmc-synopsys-nvidia-culitho" class="cta-l cta--prim">See Announcement</a> &nbsp;&nbsp; <a style="margin-top: 0px;margin-bottom: 0px;margin-right: 0px; background-color: transparent;" target="_blank" href="https://www.nvidia.com/en-us/on-demand/session/gtcspring23-s52510/" class="cta-l cta--scnd text-white">Watch GTC Session</a> </center> </div> </section> <script> document.addEventListener('DOMContentLoaded', () => { const allLinks = document.querySelectorAll('.dz3-main-section.dz-new-theme a'); allLinks.forEach((link) => { let hasIcon = link.querySelector('span.fas'); if(hasIcon) { link.classList.add('has-cta-icon'); } }); }); </script> </main> <div id='footer' class='mt-auto'></div> <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script> <script src="https://dirms4qsy6412.cloudfront.net/assets/devzone3/new/popper.min-a9eb3f3101919a18965114cfdcd0138652ec03b2b58cfb26806f9a256564c858.js"></script> <script src="https://dirms4qsy6412.cloudfront.net/assets/feed-aggregator/feed-aggregator-7f147443abc2d1300a239c29e4ba3ca0d0d2eb0dc66b608765e2b3be50e18e10.js"></script> <script src="https://dirms4qsy6412.cloudfront.net/assets/devzone3/new/dist/dz3-new-bundle-11f473650a558402a2733b7bb4d6133e28814892ec0527381c9144f3499b8d60.js"></script> <script src="https://dirms4qsy6412.cloudfront.net/assets/twentytwenty/js/jquery.event.move-16041d2e384b513c1b202af51fc404a0643b8c38ff823bb4326520ad5a82b761.js"></script> <script src="https://dirms4qsy6412.cloudfront.net/assets/twentytwenty/js/jquery.twentytwenty-835622257095d5bd0719a5484d68213ccc8708a321dd3deded777d1e6623b499.js"></script> <script> const template = document.createElement('template'); template.innerHTML = ` <style> @import "https://dirms4qsy6412.cloudfront.net/assets/feed-aggregator/feed-aggregator-9ace7521871242143cb35fa86d5be702c4dacb409600041fa6a5b14fa2a71dde.css"; .feed-aggregator-component .card { box-shadow: 0 4px 5px 0 rgba(0,0,0,0.14), 0 1px 10px 0 rgba(0,0,0,0.12), 0 2px 4px -1px rgba(0,0,0,0.3) !important; } .feed-aggregator-component .card:hover { box-shadow: 0 0 8px 0 rgba(0,0,0,0.13), 0 14px 32px 5px rgba(0,0,0,0.13) !important; } </style> <div class="feed-aggregator-component"></div> `; const hosts = { 'en': 'https://developer.nvidia.com/blog', 'cn': 'https://developer.nvidia.com/zh-cn/blog', } class FeedAggregatorElement extends HTMLElement { constructor() { super(); this._shadowRoot = this.attachShadow({ 'mode': 'open' }); this._shadowRoot.appendChild(template.content.cloneNode(true)); } connectedCallback() { const categories = this.getAttribute('categories'); const tags = this.getAttribute('tags'); const perPage = this.getAttribute('per-page'); const excludedTags = this.getAttribute('excluded-tags'); let locale = this.getAttribute('locale'); if (!locale) { locale = 'en'; } let targetElement = this._shadowRoot.querySelector(".feed-aggregator-component"); let feed = { id: 'blog', host: hosts[locale], type: 'json', minCount: 2, }; if (categories && categories !== 'all') { feed['category_ids'] = categories.split(','); } if (tags && tags !== 'all') { feed['tag_ids'] = tags.split(','); } if(excludedTags && excludedTags !== 'null'){ feed['excluded_tag_ids'] = excludedTags.split(','); } document.addEventListener("DOMContentLoaded", function () { new FeedAggregator({ target: targetElement, props: { count: perPage, openInNewTab: true, showExcerpts: true, feeds: [feed] } }); }) } } window.customElements.define('feed-aggregator', FeedAggregatorElement); </script> <template id='application-button-template'> <style> @import "https://dirms4qsy6412.cloudfront.net/assets/application-button/application-button-68ca7e1e3aa49ec79169d49226e34ee0c341d27a15a38b28ce975cb2467e123e.css"; </style> <a href='' class='nvidia-application-button'>Join now</a> </template> <script> async function fetchMembershipState () { const userInfo = await fetch('/api/user'); const {status} = userInfo; if (status === 401) { let error = new Error('Unauthorized'); error.statusCode = status; throw error; } // TODO: Figure out how to get DZ4 program // Fetch page info. const {pathname} = location; const pageInfo = await fetch(`${pathname}.json`); const pageData = await pageInfo.json(); // Fetch membership info return pageData; } const initApplicationButton = (element) => { const linkElement = element.querySelector('a'); fetchMembershipState() .then(data => { console.log(data); }) .catch(error => { switch (error.statusCode) { default: linkElement.innerHTML = 'Login'; linkElement.href = '/login'; } }); }; class NvidiaApplicationButton extends HTMLElement { constructor() { const template = document.getElementById('application-button-template'); super(); this._shadowRoot = this.attachShadow({ 'mode': 'open' }); this._shadowRoot.appendChild(template.content.cloneNode(true)); } connectedCallback() { const element = this._shadowRoot; document.addEventListener('DOMContentLoaded', () => { initApplicationButton(element); }); } } window.customElements.define('nv-application-button', NvidiaApplicationButton); </script> <template id='application-text-template'> <p></p> </template> <script> class NvidiaApplicationText extends HTMLElement { constructor() { const template = document.getElementById('application-text-template'); super(); this._shadowRoot = this.attachShadow({ 'mode': 'open' }); this._shadowRoot.appendChild(template.content.cloneNode(true)); } connectedCallback() { } } window.customElements.define('nv-application-text', NvidiaApplicationText); </script> <template id='nv-sf-form-validator-template'> <script src="https://dirms4qsy6412.cloudfront.net/assets/sf-validation/moment-620a5949fff0ad37198f07464b91d7b7c110ecdb6f94ca90ca7d2e1b471f1da8.js"></script> <script src="https://dirms4qsy6412.cloudfront.net/assets/sf-validation/validate.min-2160a65c1b5d4a5966544ad25af8fe99f11c636a99c516fee6c7afd3b1f21409.js"></script> <p></p> </template> <script> class NvidiaSalesforceValidator extends HTMLElement { constructor() { const template = document.getElementById('nv-sf-form-validator-template'); super(); this._shadowRoot = this.attachShadow({'mode': 'open'}); this._shadowRoot.appendChild(template.content.cloneNode(true)); } initComponent() { if (!window.sfv) { return; } validate.extend(validate.validators.datetime, { parse: function (value, options) { if (moment(value, options.format, true).isValid()) { return +moment.utc(value); } }, format: function (value, options) { var format = options.dateOnly ? "MM/DD/YYYY" : "MM/DD/YYYY hh:mm"; return moment.utc(value).format(format); } }); function showErrors(errors) { $.each(errors, function (index, element) { $('input[name="' + errors[index]['attribute'] + '"]').each(function (i, e) { var errorMessage = errors[index]['options']['message']; $('<div class="js-validation-errors">' + errorMessage + '</div>').insertAfter(e); }).focus(); }); } function isValidForm(form, constraints) { var errors = validate(form, constraints, {format: "detailed"}); if (errors) { showErrors(errors); return false; } return true; } $.each(window.sfv, function (index, element) { $(element.target).on('click', function (event) { $('.js-validation-errors').remove(); if (!isValidForm(element.form, element.constraints)) { event.preventDefault(); } }); }); } connectedCallback() { document.addEventListener('DOMContentLoaded', () => { this.initComponent(); }); } } window.customElements.define('nv-sf-form-validator', NvidiaSalesforceValidator); </script> <script src="https://dirms4qsy6412.cloudfront.net/assets/horizontal-chart/d3.v4.min-41cfecdf7c41476e805de7afacf4aacdd1a4be6947fbecf95217e947ebc2faf5.js"></script> <script src="https://dirms4qsy6412.cloudfront.net/assets/horizontal-chart/visualize-d-06443fdef48364af6635f0d1d3535da26910671f6f6a680c531eff0e54ed595f.js"></script> <template id="chart-template"> <style> @import "https://dirms4qsy6412.cloudfront.net/assets/devzone3/modules/nvidia_tokens/nvidia-charts-a459e90d273ab4f8b282e0f5fef607074b5fc7cbb5f8d0f0e378281320e6b9c8.css"; </style> <div class="horizontal-chart-component"> <div class="chart-container"> <h4 class="chart-title"></h4> <p class="chart-subtitle"></p> <div class="legend"></div> <svg data-nvidia-chart="true" data-chart-legend=""></svg> <p class="chart-footnote"></p> </div> </div> </template> <script> function chartInit(element) { const chart = element.querySelector('svg[data-nvidia-chart]'); const isRendered = chart.getAttribute("data-rendered"); if (isRendered) { return; } const svgChart = d3.select(chart); const bars = JSON.parse(chart.dataset['chartBars']); const ticks = JSON.parse(chart.dataset['chartTicks']); const xAxisLabel = chart.dataset['xAxisLabel']; const barPadding = chart.dataset['barPadding']; const milestone = null; const isGrouped = chart.dataset['isGrouped'] === 'true'; if (isGrouped) { const legend = JSON.parse(chart.dataset['chartLegend']); createGroupedHorizontalBarChart(svgChart, bars, barPadding, legend, ticks, milestone, xAxisLabel, false); } else { createHorizontalBarChart(svgChart, bars, barPadding, ticks, xAxisLabel, "", false); } chart.dataset['rendered'] = 'true'; } $('a[data-toggle="tab"]').on("click", function (event) { setTimeout(() => { // Triggering 'resize' event to redraw charts. window.dispatchEvent(new Event('resize')); const target = jQuery(event.target).parents('.nav.nav-tabs').siblings('.tab-content').find('.tab-pane.active'); if (target.length > 0) { const svg = jQuery(target).find('horizontal-chart'); if (svg.length) { svg.each((idx, el) => { setTimeout(function () { const chartContainer = el._shadowRoot.querySelector('.chart-container'); chartInit(chartContainer); }, 300); }); } } }, 50); }); async function loadFileSource(url) { try{ const response = await fetch(url); return response.json(); }catch (e) { console.warn(`Failed to load chart data. URL: ${url}`); } return {}; } class HorizontalChartElement extends HTMLElement { constructor() { const horizontalCharTemplate = document.getElementById('chart-template'); super(); this._shadowRoot = this.attachShadow({ 'mode': 'open' }); this._shadowRoot.appendChild(horizontalCharTemplate.content.cloneNode(true)); } connectedCallback() { const url = this.getAttribute('source'); const element = this._shadowRoot; document.addEventListener("DOMContentLoaded", function () { loadFileSource(url).then(data => { const { chartTitle: title, chartSubtitle: subTitle, chartFootnote: footNote, chartId: id, isGrouped: isGrouped, legendData, barPadding, xAxisLabel, bars, ticks } = data; element.querySelector('.chart-title').innerHTML = title; // Subtitle if (subTitle) { element.querySelector('.chart-subtitle').innerHTML = subTitle; } else { element.querySelector('.chart-subtitle').remove(); } // Chart const svgElement = element.querySelector('.chart-container svg'); svgElement.id = id; const dataAttributes = [ ['isGrouped', isGrouped ? 'true' : 'false', ''], ['chartLegend', JSON.stringify(legendData), ''], ['xAxisLabel', xAxisLabel, ''], ['barPadding', barPadding, 5], ['chartBars', bars, ''], ['chartTicks', ticks, ''], ]; dataAttributes.forEach(dataAttribute => { if (dataAttribute[0] === 'chartBars' && dataAttribute[1]) { dataAttribute[1] = JSON.stringify(dataAttribute[1]); } if (dataAttribute[0] === 'chartTicks' && dataAttribute[1]) { dataAttribute[1] = JSON.stringify(dataAttribute[1]); } svgElement.dataset[dataAttribute[0]] = dataAttribute[1] ? dataAttribute[1] : dataAttribute[2]; }); // Caption if (footNote) { element.querySelector('.chart-footnote').innerHTML = footNote; } else { element.querySelector('.chart-footnote').remove(); } // Init chart const chartContainer = element.querySelector('.chart-container'); setTimeout(function () { if (jQuery(chartContainer).is(':visible')) { chartInit(chartContainer); } }, 300); }); }) } } window.customElements.define('horizontal-chart', HorizontalChartElement); </script> <script src="https://dirms4qsy6412.cloudfront.net/assets/nv-developer-menu-09b6a95e79b8d8d44b0f1ac794e39d5adac82391d128f6d4d39715826a860020.js"></script> <script> let menuLocale = 'en'; if (menuLocale == 'en') { menuLocale = 'en-US'; } function mountHeader(data = false) { let options = { baseURL: window.location.origin, signedIn: false, locale: menuLocale }; if (data) { options.secondaryMenu = data; } options.showMembershipCardLink = true; new NVDeveloperHeader({ target: document.getElementById('header'), props: options }); } function mountFooter(data = false) { let options = { menu: data, locale: menuLocale }; new NVDeveloperFooter({ target: document.getElementById('footer'), props: options }); } let url = 'd29g4g2dyqv443.cloudfront.net'; let headerMenuURL = "https://d29g4g2dyqv443.cloudfront.net/menu/en-US/header-secondary.json"; fetch(headerMenuURL) .then(response => response.json()) .then(data => { mountHeader(data); }) .catch((error) => { mountHeader(); window.nv.tracing.addError('menu', error); }); fetch(`https://${url}/menu/${menuLocale}/footer.json`) .then(response => response.json()) .then(data => { mountFooter(data); }) .catch((error) => { mountFooter(); window.nv.tracing.addError('menu', error); }); </script> <script src="https://www.datadoghq-browser-agent.com/us1/v5/datadog-rum.js"></script> <script> let silentAuthHost = 'www.nvidia.com'; let crossOriginPageUrl = `https://${silentAuthHost}/auth/hints/`; function readHint() { return new Promise((resolve) => { const { origin: targetOrigin } = new URL(crossOriginPageUrl); const iframe = document.createElement('iframe'); iframe.hidden = true; iframe.src = crossOriginPageUrl; function responseHandler(event) { if (event.origin === targetOrigin) { iframe.parentNode.removeChild(iframe); return resolve(event.data); } } window.addEventListener('message', responseHandler, { once: true }); iframe.onload = () => { iframe.contentWindow.postMessage({ type: 'read' }, targetOrigin); } document.body.appendChild(iframe); }); } function writeHint(login_hint, idp_id, timestamp, sub) { const { origin: targetOrigin } = new URL(crossOriginPageUrl); const iframe = document.createElement('iframe'); iframe.hidden = true; iframe.src = crossOriginPageUrl; iframe.onload = () => { const message = { type: 'write', login_hint, idp_id, timestamp, sub }; iframe.contentWindow.postMessage(message, targetOrigin); } document.body.appendChild(iframe); } function deleteHint() { const { origin: targetOrigin } = new URL(crossOriginPageUrl); const iframe = document.createElement('iframe'); iframe.hidden = true; iframe.src = crossOriginPageUrl; iframe.onload = () => { iframe.contentWindow.postMessage({ type: 'delete' }, targetOrigin); } document.body.appendChild(iframe); } </script> <script>_satellite.pageBottom();</script> <script src="https://dirms4qsy6412.cloudfront.net/packs/js/runtime-503119e3bfeec75056bc.js" defer="defer"></script> <script src="https://dirms4qsy6412.cloudfront.net/packs/js/692-70104789368a40f2d231.js" defer="defer"></script> <script src="https://dirms4qsy6412.cloudfront.net/packs/js/647-2379c90e9e5d3379c823.js" defer="defer"></script> <script src="https://dirms4qsy6412.cloudfront.net/packs/js/97-27725969a7bb8a25b4af.js" defer="defer"></script> <script src="https://dirms4qsy6412.cloudfront.net/packs/js/839-cc0cb35777843d83581f.js" defer="defer"></script> <script src="https://dirms4qsy6412.cloudfront.net/packs/js/311-033b6299b51897e65419.js" defer="defer"></script> <script src="https://dirms4qsy6412.cloudfront.net/packs/js/252-f83b27d9f72fef366bc7.js" defer="defer"></script> <script src="https://dirms4qsy6412.cloudfront.net/packs/js/823-a9c897a627c9bc4bacbd.js" defer="defer"></script> <script src="https://dirms4qsy6412.cloudfront.net/packs/js/126-78df158ba0434babd42b.js" defer="defer"></script> <script src="https://dirms4qsy6412.cloudfront.net/packs/js/900-5abf49765bf40a2e9e97.js" defer="defer"></script> <script src="https://dirms4qsy6412.cloudfront.net/packs/js/application-e3a16d9ab660b995e775.js" defer="defer"></script> <script src="https://dirms4qsy6412.cloudfront.net/packs/js/ls_track-4ba11c63b23b3f4ff0d5.js" defer="defer"></script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10