Magnum colloquium cum Cliff Click, pater JIT compilation in Java

Magnum colloquium cum Cliff Click, pater JIT compilation in JavaCliff Click β€” CTO Crati (IoT sensoriis ad emendationem processus), conditor et co-conditor plurium satus (including Rocket Realtime School, Neurensic and H2O.ai) cum pluribus felicibus exitibus. Cliff suum primum compilator scripsit saeculo XV (Pascal pro TRS Z-15)! Is notissimus est operi suo C80 in Java (mare Nodarum IR). Hoc compilator mundo ostendit JIT codicem altum qualitas producere posse, quod erat unum e factorum in cessum Javae sicut unum e principalibus suggestis software modernis. Tunc Cliff adiuvit Azul Systems 2-nucleum mainframe fabricare cum programmate puro Javae, quod GC desistit in acervo gigabyto 864 intra 500 milliseconds. In genere, Cliff laborandum est omnibus aspectibus JVM.

 
Hoc habrapost magnum colloquium cum Cliff est. Dicemus de his locis:

  • Transitus ad humili gradu optimizations
  • Facere magnum refactoring
  • Exemplar sumptus
  • Humilis gradu ipsum disciplina
  • Exempla practica in melius perficiendi
  • Cur programmandi lingua creata tua
  • Euismod ipsum Curriculum
  • Technical Provocationes
  • Pauca de mandare destinatio et multi-corei
  • Maximus provocatio in vita

Colloquia peraguntur:

  • Andreas Satarin from Amazon Web Services. In cursu suo operam navavit in inceptis omnino diversis: temptavit NewSQL datorum distribuit in Yandex, nubem deprehensionis systematis Kaspersky Lab, lusorum lusorum in Mail.ru et servitium pro computandis pretiis externis in Deutsche Bank. Interest in probatione magnarum rerum backend et distributarum.
  • Vladimirus Sitnikov from Netcracker. Decem annos laboris in exsecutione et scalability NetCracker OS, adhibita programmatio ab operariis telecomatis ad network automate et instrumentorum retis administratione processuum. Quaero in Java et Oracle Database quaestiones perficiendi. Auctor plus quam duodecim emendationes perficiendi in exactore officiali PostgreSQL JDBC.

Transitus ad humili gradu optimizations

Andrew: Magnum nomen es in mundo JIT compilation, Java, et opus faciendum in genere, ius? 

Cliff: Id est!

Andrew: Incipiamus quibusdam quaestionibus generalibus de opere perficiendi. Quid censes de electione optimizationum inter summus gradus et humilis gradus, sicut opus in gradu CPU?

Cliff: Omnia hic simplicia sunt. In codice celerrime est ille qui numquam fugit. Semper igitur opus est ut ab alto ordiri, de algorithms elaborare. Melior O notatio peiorem O notationem percutiet, nisi aliquae satis magnae constantes interveniant. Humili gradu res durant. Typice, si tibi satis bene reliquum acervum optimized est, et adhuc superest aliquid interesting sarcinae, hoc est humile. Sed quomodo ab altiori gradu committitur? Qui scis satis summus gradus opus factum esse? Bene... nullo modo. Nulla efficitur felis praesent. Quaestionem intelligere debes, quid acturus sis (ut non necessarias gradus in futuro accipias) et tunc profilerarium detegere potes, quod utile aliquid dicere potest. Aliquo loco tu ipse sentis te supervacuis rebus abstulisse et tempus aliquod humile admodum hitur facere. Hoc certe speciale genus artis est. Multi homines superflua agunt, sed tam celeriter movent ut de fructibus solliciti non vacat. Sed hoc est donec obtuse quaestio oriatur. Solet 99% temporis nemo curat quid agam, donec momentum cum res magni momenti in via critica neminem curat. Et hic quisque te incipit molestare de "quare ab initio non perfecte laboravit." Fere semper aliquid ad emendandum. Sed 99% temporis nihil ducitis! Tu modo conaris aliquid operis facere et in processu tuo quid gravius ​​videris. Numquam ante scire potes hanc partem perfectam esse oportere, immo in omni re perfectam esse. Sed hoc impossibile est, et tu id non facis. Semper multa figere - et omnino normales.

Facere magnum refactoring

Andrew: Quomodo operaris in effectu? Hoc problema est exitus secans. Exempli gratia, habuistine umquam laborare de quaestionibus quae oriuntur ex intersectione multum functionality exsistentis?

Cliff: cavere conor. Si scio effectus exitum fore, prius de coding cogito, praesertim cum notitia structurae. Sed haec ipsa saepe postea. Tunc ad extremas mensuras ire debes et facere quod voco "rescribe et vince": satis amplam partem capere debes. Quaedam e codice adhuc rescripta erunt ob quaestiones perficiendas vel aliquid aliud. Utcumque est codicis rescribendi ratio, semper fere melius est maiorem partem rescribere quam particulam minorem. Hoc momento, omnes metu tremunt: "O Deus meus, codicem tantum tangere non potes!" Re vera, aditus fere semper multo melius facit. Vos postulo ut statim in magna problemate suscipiatis, magnum circulum circum ducatur et dicamus: omnia intra circulum rescribam. Multo minor est terminus quam contentum intra illum qui reponi debet. Et si talis limitum delineatio permittat te intus perfecte opus facere, manus tuae sunt liberae, fac quod vis. Cum problema intelligis, processus rewriting facilius est, ita magnos ictus!
Eodem tempore, cum magna RESCRIBO et animadverto ut effectus futurum sit, statim de eo cogitare potes. Solet hoc in rebus simplicibus converti sicut "notitias non imitare, data quam simpliciter administrare, parvam fac." In magnis auctariis, normae sunt modi ad meliores effectus. Et fere semper data circumvolvuntur.

Exemplar sumptus

Andrew: In una podcasts dixisti de gratuita exempla in contextu fructibus. Potesne explicare quid hoc velis?

Cliff: Vtique. In aetate natus sum, cum processus effectus est gravissimus. Atque haec aetas iterum redit - fatum non est sine ironia. In diebus octingentis machinis coepi vivere, primus computator meus cum 256 bytes laboravit. Prorsus bytes. Omnia valde parva erant. Instructiones adnumerari debebant, et dum ACERVUS linguae programmationis incedebant, linguae magis magisque cepere. Congregator erat, tunc Basic, tunc C, et C multa singularia curabat, sicut mandare destinatio et instructio lectio. Sed omnia ibi satis perspicua erant, et si monstrarem instantia variabilis, tum onere acciperem, et notum est huius instructionis sumptus. Ferramenta certum numerum cyclorum machinarum producit, unde exsecutio rerum diversorum velocitas simpliciter computari potest, additis omnibus mandatis quae tu properas currere. Singulis compara/test/ramam/call/load/morem addi poterant et dixerunt: tempus tibi est exsecutionis. Cum opus in meliori operatione perficiendum, certum attende quid numeris parvis cyclis calidis respondeat. 
Sed simul ac ad Javam, Pythonem et similia vertas, celerrime ab odio gradu humili removes. Quid sumptus est vocatum urguet in Java? Si JIT in HotSpot est verum inlined, oneret, sed si hoc non fecerit, functio vocationis erit. Cum vocatio in calido ansa est, omnes alias optimizations in illa ansa vincet. Ergo verum pretium multo altius erit. Et statim facultatem amittes videndi nummum codicem et intellege nos in terminis processus horologii celeritate, memoria et cella adhibita esse debere. Haec omnia iucunda fiunt solum si vere ad effectum perducantur.
Nunc versamur in condicione ubi celeritatum processus vix per decennium creverunt. Antiqui dies revertuntur! Bonum linum effectus iam numerare non potes. Sed si subito computationem parallelam ingredieris, incredibilis difficilis est, omnes te sicut James Bond intuentur. Accelerationes decemplices hic plerumque occurrunt in locis ubi aliquis aliquid messuit. Concurrency multum laboris requirit. Ut is XNUMXx speedup, sumptus exemplar intelligere debes. Quid et quantum constat? Quod ut facias, intelligere debes quomodo lingua in ferramentis subjecta congruat.
Martin Thompson magnum verbum elegit pro suo blog Mechanica Sympathia! Opus est ut intellegas quid ferramenti acturus sit, quam exacte facturus sit, et cur primum quid agat. Hoc utens, satis facile est incipere instructiones computare et exire ubi tempus exsecutionis existit. Si aptam disciplinam non habes, tantum catum nigrum in cella obscuro quaeris. Video homines optimizing effectus omni tempore qui nullam habent ideam quid infernum faciunt. Multum patiuntur et non multum proficiunt. Et cum eandem partem codicis capio, in duobus minutis autocinetis labuntur et celeritatem quinque vel decem obtinent, similes sunt: ​​bene, quod non est aequum, iam te meliorem esse cognovimus. Prodigiosus. Quid loquor... exemplar sumptus est de quali codice quod scribis et quam celeriter in media in pictura magna decurrit.

AndrewEt quomodo potes in capite tuo talem servare volumen? Hoc magis fit experientia, an? Unde talis experientia venit?

CliffBene, expertus sum non facillime. Programma in Coetu reduximus in dies, quo intelligeres singulas disciplinas. Stultus sonat, sed quia tunc Z80 institutio paro semper in capite meo permansit, in memoria mea. Nomina hominum non memini intra minutum loquendi modum, sed codicem memini scriptum abhinc annos XL. Ridiculum est, syndrome similis est "stultus physicus".

Humilis gradu ipsum disciplina

Andrew: Estne facilior via ingrediendi?

Cliff: Ita vero et minime. Ferramenta nos omnes usus non multum mutato tempore. Quisque utitur x86, exceptis brachiis Suspendisse potenti. Si non facis aliquod genus inembrandi, idem vales. Bene, deinde. Mandata quoque non per saecula mutata sunt. Opus est tibi ire et scribere aliquid in contione. Non multum, sed satis intelligere incipimus. Rides, sed graviter loquor omnino. Oportet te intellegere correspondentiam linguae et odio. Post hoc opus est tibi ire et scribere paululum et facere breve ludibrium compilator pro lingua ludibrii. Toy-similis significat necesse est ut in rationabili temporis quantitate conficiatur. Super simplicibus potest esse, sed oportet praecepta generare. Actus generandi instructionem adiuvabit ut sumptus ad exemplum pontis accipias inter codicem summus gradus quem quisque scribit et codicem machinae quae in ferramentis currit. Haec correspondentia comburetur in cerebro illo tempore quo compilator scriptus est. Etiam compilator simplicissimus. Post hoc, inspicere potes in Java et quod hiatum suum semanticum multo profundius est et multo difficilius pontes super eum aedificare. In Java, multo difficilius est intelligere utrum pons noster bonus an malus evaserit, quid excidat, quid non. Sed opus est aliquo genere principii quo codicem inspicias ac intellegis: β€œyah, hoc accipiter inlineari debet omni tempore”. Et tunc evenit, ut nonnumquam hoc fiat, excepto casu, cum modus nimius fit, et incipit JIT omnia inclinare. Executio talium locorum statim cognosci potest. Plerumque getters bene operantur, sed tunc magnas calidas ansas spectas et scito esse munus aliquod vocat circum volitare qui nesciunt quid agant. Haec quaestio de diffuso usu getters, causa cur non inlineatur, non liquet an sint res. Si basi super parvam codicem, meminisse potes et tunc dicere: hoc est, et hoc est novo. In basi amplo codice, unumquodque munus historicum suum vivit, quod in universum nulli notum est. Profiler dicit nos 24% temporis in aliqua ansa perdidisse et intelligere quid haec ansa facit, opus est singulas functiones intus intueri. Impossibile est hoc intelligere sine studio functionis, quod processus intelligendi graviter retardat. Quam ob rem Getters et peregrinis non utor, novum gradum perveni!
Ubi ut sumptus exemplar? Bene aliquid legere potes, scilicet... Sed optime agendum puto. Faciens parvum compilator erit optima via ut exemplar sumptum intelligas et in caput tuum idoneus. Parvus compilator idoneus ad programmandum Proin munus est incipientis. Ita dico, si iam habeas programmandi peritiam, satis erit. Haec omnia sicut chordae parsing quas habes in quadam expressione algebraica, instructiones mathematicorum operationum inde recto ordine extrahendo, rectos ex registris capientes β€” haec omnia statim fiunt. Quod dum feceris, imprimetur in cerebro tuo. Cogito omnes scire quid compilator faciat. Et hoc exemplum sumptus dabit intellectum.

Exempla practica in melius perficiendi

Andrew: Quid aliud debes operam dare cum operando in fructibus?

Cliff: Data structurae. Viam istas classes diu non docui... Erucae Scholae. Amet erat, sed laboris sit amet eget, vitae etiam ac! OK. Itaque in una ex magnis et iucundis generibus, "Ubi vestra opera eundum est" exemplum dedi studiosorum: duo et dimidium gigabytae de fintech datae ex fasciculo CSV legebantur et tunc computare numerum productorum venditorum debebant. . Notitia fori regularis tick. UDP facis ad textum formatum cum 70s converti. Chicago Mercantile Commutatio - omnium rerum ut butyrum, frumentum, soybeans, similia sunt. Numerare necesse fuit has res, numerum negotiorum, volumen mediocris motus pecuniarum et bonorum, etc. Satis simplex est mathematica negotiatio: codicem productum inveni (id est 1-2 characteres in tabula Nullamtica), sume quantitatem, unum addito instrumento artis, adde volumen, adde valorem, et alia copulabis. Simplicissimum math. Ludibrium exsecutio valde directa erat: omnia in fasciculo sunt, lima perlego et per illam moveo, singulas tabulas in chordas Javas dividens, res necessarias in eis quaerens et eas iuxta mathematicas supra descriptos addens. Et in aliquo humili cursu operatur.

Cum hoc accessu, patet quid agitur, et ratio parallela non adiuvat, vox? Evenit ut quintuplex effectus augeri possit simpliciter eligens rectas notitias structuras. Atque hoc mirum etiam programmatores periti! Peculiariter in casu dolum fuit ne prouinciis in calido ansa memoriam facere debeas. Bene, hoc non tota veritas est, sed generaliter - non debes extollere "semel in X" cum X satis amplum est. Cum X duo gigabytae et semis, non aliquid "semel per litteram", vel semel per lineam, vel semel per campum collocare debes, quid tale. Hoc est, ubi tempus consumitur. Quomodo etiam hoc opus facit? Finge me vocationis String.split() aut BufferedReader.readLine(). Readline chorda e statuto bytes venientium super retiaculum, semel pro singulis lineis, pro singulis centenis miliones versuum. Hanc lineam accipio, parse et proice abs te. Cur ego hoc abicio - bene, iam processi, omnia sunt. Pro quolibet byte ex his 2.7G legentur duae characteres in linea scribentur, id est, iam 5.4G, et nihil amplius illis opus est, ut abiciantur. Si ad memoriam bandam spectes, oneramus 2.7G quod per memoriam et memoriam in processu bus percurrit, et tunc duplo tantum mittitur ad lineam in memoria iacentem, et hoc totum aduncum, quando singulae novae lineae creantur. Sed opus est legere, ferramenta legit, etsi omnia postea adunca sunt. Et scribendum habeo quia lineam creavi et cella pleni sunt - cella 2.7G accommodare non potest. Sic in omni byte lego, duos bytes lego, et duos bytes scribo, et in fine habent rationem 4:1 - in hac ratione memoriam longitudinis perdimus. Et tunc evenit ut si facio String.split() - Hoc ultimo tempore non est, sit alius intus agros 6-7. Ita ordo classicus lectionis CSV ac deinde chordarum parsing resultat in memoriam latitudinem vastitatis circiter 14:1: relativum ad id quod actu habere velis. Si haec excerpta abieceris, velocitatem quintuplum licebit.

Etiam non quam difficile. Si codicem e recto angulo spectes, totum fit plane simplex, quod problema cognoveris. Memoriam omnino collocare non desinas: solum problema est quod aliquid collocas et statim perit, et in via magnum urit auxilium, quod in hoc casu est memoria. Et haec omnia in fructibus guttae resultant. Die x86 solere debes cyclos processus incendere, hic autem omnia memoria multo ante exusta es. Solutio est ad redigendum quantitatem missionis. 
Altera pars quaestionis est quod si profiler cum memoria clavum excurrit, statim cum fit, soles expectans cella reverti, quia plena est purgamentum quod modo produxisti, omnes illas lineas. Omne igitur onus vel copia operandi tarda fit, quia ad missas cella ducunt - totus cache tardus factus est, expectans purgamentum ut ab eo discederet. Ideo profiler mox ostendet sonum temere calidum per totam ansam illitum - nullam disciplinam calidam separatam vel in codice collocabit. Tantum sonitus. Et si cyclos GC spectes, omnes sunt generationes Young et super ieiunium - microseconds vel maximum milliseconds. Post haec omnia ilico moritur memoria. Decies gigabytarum collocas et secat eos et secat et iterum secat. Haec omnia celerrime fiunt. Evenit ut cyclos GC viles sint, strepitus tepidus per totum cyclum, sed 5x celeritatem obtinere volumus. Nunc in capite tuo aliquid claude et sana: "cur hoc est?" Memoria detracta redundantia in classic debugger non monstratur, debes currere ferrariae operationis contra debugger et videre te ipsum et directe. Sed hoc non potest ex his tribus directe suspicari. Tertium signum est cum quid tu videris elucidas, quaere profiler, et respondet: "Decies centena millia ordines fecisti, GC gratis laboravi." Quod ubi evenit, scias te etiam multa creasse, et totam lane memoriam exustam esse. Hoc modo figurae est, sed non apparet. 

Problema est in structuris notitiis: structura nuda subiecta omnia quae fiunt, nimis ampla est, 2.7G in orbe est, cuius rei exemplum facit valde inconveniens - vis eam onerare e retis byte quiddam statim. in regestos, ne ad lineam commeo quinquies-scribas. Infeliciter, Java non dat tibi talem bibliothecam sicut partem JDK defaltam. Sed hoc leve est? Essentialiter hae sunt 5-10 lineae codicis quae ad efficiendum tuum quiddam chordae oneratus adhibebuntur, quae mores chordae in genere repetit, dum involucro circa quiddam byte subest. Quo fit, ut fere quasi chordis opus sit, re vera indicibus quiddam moventibus, et bytes cruda non alicubi transcribenda, atque ita etiam atque etiam identidem eaedem bubones redduntur; Ratio operativa laetus est ut ea quae destinata est in te suscipias, ut occulta bilinguis horum bifariam, et non iam teris per infinitam rerum superfluarum notitiarum rivulum. Obiter intellegis quod operando cum GC, praestatur singulae memoriae destinatio post ultimum cyclum GC processui non apparebit? Haec igitur omnia in cella fieri non possunt, et tunc temporis utilitas 100 caret. Cum regula operando, in x86, subtrahendo tabularium ex memoria, sumit 1-2 cyclos horologii, et cum primum hoc incidit, solvis, solvis, solvas, quia memoria tota die est. Novem caches β€” atque haec est impensa memoriae destinatio. Verus valor.

Aliis verbis, notitia structurae difficillimum est mutare. Et cum scias quod iniquum te elegisse structuram datam, quae postea occidet, multa opera fieri solet, sin autem non, res deteriores erunt. Primum, data structurae cogitare debes, hoc interest. Pretium principale hic incidit in structurarum notitiarum pinguium, quae incipiunt utendum stilo "exscripsi structuram X in notitia structurae Y, quia similis figurae Y melioris". Exemplar autem operationis (quod vile videtur) in memoriam latitudinem extenuat et illud ubi omne tempus perditum supplicium sepelitur. Si chorda gigantis JSON habeo et in lignum domnum POJOs exstructum vel aliquid vertere volo, operatio parsing chordae illae et POJO aedificandae, et postea iterum accessio POJO, in superfluis sumptibus proveniet - est. non vilis. Nisi si POJOs multum discurras saepius quam chorda curris. Offa, potius potes tentare filo minui et extrahere tantum quod inde opus est, nec vertendo in POJO. Si haec omnia fiunt in via, ex qua maximus effectus requiritur, non POJOs tibi, opus est aliquo modo in lineam directe fodere.

Cur programmandi lingua creata tua

Andrew: Dixisti ut sumptus exemplar intelligas, opuscula lingua tua scribere debes.

Cliff: Non lingua, sed compilator. Lingua et compilator duo diversa sunt. Maxima differentia est in capite tuo. 

Andrew: Viam experimini, quantum scio, linguis vestris creandis. Quod?

Cliff: Quia possum! Ego semi-recessit, sic amabam. Aliorum linguas exsequendo vitam omnem habui. Multum etiam laboravi in ​​stilo meo coding. Tum etiam quia difficultates in aliis linguis video. Video meliores mores ad res familiares facere. Eos utamur essent et. Taedet tantum me videre problemata in me ipso, in Java, in Pythone, in alia lingua. Nunc scribo in React Nativum, JavaScript et Ulmus amat quod non de otio, sed de opere activo. Etiam in Pythone scribo et, maxime verisimile, in machina discendi operas in Java backends fabricabit. Multae linguae vulgaris sunt et omnes lineamenta iucunda habent. Unusquisque suo modo bonus est et haec omnia simul efficere conari potes. Itaque quae intersunt studeo me, mores linguae, cum rationabili semantics ascendere conatur. Et ego hactenus succedens! In momento luctantis cum memoria semanticis, quia eam in C et Java similem habere volo, et exemplum et memoriam fortem memoriam semanticorum oneribus et thesauris possideo. Eodem tempore, in Haskell similem coniecturam generis automatici habent. Hic, Haskell instar generis coniecturam cum memoria operis in utroque C et Java miscere conor. Hoc feci postremis 2-3 mensibus, exempli gratia.

Andrew: Si linguam struis quae meliores facies ex aliis linguis accipit, censesne aliquem contrarium facturum: ideas tuas sume et illis utere?

Cliff: Ita prorsus, quam novae linguae apparent! Quare est similis Java C? Quia C syntaxin bonam habuit, quam omnes intellexerunt et Java inspiravit hac syntaxin, addens genus securitatis, limites ordinatas iniectas, GC, et etiam nonnulla emendavit ex C. sua addiderunt. Sed tuerunt multum, vox? Omnes gigantes qui ante te venerunt, stat in humeris β€” quomodo fiat progressus.

Andrew: Ut intelligam, lingua tua memoria salva erit. Cogitasti de exsequendo aliquid simile mutuum tessellati a Rubigo? Aspexisti eum, quid de illo censes?

CliffBene, scripsi C pro seculis, cum omnibus istis mallocis et liberis, et manualiter in vita sua disponendi. Scis, 90-95% vitae manually moderatae tempus eandem structuram habet. Ipsum ipsum dolor sit facere tincidunt. Compilator ut simpliciter velim tibi dicere quid ibi agatur et quid cum factis tuis egeris. Quaedam enim tessellati hoc facit ex arca. Et ipsa informationes proponere debet, omnia intelligere, ac ne gravare me hoc intellectui exhibendo. Facere debet analysin saltem localem, et solum si deficit, addere oportet adnotationes typus quae vita describet - et talis schema multo magis implicatum est quam tessellatus mutuum, immo quaevis memoria tessellatus exsistens. Optio inter "omnia bona" ​​et "quidquam ego non intellego" - immo melius aliquid esse debet. 
Itaque, ut qui multum codicem in C scripserit, puto quod imperium vita automataria sustentationem maximi momenti est. Etiam ego saturi sum quanto Java memoriam utitur et querimonia principalis GC est. Cum memoriam in Java collocaveris, memoriam in cyclo GC ultimo locali non recipies. Quod non contingit in linguis accuratioribus memoriae procuratio. Si mallocum vocas, statim memoriam obtines quae solitus erat usus. Solet facere aliqua tempora cum memoria et statim remittere. Et statim ad mallocum piscinam redit, et cyclus mallocus secundus iterum extrahit. Ergo usus actualis memoriae reducitur ad statuta viventium dato tempore, plus libero. Et si omnia turpiter non diffluant, plurima memoria in cella et processus desinit et cito operatur. Sed requirit multam memoriam manualem administrationem apud malloc et liberum vocatum in recto ordine, in loco suo. Rubigo hoc proprie de se ipso tractare potest, et in multis casibus meliores effectus dant, cum memoria consumptio in modo computationis hodiernae coarctatur - sicut opponitur exspectatio proximi GC cycli ad memoriam liberandam. Quam ob rem admodum interesting venimus ad emendandi rationem faciendam. Et satis potentem, dico, feci talia in notitia processus pro fintech, et hoc mihi permisit celeritatem circiter quinquies. Satis magnum est quod boost, praesertim in mundo ubi processus citius non sunt questus et adhuc meliores exspectamus.

Euismod ipsum Curriculum

Andrew: Volumus etiam circa res gestas in genere quaerere. Surrexeris ad eminentiam cum opera tua JIT in HotSpot et deinde ad Azul, quae etiam societas JVM est. Sed iam plus in ferramentis quam in programmate laboramus. Et tunc subito ad Big Data et Machina Learning switched, et deinde ad fraudem deprehensio. Quomodo hoc factum est? Haec evolutionis locis longe diversa sunt.

Cliff: Programma satis diu fui et multum potui diversis generibus habere. Et cum dicunt: β€œO, tu es qui JIT pro Java!”, semper ridiculus est. Prius autem laboravi in ​​clone de PostScript - lingua, qua Apple olim pro typographis laseris eius usus est. Et antea feci de lingua Forth exsequenda. Communis thematis me existimo instrumentum evolutionis esse. Tota vita mea instrumenta conficiendi sunt quibus alii homines frigidos programmata scribunt. Sed etiam in evolutione systemata operandi, aurigae, nuclei debuggers nuclei, linguas evolutionis OS involvit, quae levia sunt, sed tempore magis magisque intricata facta sunt. Sed res praecipua adhuc instrumentorum evolutionis est. Magna pars vitae meae inter Azul et Solem transiit, et erat fere Java. Sed cum ingressus sum in Big Data et Machina Doctrina, posui meam libidinem hat retro in et dixit, "O, nunc quaestio non levis est, et multum interesting res geruntur et homines faciunt." Magnum hoc est iter ad progressionem capiendam.

Ita, vere amores computando distribuit. Primum officium meum sicut discipulus in C, in vendo project. Haec computatio distributa est in xxxiii Zilog Z80 quae notitias collectas pro analog OCR, a reali analogo analysi producto. Erat frigidum et omnino insanum argumentum. Sed problemata erant, aliqua pars non recte agnita erat, ut picturam sumeres et ostenderes homini qui iam oculis legere poterat et referre quae dicebat, et ideo opera data erant, et haec opera. lingua sua habuit. Reversus erat qui discursum totum hoc - Z80s in parallela cum vt100 terminalibus currentibus per hominem currentem erat, et exemplar programmationis parallelum erat in Z80. Pars communis memoriae communis omnibus Z80s intra figuram stellam; Backplanum etiam commune erat, et dimidium arietis intra retiaculum dividebatur, et alia medietas privata erat vel ad aliud ibat. Ratio parallela complexa significanter distributa cum memoria communi ... semi-partita. Cum hoc .... vel meminisse non possum, alicubi in medio 80s. Jamdudum. 
Ita, supponent XXX annos admodum abhinc diu exstitisse problemata computatione distributa admodum diu extitisse, homines diutissime bellantes; Beowulf-cluster. Tales botri similes vide. fictus erat memoria communis cum paginarum memoria in x86 munimento, et si ad hanc paginam scripsisti, tunc aliis processoribus indicavimus quod, si accessum ad eandem memoriam communicavit, necesse esset a te onerari, et sic aliquid quasi protocollum sustentare. cache cohaerentia apparuit et programmatio huius rei. Novus conceptus. Aliud problema realis erat. Haec omnia operata sunt, sed celeriter perficiendi problemata obtinuit, quia nemo exempla in satis aequo gradu perficiendi intellexit - quae exemplaria ibi memoria accesserunt, fac ut nodos non sine fine se mutuo pingat, et sic porro.

Quod pervenerunt in H2O, ipsum tincidunt ipsum esse, auctores sunt determinandi ubi parallelismus latet et ubi non est. Accessi cum exemplari coding qui scripto summus perficiendi codicem facile et simplex fecit. Sed scriptura tarda cursus codicis difficilis est, mala inspiciet. Opus est ut serio studeas ut codicem tardum scribas, methodis non modulis uti debebis. In codice braking primo aspectu visibilis est. Quam ob rem codicem festinanter scribere solere, sed quid faciendum sit in communi memoria habebis. Hoc totum ligatum est ad magnas vestes et mores similis est cum non-volatilibus magnis vestimentis in parallel Java. Opto, opinor, duo fila stamina pari ordine scribere, quorum alterum vincit, alterum igitur amittit, et quod unum sit nescis. Si non volatilia sunt, ordo potest esse quidquid vis - et hoc vere bene operatur. Homines de ordine operationum vere curant, in locis rectis volatile ponunt, et problemata in locis rectis scientifica actis perficiendi exspectant. Alioquin simpliciter scriberent codicem in forma ansarum ab 1 ad N, ubi N sunt aliquae trilliones, sperantes omnes casus implicatos sponte fient parallelos β€” et ibi non operatur. Sed in H2O hoc nec Java nec Scala est, si vis eam considerare potes "Java minus minus". Haec stylus programmandi luculentissimus est et similis scripturae simplicis C vel Javae codicis cum loramenta et vestitu. Sed simul processus in terabytis memoria potest. uti adhuc H2O. Utor eo subinde in diversis inceptis - et adhuc est velocissimum, justo temporum velocius quam competitores eius. Si magna Data cum data columnari vales, difficillimum est H2O verberare.

Technical Provocationes

Andrew: Quid tua maxima provocatio in tota curriculo fuit?

Cliff: Nosne tractamus partem technicam vel non-technicam litis? Maximas provocationes dixerim non technicae. 
Quantum ad technicas provocationes. non solum eos vicit. Nescio quidem quid maximus unus fuit, sed aliquae res erant satis interesting quae temporis contentionem mentis occupaverunt. Cum ad Solem ivi, certus sum me compilator ieiunium facturum, et fasciculus seniorum respondens dixit me nunquam impetraturum esse. Sed hanc viam secutus sum, compilator in tabulario allocato scripsi, et satis celeriter erat. Tam celeriter quam moderni C1 erat, sed allocator multo tardior tunc erat, et in visu erat magna quaestio data structurae. Mihi opus fuit ut tabularium graphicum allocatorem scriberet nec dilemmam inter codicem significativum et velocitatem intellexi, quae in illa aetate exstitit et magni momenti fuit. Evenit ut structurae datae magnitudinem latibulum in x86s illius temporis solere excedere, ideoque, si initio posui tabularium allocatorem operaturum 5-10 centesimas totius temporis Jitterae, re vera evenit. L sentio.

Procedente tempore, compilator mundior et efficacior factus est, codicem terribilem generans in pluribus casibus cessavit, et effectus in dies magis coepit assimilari quod a C compilator producit, nisi forte scribis aliquid crap quod etiam C non accelerat. . Si codicem ut C scripseris, habebis sicut C in pluribus. Et quo longius accessisti, eo saepius codicem habuisti qui cum gradu C asymptotico inciderat, tabularium allocatorem tamquam aliquid completum inspicere incepit. Opus perrexi de allocatore ut melius faceret excerpta. Segnior et tardior factus est, sed melius et melius, in quibus nullus alius posset obire. In actis mandare allocatorem dare potui, mensem laboris ibi sepeli, et subito totum codicem 5% citius exequi incipiet. Hoc tempore factum est et tabulario allocator aliquid operis artis factus est - omnes eum amaverunt vel oderunt, homines ex academia quaesiverunt de themate "cur omnia sic fiunt", cur non. linea scanet quid interest. Respondetur adhuc idem: allocator innixus graph coloro plus diligentissimus labor cum codice quiddam est = telum victoriae, optimum compositum quod nemo potest vincere. Et hoc est magis non evidens. Cetera omnia, quae compilator facit, satis pervestigata sunt, licet etiam ad artem redacta sint. Feci semper ea quae compilator in artificio vertere putabantur. Sed nihil eorum extraordinarium fuit praeter tabulas allocatas. Dolum caveat caedere sub onere et, si hoc incidit (si interest fusius explicare possum), id significat quod infensius intendere potes, sine periculo cadendi super kincam in schedula perficiendi. In diebus illis erant fasciculus compilariorum plenus cum crepundiis et sibilis suspensus, qui actis mandarent allocatores, sed nemo alius id facere potuit.

Problema est quod si rationes inlineandi, augendi et augendi inlineandi aream subiectam addas, copia bonorum usuum ilico numerum tabularum superat et eas incidere debebis. In gradu critico plerumque venit cum allocator remittit, et unus bonus ad caesuram candidatus alius valet, aliquos plerumque res feras vendes. Valor inlineandi hic est ut partem capitis perdas, caput vocandi et salvandi, valores intus videre potes ac ulteriora optimize ea. Sumptus inlinendi est quod magnus numerus valorum vivorum formatus est, et si tabularius tuus allocator plus quam necesse ardet, statim amittis. Maxime igitur allocatores problemati habent: cum inlinere certam lineam transeat, omnia in mundo exscindi incipit et fructibus latrinam incalescere potest. Qui compilator efficiunt, addunt nonnulla Heuristica: exempli gratia, desinere incipiendo ab aliqua satis magna magnitudine, cum prouinciis omnia perdant. Hoc est quomodo MACULA in graphi faciendo formatur - tu inline, inline, effectus lente crescit - et deinde bombum! β€” cadit sicut sinciput velox quod nimium derecta. Ita omnia operata ante adventum Javae. Java multum propensius requirit, ideo habui ut allocatorem meum multo ferociorem redderem ut exaequat potius quam fragore, et si nimium inclinas, incipit effundere, sed tunc "non plus effusionis" momentum adhuc venit. Ut sit amet observatione, et ex nullo modo ad me venit, non patet, sed bene solvit. Inclinans infestam tuli et me ad loca ubi Java et C opus faciendum per latus suscepit. Vere prope sunt - Scribere possum Java codicem signanter velocius quam C codicem et similia, sed in mediocris, in magna rerum imagine, fere comparabiles sunt. Huius meriti partem puto esse tabularium allocatorem, qui me quam stulte quam maxime inlinere sinit. Modo inline omnia video. Quaeritur hic num allocator bene operatur, an intellectus effectus in codice laborat. Magna provocatio haec fuit: haec omnia intelligere et facere opus est.

Pauca de mandare destinatio et multi-corei

Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€: Problemata quasi destinatio registri vi- dentur quasi quaedam aeternae et infinitae argumenti. Miror, an idea quae unquam visa est polliceri, et postea in usu defuisse?

CliffProfecto! Mandare destinatio area est in qua conaris aliquas Heuristicos invenire ad problema NP-completum solvendum. Et numquam ullam consequatur, iure? Hoc autem est impossibile simpliciter. Vide, Ante tempus compilationem - etiam male operatur. Colloquium hic de aliquibus mediocris casibus est. De effectione typica, sic potes ire et metire quod bonum putas esse proprium opus - post omnia operantur ut illud emendare possis! Mandare destinatio est thema circa omnia perficiendi. Cum primum exemplar habes, operatur et pingit quod opus est, opus perficiendi incipit. Scire debes bene metiri. Quid interest? Si data clara habes, diversas areas intueri potes et videre: yeah hic profuit, sed est ubi omnia fregit! Quaedam bonae notiones veniunt, novas Heuristicas addis et subito omnia incipit paulo melius in mediocris. Vel non mauris. Fasciculum causarum habui ubi pugnabamus pro quinque centesimis faciendis quae differentiam nostram progressionem a priore allocato. Omne tempus hoc simile est: alicubi vincis, alicubi perdis. Si instrumenta analysi perficiendi bene habent, ideas amittere et cognoscere quare deficiunt potes invenire. Fortasse omnia ut est relinquenda est, vel forte graviorem accessionem ad bene-tunationem sumens, vel ad exitum et ad aliud figendum. Totum fasciculum rerum est! Hoc caesim frigidum feci, sed hoc quoque opus est, et hoc unum, et hoc unum - et tota complexio eorum meliora facit. Et loners falli potest. Haec est natura operis faciendi in NP-plenis quaestionibus.

Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€: Sensus colligitur res quasi picturae in allocatoribus esse problema quod iam solutum est. Bene tibi placuit, ex eo quod dicis, ita etiam tum valet.

Cliff: Non resolvitur per se. Β« Solvendum Β» est vos, qui converti debetis. Sunt problemata difficilia et solvenda indigent. Quo facto, tempus est ad operandum de fructibus. Opus est igitur ad hoc opus accedere - scamna fac, metrice collige, condiciones explica cum, cum ad priorem versionem revolveris, vetus hack iterum laboratum est (vel vice versa substitit). Nec desistas donec aliquid consequaris. Ut iam dixi, si notiones frigidae sunt quae non laboraverunt, sed in agro destinatio tabularum idearum est proxime infinita. Potes, exempli gratia, publicationes scientificas legere. Quamquam haec regio multo tardius movere coepit et clarius quam in iuventute sua facta est. Sed innumerabiles homines in hoc campo laborantes omnesque eorum notiones conari valent, omnes in alis exspectant. Et quam bona sint, nescias nisi tentas. Quam bene complent omnia alia in allocatore tuo, quia multum facit allocator, et aliquae notiones non operantur in allocatore tuo, sed in alio allocatore facile. Praecipua via ad allocatorem vincendum est materias tardos extra viam trahere et per semitas tardas limites scindere cogat. Si ergo vis currere per GC, iter tardum sume, deoptimize, exceptionem mitte, omnia vasa ista - scis ista rara esse. Vere rara et cohibita sum. Extra opus facis et multum restrictiones in his gressibus tardas removet, sed vere non refert quia tarde et raro iter faciunt. Exempli gratia, indicium nullum - numquam fit iure? Plures vias ad varias res habere debes, sed unam summam impedire non debent. 

Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€: Quid cogitas de multi- core, cum milia nucleorum simul sunt? Hoccine est utile?

Cliff: successu GPU ostendit satis utilem!

Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€: satis speciales sunt. Quid de processibus generalis consilii?

CliffBene, Azul exemplar negotii fuit. Responsum revenit in aetate quando homines praevidere vere amaverunt effectus. Difficilis erat tunc rescribere parallelum codicem. Exemplar H2O coding valde scalabile est, sed exemplar propositum generale non est. Fortasse paulo communius quam cum GPU utens. Loquimurne de multiplicitate rei talis explicandi vel de multiplicitate utendi? Exempli gratia, Azul me docuit lectio interesting, magis non-obvia: parvae cella normales sunt. 

Maximus provocatio in vita

Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€: Quid de provocationibus non-technicis?

Cliff: Maxima provocatio non debet esse benigna et grata hominibus. Quam ob rem ego assidue me inveni in maximis condicionibus conflictationibus. Isti ubi sciebam res erratas esse, sed cum his quaestionibus progredi nesciebant et eas tractare non poterant. Multae difficultates diuturnae per decennium hoc modo ortae sunt. Quod Java in compilatoribus C1 et C2 habet, directa est ex eo. Quod nulla multi-gradu compilatio in Java decem annos in versu facta est etiam directa consecutio est. Patet nos tali ratione indigere, sed non apparet cur non sit. Habui difficultates cum uno fectum... vel globo fabrum. Olim, cum agerem ad Solem, eram... Bene, non solum tunc, fere semper de omnibus meam sententiam habeo. Et verum putavi quod tu modo posses hanc veritatem accipere et indicare caput. Maxime quo iure maxime tempore turpis. Et si hoc non placet aditus... praesertim si erras manifesto et ineptias agis... In genere, pauci homines hanc communicationis formam tolerare potuerunt. Tametsi aliquam, ut me. Vitam meam aedificavi in ​​principiis meritocraticis. Si quid mihi mali ostendis, statim circumagam et dicam: ineptias dixisti. Quanquam, nimirum, et omnia, quae ego paenitet, merita, si quis notabo, et alia facta recte capio. At contra, Improbe me rectum de inprobe magnum recipis totius temporis. Et in relationibus cum hominibus non optime operatur. Non nice studeo, sed obtuse quaestionem quaero. "Nunquam hoc operabitur, quia unum, duo et tria." Et erant similes: Β«O!Β». Aliae consequentiae fuerunt quae fortasse melius ignorare poterant: exempli gratia, quae divortium duxit ab uxore mea et post decem annos tristitiae.

Certamen est provocatio cum hominibus, cum percipiant quid facere possit vel non possit, quid sit maximus et quid non. Multi provocationes de stilo coding fuerunt. Multum adhuc scribo codicem, et in diebus illis etiam retardare debeo quia nimis multa opera parallela agerem et male facerem, pro uno posito. Respiciens, scripsi codicem dimidium pro imperio Javae JIT, mandatum C2. Proximus coder celerrimus scripsit dimidium tam tardum, alterum dimidium tam tardum, et declinationem exponentialem. Septimus homo in hoc versu valde tardus erat - quod semper accidit! Multum tetigi codice. Inspexi qui scripsisset quae sine ulla exceptione codicem suum inspexi, singula recognovi, et adhuc plura scriberem quam ullus eorum. Aditus ad homines non optime operatur. Nonnulli hoc non placet. Quod cum tractare non possunt, omnes querellae incipiunt. Exempli causa, olim dixi coding desinere quod scribebam nimium codicem et in discrimen ipsum dolor erat, et omnia mihi quasi iocus sonuerunt: dude, si reliquus manipulus evanescit, et ego codicem scribo, tu 'Iam perdet dimidium teams. Contra, si codicem scribo, et dimidium manipulum perdis, quod pessimam administrationem sonat. numquam de eo cogitavi, numquam de eo locutus sum, sed adhuc alicubi in capite meo fuit. Cogitatio nebat in tergo mentis meae: "Num omnes cognati mihi?" Ita, maxima mihi quaestio fuit et necessitudines cum hominibus. Nunc me multo melius intellego, diu programmatores fui equos duco, et nunc directe dico populo: scis, ego sum qui sum, et habebis mecum - bene est si sto hic? Et cum agere incipiunt, omnia operantur. Nam nec malus sum nec bonus, nec malas intentiones nec ambitiosas appetitiones habeo, iusta est mea essentia, et aliquo modo vivere debeo.

Andrew: Nuper omnes inceperunt de conscientia sui ipsius introverti, et in genere artes molles. Quid de hoc dicere potes?

CliffImo, quod ab uxore mea divortium prudentiam ac lectionem didici. Quod ex divortiis didici, me intellexi. sic aliis intelligere coepi. Intellige quomodo hoc commercium operatur. Inde alia atque alia reperiuntur. conscientia erat quis sim et qualis sim. quid ago: aut occupato negotio aut fugio conflictum, aut aliud - et hoc ipsum sui conscientiae memet compotem adiuvat. Post haec omnia multo faciliora sunt. Unum quod non solum in me ipso, sed etiam in aliis programmatibus inveni non posse cogitationes verbalize cum in statu motus accentus est. Exempli gratia, coding ibi es, in statu fluxus, et tunc ad te currunt et in hystericis quiritare incipiunt aliquid fractum esse, et nunc extrema consilia contra te capientur. Et verbum non potes dicere quia vis motus in statu es. Cognitio acquisita permittit ut hoc momento te praeparet, superstite ac progredi ad consilium receptum, post quod aliquid facere potes. Ita vero, cum omnia opera quomodo incipias percipere, ingens eventus vitae mutabilis est. 
Ipse verba recta invenire non potui, sed actionum seriem recordatus sum. Haec reactionem tam corporis quam verborum est, et spatio opus est. Tale spatium, in rhoncus sensu. Haec prorsus explicanda sunt, ac deinde statim secede - pure physice gradum auferes. Cum verbo sileo, condicionem passivam procedere possum. Cum adrenaline cerebrum tuum attingit, permutat te in pugna vel in modum fugae, nihil amplius dicere potes, nihil - iam stultus es, verberum machinator, inhabilis ad honestam responsionem vel etiam oppugnationem impediens, et oppugnator liber est. iterum atque iterum oppugnare. Primum te iterum fiere debes, potiare, e modo pugnae vel fugae exi.

Et ad hoc opus est spatio verborum. Libero justo purus. Si omnino aliquid dicis, tunc prorsus potes dicere, et tunc vade et vere tibi "spatium" invenies: ambula ambula in parco, te in imbre claude - non refert. Summa est ad tempus disiungo ab illo situ. Quamprimum avertas paucis secundis saltem secundis, redit imperium, coepisti sobrie cogitare. "Bene, non sum quidam stultus, ego res stultas non facio, homo satis utilis sum." Cum tibi persuadere potuisti, tempus est progrediendi deinceps: quid factum sit intelligendo. Impetu facto, unde non sperasti, improbus, vilis insidiatus es. Hoc est malum. Proximum est intelligere cur oppugnator hoc indiguerit. Vere, quare? An quia ipse furit? Quid insanit? Exempli gratia, quia se daturos et responsabilitatem accipere non potest? Hoc modo totam rem diligenter tractamus. Sed hoc spatium decurrere, verborum spatium requirit. Primus gradus est verborum contactum abrumpere. Disceptationem fuge verbis. Abrogare, discedere quam celerrime. Si colloquio telephonico est, modo suspende - haec scientia didici ex communicando cum uxore mea. Si colloquium non uspiam bonum eat, modo "vale" dic et suspende. Ex altera parte telephoni: "blah blah blah", respondes: "yeah, vale!" et suspende. Finem modo conversationis es. Quinque post minutis, cum facultas cogitandi ad te redit, paulum refrixerit, fieri potest de omnibus cogitare, quid postea acciderit. Incipe et exponere cogitationem responsionem, quam ex affectione reagit. Mihi, in conscientia auto-ruptio, id ipsum erat quod in casu passionis innixi loqui non possum. Exire de hac re publica cogitare et cogitare quomodo quaestiones respondeant et compensent - haec sunt recti gradus in casu, cum loqui non potes. Via facillima est fugere a situ in quo motus motus se manifestat et simpliciter desinunt in hac accentus participatione. Post hoc potes cogitare, cum potes cogitare, poteris loqui et cetera.

In via, in curia, advocatus adversarius hoc tibi facere conatur - nunc patet cur. Quia habet te ad talem statum opprimendum ut ne nomen quidem proferre possis, verbi gratia. Verassimo sensu loqui non poteris. Si hoc tibi contigerit, et si scias quod te ipsum invenies in loco ubi verbalia proelia furunt, in loco curiae, tunc cum advocato tuo potes venire. Consurget tibi advocatus, et resistet verborum impetus, et in iure perfecte faciet, et amissus spatium rhoncus ad te revertetur. Exempli gratia, familiarem meam duobus temporibus appellare debebam, iudex satis amicabilis erat de hoc, sed advocatus adversarius clamabat et clamabat me, ne verbum quidem ore proferre potui. His in casibus usus mediator optime mihi facit. Mediator sistit omnem hanc pressionem quae tibi in continuo inundat flumine, necessarium invenis spatium moduli, et cum eo redit facultas loquendi. Totus hic cognitionis campus est, in quo multum est studere, multum in te ipso cognoscere, et haec omnia in summum gradum opportuna sententiarum rerum, quae pro diversis hominibus sunt diversae, versatur. Nonnulli quaestiones supra descriptas non habent, plerumque homines qui venditiones sunt professionales eas non habent. Omnes hi qui vivam faciunt verbis, cantores, poetae, religiosi principes et politici, semper aliquid habent quod dicant. Talia problemata non habent, sed ego.

Andrew: inopinatum. Magna, multum iam locuti sumus et tempus est ut hoc colloquium finiamus. Certe in colloquio conveniemus et hunc dialogum continuare poterimus. Vide tu Hydram!

Colloquium tuum cum Cliff in Hydra 2019 pergere potes, quod die 11-12 mensis Iulii anno 2019 in St. Petersburg habebitur. Veniet cum fama "The Azul Hardware Transactional Memoria experientia". Tesseras potest possideri in rutrum.

Source: www.habr.com