Nvidia – Mezi hráči a těžaři

19. 1. 2021

Sdílet

Autor: Nvidia
Zásoby grafických karet jsou stále omezené, pro Nvidii tak nadále zůstávají prioritou hráči. Přesto firma nevylučuje, že by mohla vyrábět produkty určené výhradně pro těžbu kryptoměn.

Jestli se k vám dostaly zvěsti, že Nvidia by mohla začít vyrábět grafické karty určené přednostně pro těžbu kryptoměn, ještě se zdržte případného nadšení. Jelikož zásoby GPU zůstávají omezené, zdá se, že firma své priority pro nejbližší období přehodnotí. Vedoucí jejích financí, Colette Kressová, během v rozhovoru na J.P. Morgan Tech/Auto Forum Conference nicméně připustila, že grafické karty pro těžaře virtuálních platidel jsou – alespoň teoreticky – stále eventualitou.

„Pokud uvidíme zájem a smysluplnou poptávku, mohli bychom této příležitosti využít a projekt produktové řady pro virtuální těžbu restartovat,“ uvedla Kressová. Jedním dechem ale dodala, že jelikož společnost v současnosti nezná výši tohoto zájmu, bude se zatím držet vývoje karet určených pro hráče. „Poptávka z jejich strany je velice silná, dokonce větší než naše stávající zásoby.“

Nvidii na hráčích záleží

Přesně tak, hráči. Možná to tak nevypadá, jestliže si nemůžete pořídit kartu, po které toužíte, za částku, kterou si můžete dovolit, avšak Nvidii na vás záleží.

„Dnešní situace je jiná než tak, kterou jsme zažili pár let nazpět,“ vzpomíná Kressová období z asi před čtyř let, kdy těžaři kryptoměn skupovali grafické karty ve velkém. Jejich neukojitelný zájem tehdy vyprázdnil skladové zásoby a zvýšil ceny k nelibosti běžných zájemců, kteří prostě jen chtěli hrát videohry.

Dle Kressové má Nvidia poměrně jasnou představu o tom, v jakých částech světa její produkty končí, a prodejní kanály pravidelně monitoruje. Zároveň prý firma navyšuje své kapacity a problém s nedostatečností dodávek by tak už brzy nemusel být tolik palčivý, přestože zhruba dva měsíce ještě potrvá. Zájem o karty GeForce řady 30 je prý totiž enormní.

„Startujeme ale produktový cyklus architektury Ampere, před kterou se rozprostírá dlouhá runway.“

linux_sprava_tip

I kdyby se ale Nvidia rozhodla vyrábět karty speciálně pro těžaře, nemuselo by to nezbytně znamenat krušné časy pro hráče. Jak upozorňuje redaktor webu Tom´s Hardware Anton Šilov, těžaře zajímá v prvé řadě výpočetní výkon, ne tak ten grafický. Firma by tak těžařům teoreticky mohla nabízet karty s poškozenými jednotkami mapování textur nebo chybným kódováním videa. Karty, které jsou pro grafické procesy nepoužitelné a končily by jinak ve šrotu. Na druhou stranu, jakkoliv to je bohulibý záměr, mnozí těžaři grafické karty dále přeprodávají právě hráčům, jakmile své hardware vybavení obměňují. Karty určené pouze pro těžbu by tak pro ně nemusely být až tak atraktivní.

Dle Kressové dnes zhruba 10 % majitelů karet GeForce vlastní model s technologií RTX, přičemž většina jich své vybavení upgradovala z řady 10, tedy té s architekturou Pascal. Jestliže má GeForce celosvětově zhruba 200 milionů majitelů, zhruba 20 milionů si jich tak už užívá ray tracingu. Pro zajímavost zmínila také to, že 30 % tržeb z hráčského segmentu pro Nvidii tvoří GeForce karty v noteboocích.

'; document.getElementById('preroll-iframe').onload = function () { setupIframe(); } prerollContainer = document.getElementsByClassName('preroll-container-iframe')[0]; } function setupIframe() { prerollDocument = document.getElementById('preroll-iframe').contentWindow.document; let el = prerollDocument.createElement('style'); prerollDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:20px;right:25px}"; videoContent = prerollDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('PREROLL sound allowed'); // setUpIMA(true); videoContent.volume = 1; videoContent.muted = false; setUpIMA(); }).catch(function () { console.log('PREROLL sound forbidden'); videoContent.volume = 0; videoContent.muted = true; setUpIMA(); }); } } function setupDimensions() { prerollWidth = Math.min(iinfoPrerollPosition.offsetWidth, 480); prerollHeight = Math.min(iinfoPrerollPosition.offsetHeight, 320); } function setUpIMA() { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Preroll advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = prerollWidth; // adsRequest.linearAdSlotHeight = prerollHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. prerollDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( prerollDocument.getElementById('adContainer'), videoContent); } function unmutePrerollAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } } function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(prerollWidth, prerollHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } function onAdEvent(adEvent) { const ad = adEvent.getAd(); console.log('Preroll event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: if (!ad.isLinear()) { videoContent.play(); } prerollDocument.getElementById('adContainer').style.width = '100%'; prerollDocument.getElementById('adContainer').style.maxWidth = '640px'; prerollDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); if (ad.isLinear()) { intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } prerollDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (prerollLastError === 303) { playYtVideo(); } break; case google.ima.AdEvent.Type.COMPLETE: if (ad.isLinear()) { clearInterval(intervalTimer); } playYtVideo(); break; } } function onAdError(adErrorEvent) { console.log(adErrorEvent.getError()); prerollLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { playYtVideo(); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoPrerollPosition.remove(); playPrerollAd(); } else { return false; } adVolume = 1; return true; } function onContentPauseRequested() { videoContent.pause(); } function onContentResumeRequested() { videoContent.play(); } function onActiveView() { if (prerollContainer) { const containerOffset = prerollContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (prerollPaused) { adsManager.resume(); prerollPaused = false; } return true; } else { if (!prerollPaused) { adsManager.pause(); prerollPaused = true; } } } return false; } function playYtVideo() { iinfoPrerollPosition.remove(); youtubeIframe.style.display = 'block'; youtubeIframe.src += '&autoplay=1&mute=1'; } }
OSZAR »