Vyvíjí Google vlastní procesor? Rozhodně by to dávalo smysl!

13. 11. 2020

Sdílet

Autor: Google
Šéf Googlu Sundar Pichai hovoří o velkých investicích do hardwaru. Proč si myslíme, že by to mohly být vlastní procesory?

Pustil se Google do výroby vlastních mikročipů? Pojďme si trošku zaspekulovat, protože pokud by tomu tak opravdu bylo, mohlo by jít o významnou hybnou sílu ve vývoji googlovských produktů, přinejmenším telefonů Pixel. Co nás k této úvaze vede? Nedávná slova šéfa Googlu Sundara Pichaie, v nichž se dá vývoj vlastního čipu při troše představivosti vyčíst takříkajíc mezi řádky, plus fakt, že na vlastní procesory se začíná spoléhat konkurence v podobě Applu.

Pichai hovořil mimo jiné o „velkých investicích do hardwaru“, k jejichž naplnění dojde „za nějaké dva tři roky“, ale z nichž některé se „projeví už v roce 2021“. Přičemž se spekulacemi o vývoji vlastních čipů (pracovně označovaných jménem Whitechapel) optimalizovaných pro strojové učení, které by byly určené primárně pro Pixely a Chromebooky, přišel už na jaře server Axios, dle kterého na nich Google spolupracuje se společností Samsung. Pokud by se tato informace ukázala jako pravdivá, co přesně by skutečnost, že v googlovských telefonech a počítačích namísto procesorů od Qualcommu najdeme jeho vlastní, znamenala pro nás, běžné smrtelníky?

1 – Google by získal naprostou kontrolu nad tím, z čeho jsou jeho produkty složené

Už od vydání prvního Pixelu se hovořilo o tom, jak představují dokonalý způsob pro zažití operačního systému Android a realizování vize Googlu. A jako takové značný krok vpřed oproti telefonům Nexus, které pro Google vyráběli jiní výrobci, jakkoliv je uzpůsobovali jeho potřebám. Oproti tomu na evoluci Pixelu je vidět, jak se Google stává čím dál soběstačnějším. Tedy, až na jednu drobnost, a tou je procesor.

Drobnost, která celkem zásadně určuje, jaké funkce a vychytávky může telefon podporovat – od možností fotoaparátu, přes biometrii, po rychlé nabíjení. V současné době je Google závislý na společnostech typu Qualcomm, které tento rámec určují, což ale pro firmu zaměřenou na strojové učení či rozvoj schopností virtuálního asistenta představuje značné limity. Limity, které by Google mohl pokořit, pokud by dokázal vyvíjet vlastní procesory. Ty by byly posledním dílkem skládačky, která by z Pixelů pro Google udělala samostatnou jednotku, nad kterou má firma kompletní kontrolu, a kterou může formovat v souladu s představami o Androidu a jeho možnostmi.

A jestliže je Google zároveň vývojářem operačního systému, tyto možnosti by mohly být nepřeberné. To nás zároveň přivádí ke druhému bodu.

2 – Google by získal kontrolu nad tím, jak dlouho bude procesor – a tedy i zařízení, které pohání – podporován

Kamenem úrazu Androidu jsou jeho aktualizace, zejména proto, že výrobci telefonů nemají motivaci k tomu, aby včasné a pravidelné aktualizace pro ně byly prioritou. Koneckonců, ani sám Google se v tomto ohledu nechová zrovna na jedničku podtrženou. Což je ale zčásti dáno tím, že se musí spoléhat na výrobce čipů a dohlédnout, aby na nich každá verze Androidu běžela bezproblémově. A výrobci se raději zaměřují na to, aby každý rok byli schopni dodat nový vylepšený model, než aby dbali na podporu těch zastarávajících. Co by tento problém vyřešilo?

Samozřejmě, vlastní procesor. Navíc, ač si to možná mnozí ani neuvědomují, Google je v prvé řadě společnost poskytující cloudové služby. Služby, které nicméně v důsledku dokonale podporují její nejvýdělečnější byznys, a to online inzerci. Z toho důvodu je pro Google zásadní poskytovat tu nejlepší možnou Androidovou zkušenost, která je rok od roku lepší. Zatímco hlavním záměrem firem jako jsou Samsung nebo LG je přimět vás k pořizování stále nového hardwaru, Google chce, abyste využívali jeho software a služby a abyste byli ideálně neustále online. Vlastní čip v Pixelech jde s tímto záměrem ruku v ruce, no ne? A přece je tu ještě něco.

3 – Google by mohl ušetřit

hacking_tip

Vedle už zmíněných benefitů, vývoj vlastních komponentů přináší ještě jednu zásadní výhodu – šetří peníze. Googlu by tak odpadla marže pro Qualcomm, procesory by vyráběl a prodával de facto sám sobě, tedy za výrobní cenu. Ušetřené peníze by mohl využít jinak a čistě teoreticky by uživatelé toužící po novém Pixelu mohli v poměru cena/výkon ještě získat (ostatně, Pixel 5 už se v tomto ohledu celkem polepšil).

Připomínáme, že jde jen o úvahu. Nakolik je blízká realitě, ukáže čas. Pokud by se ale Google skutečně odhodlal investovat do vlastních procesorů, otevřely by se před ním zajímavé možnosti.

'; 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'; } }