225 matches
-
expresiile pur funcționale nu au memorie sau efecte laterale, dacă nu se ia în considerare calcularea rezultatului ca efect lateral. Aceasta înseamnă că funcțiile pure au câteva proprietăți utile, dintre care multe pot fi folosite pentru optimizarea codului: Deși multe compilatoare pentru limbaje de programare imperative detectează funcțiile pure, și efectuează eliminarea de subexpresii comune la apelul funcțiilor pure, ele nu pot să facă acest lucru întotdeauna pentru bibliotecile precompilate, care în general nu expun această informație, împiedicând astfel optimizările ce
Programare funcțională () [Corola-website/Science/308128_a_309457]
-
detectează funcțiile pure, și efectuează eliminarea de subexpresii comune la apelul funcțiilor pure, ele nu pot să facă acest lucru întotdeauna pentru bibliotecile precompilate, care în general nu expun această informație, împiedicând astfel optimizările ce implică aceste funcții externe. Unele compilatoare, cum ar fi gcc, adaugă cuvinte cheie suplimentare pentru ca un programator să poată marca explicit funcțiile externe ca pure, permițând astfel aceste optimizări. Fortran 95 permite declararea funcțiilor ca fiind "pure". Iterarea, în limbajele funcționale, se realizează de regulă prin
Programare funcțională () [Corola-website/Science/308128_a_309457]
-
funcțiilor ca fiind "pure". Iterarea, în limbajele funcționale, se realizează de regulă prin recursivitate. Funcțiile recursive se autoapelează, permițând efectuarea unei operații în mod repetat. Recursivitatea poate necesita reținerea unei stive, dar tail recursion poate fi recunoscută și optimizată de compilator prin transformarea ei într-un cod similar cu cel utilizat pentru iterații în limbajele imperative. Standardul limbajului Scheme necesită recunoașterea de către implementări și optimizarea tail recursion. Șabloanele de recursivitate des întâlnite pot fi luate în considerare prin utilizarea de funcții
Programare funcțională () [Corola-website/Science/308128_a_309457]
-
atenție sporită pentru optimizări. Limbajele de programare funcțională au fost percepute ca fiind mai puțin eficiente în utilizarea procesorului și a memoriei decât cele imperative. Totuși, imuabilitatea datelor poate, în multe cazuri, să conducă la eficiență a execuției, deoarece permite compilatorului să facă presupuneri care nu pot fi făcute cu certitudine într-un limbaj imperativ. Cea mai gravă pierdere de performanță este exponențială. Situații în care asemenea pierderi de performanță apar foarte rar în practică. Programele imperative tind să pună accent
Programare funcțională () [Corola-website/Science/308128_a_309457]
-
oficial cu CUDA: Arhitectură CUDA constă în următoarele componente de bază: Un program scris pentru CUDA apelează o serie de nuclee paralele. Un nucleu se execută în paralel pe un set de thread-uri. Gruparea thread-urilor în blocuri rămâne la latitudinea compilatorului sau a programatorului. Procesorul grafic instanțiază un program nucleu ("kernel program" în engleză) într-o grila de blocuri de thread-uri. Fiecare thread din interiorul unui bloc execută o instanță a nucleului și este identificat prin contorul program, regiștri, memorie/thread
CUDA () [Corola-website/Science/322713_a_324042]
-
Instrucțiunile sunt organizate secvențial însă informația despre dependențe nu este înregistrată în fișierele binare. Numai fișierele binare compilate pentru o mașină cu arhitectură de tip dataflow conțin această informative de dependența între date. În loc de a folosi nume de variabile, un compilator de flux de date înregistrează aceste dependențe prin crearea unor taguri unice pentru fiecare dependență. Acordând fiecărei dependențe câte un tag unic, se permite secțiunilor non-dependente din fișierele binare să fie executate în altă ordine decât cea secvențială adică în
Arhitectură dataflow () [Corola-website/Science/322877_a_324206]
-
de Constantin Porfirogenetul, "Cronica" lui Gheorghe Harmatolos / Gheorghe Călugărul, biografiile lui Diogenes Laertios, lucrările lui Athenaeus și ale lui Philostrates. Documentul conține prima mențiune despre românii (valahii) din nordul Dunării sub etnonimul "daci". Pentru unii, Suidas — sau Souidas — este un compilator de la sfârșitul secolului al IX-lea cunoscut printr-o singură lucrare, "Souda", care ar fi practic chiar numele lui: "Suda, Suidas, Suida", cum s-ar zice la ora actuală „Bayle”, „Cange”, „Larousse” sau „Littré”. O notă de prefață eronată, conjectură
Suda (enciclopedie) () [Corola-website/Science/332928_a_334257]
-
într-un carnet de notițe pentru uzul său personal. Mai multe etimologii au fost luate în seamă pentru acest nume de "Suidas" sau de "Suda". În 1998 Bertrand Hemmerdinger considera că Suidas este numele creatorului sau al coordonatorului grupului de compilatori au lexicului. O altă interpretare explică titlul ca fiind un acronim constituit pornind de la literele "Sunagogè onomastikès ulès di alphabeton" sau "diaphorôn andrôn", „adunarea de material onomastic după alfabet”, sau „după diferiți oameni”, ceea ce ar putea să semnifice și „lexic
Suda (enciclopedie) () [Corola-website/Science/332928_a_334257]
-
instrucțiuni care realizează adunarea a patru perechi de numere reale în simplă precizie (tipul de date "float" din C) în paralel. Aceste instrucțiuni au fost create pentru a îmbunătăți viteza aplicățiilor pentru procesare de imagine, sunet și video. Deși unele compilatoare încearcă să extragă automat acest tip de paralelism din programele scrise în C, o metodă mai fiabila este scrierea programelor folosind tipuri speciale de date (vectorizate) în compilatoare precum GCC. Intel a introdus în 1999 instrucțiunile SSE - acronim pentru Streaming
SIMD () [Corola-website/Science/322888_a_324217]
-
îmbunătăți viteza aplicățiilor pentru procesare de imagine, sunet și video. Deși unele compilatoare încearcă să extragă automat acest tip de paralelism din programele scrise în C, o metodă mai fiabila este scrierea programelor folosind tipuri speciale de date (vectorizate) în compilatoare precum GCC. Intel a introdus în 1999 instrucțiunile SSE - acronim pentru Streaming SIMD Extensions. SSE este o clasă de instrucțiuni pentru a manipula vectori de întregi sau de date în virgulă mobilă. Fiecare bloc de date poate avea dimensiuni de
SIMD () [Corola-website/Science/322888_a_324217]
-
Ideea din spatele modelului SIMD este aceea că fiecare registru XMM de 16 octeți poate reține valori multiple. Instrucțiunile SSE pot apoi să efectueze operații pe acesti regiștri precum adunarea sau înmulțirea a doua sau patru seturi de valori în paralel. Compilatorul GCC suporta extensii ale limbajului C care permit programatorilor să scrie cod folosind operații vectorizate ce pot fi compilate în instrucțiunile SIMD ale SSE. Acest stil de programare este preferabil celui de a scrie cod direct în limbaj de asamblare
SIMD () [Corola-website/Science/322888_a_324217]
-
instrucțiunile SIMD și alternativele open source că libSIMD și SIMDx 86. Computerele Apple au avut un succes mai mare, chiar dacă au intrat în piață SIMD mai târziu decât restul. AltiVec oferea un sistem bogat și poate fi programat să folosească compilatoare din ce in ce mai sofisticate de la Motorola, IBM, GNU, prin urmare, un limbaj de programare de asamblare fiind necesar foarte rar. În plus, multe dintre sistemele, care ar beneficia de SIMD au fost furnizate de către Apple, de exemplu: iTunes și QuickTime. Cu toate
SIMD () [Corola-website/Science/322888_a_324217]
-
în registrele de uz general pe hardware, care nu oferă nici un spijin direct pe instrucțiunile SIMD. Acest lucru poate fi folosit pentru a exploata paralelismul în anumiți algoritmi chiar și pe hardware care nu suportă SIMD direct. Se poate folosi compilatorul GCC ca suport pentru a scrie cod ce utilizează operații cu vectorizare. Strategia fundamentală este de a defini un tip de data vec t care reține patru valori pe 4 octeți sau două valori pe 8 octeți. Primul pas este de
SIMD () [Corola-website/Science/322888_a_324217]
-
conține șablonul funcție codice 1 ce returnează "x" sau "y", pe cel mai mare dintre cele două argumente. codice 2 ar putea fi declarat cam așa: Acest șablon poate fi apelat într-un mod identic cu apelul de funcție: Prin examinarea argumentelor, compilatorul deduce că acesta este un apel la codice 3 și produce (în engleză ""instantiates"") o versiune a funcției în care tipul codice 4 devine codice 5. Acest procedeu este valid pentru toate cazurile în care argumentele codice 6 și codice 7 sunt de tip întreg
Șablon (programare) () [Corola-website/Science/309480_a_310809]
-
prin intermediul macrourilor. De exemplu, iată un cod macro pentru codice 2: Macrourile și șabloanele sunt amândouă translatate în timpul compilării. Codul unui macro este întotdeauna inserat în program în locul unde apare un apel către acesta; pe când șabloanele sunt tratate ca funcții, deși compilatorul poate decide să insereze pe loc cod în loc de un apel de funcție, dacă consideră acest lucru oportun. Astfel macroinstrucțiunile și șabloanele funcție nu constituie o corvoadă în plus la momentrul execuției. În orice caz, șabloanele sunt în general considerate ca
Șablon (programare) () [Corola-website/Science/309480_a_310809]
-
frecvent întâlnite în cod ce abuzează de macroinstrucțiuni. Poate e lucrul cel mai important, șabloanele au fost gândite ca să aibă o aplicabilitate mult mai mare decât macrourile. Există trei mari inconveniente întâlnite la utilizarea șabloanelor. În primul rând, foarte multe compilatoare au avut un suport limitat pentru șabloane, astfel încât utilizarea șabloanelor poate determina scăderea portabilității codului sursă. În al doilea rând, aproape toate compilatoarele produc mesaje de eroare neproductive și derutante când sunt detectate erori în codul șablonului. Aceasta poate face
Șablon (programare) () [Corola-website/Science/309480_a_310809]
-
aproape toate compilatoarele produc mesaje de eroare neproductive și derutante când sunt detectate erori în codul șablonului. Aceasta poate face ca șabloanele să fie greu de programat. În al treilea rând, fiecare utilizare a unui șablon poate determina generarea de către compilator a unei noi versiuni de cod pentru noua instanță a șablonului, deci utilizarea fără discernământ a șabloanelor poate duce la încărcarea codului, rezultând executabile excesiv de mari. Șabloanele au fost lăsate în afara unor limbaje bazate pe C++, cum ar fi Java
Șablon (programare) () [Corola-website/Science/309480_a_310809]
-
nu înseamnă deloc o înjumătățire automată a timpului de rezolvare. Viteza totală de calcul care se poate atinge depinde, pe lângă numărul de procesoare ale supercomputerului, și de arhitectura sa internă precum și de problema însăși, de metoda de programare utilizată, de compilator și de alți factori. Rezultatele măsurătorilor vitezei și capacității de calcul se actualizează anual și sunt publicate pe la mijlocul anului. Pe lângă următorii campioni anuali există desigur și multe alte companii și modele de supercomputere. Sisteme viitoare:
Supercomputer () [Corola-website/Science/298991_a_300320]
-
la altul. După nivelul de abstractizare există mai multe categorii de limbaje care vor fi utilizate în programarea memoriei unui microcontroller : Pentru executarea unui program scris într-un limbaj oarecare, există, în principiu, două abordări: compilare sau interpretare. La compilare, compilatorul transformă programul-sursă în totalitate într-un program echivalent scris în limbaj mașină, care apoi este executat. La interpretare interpretorul ia prima instrucțiune din programul-sursă, o transformă în limbaj mașină și o execută; apoi trece la instrucțiunea două și repetă aceleași
Programarea microcontrollerelor () [Corola-website/Science/321287_a_322616]
-
limbaj algoritmic a fost efectuată în 1948 de K. Zuse. Notația sa era una destul de generală, dar propunerea sa nu a beneficiat de considerația pe care o merita.” Abia în 2000, o echipă de la Universitatea Liberă Berlin a scris un compilator de Plankalkül. În 1946 Zuse a înființat una dintre primele companii de calculatoare din lume, "Zuse-Ingenieurbüro Hopferau". Capitalul a fost obținut prin ETH Zürich și din achiziția de către IBM a drepturilor de implementare a unuia din patentele sale lui Zuse
Konrad Zuse () [Corola-website/Science/321850_a_323179]
-
a fost conceput în mod special pentru aplicații software ce urmează a fi implementate pe dispozitive FPGA. Este dezvoltat de firmă Impulse Accelerated Technologies ce are sediul în Kirkland, Washington. Intrumentul de sinteză hardware de nivel inalt CoDeveloper include un compilator de și o librărie de funcții care sunt menite pentru dezvoltarea aplicățiilor bazate pe FPGA. Impulse C este compatibil cu standardul ANSI C, lucru ce permite utilizarea instrumentelor C standard pentru proiectarea și verificarea aplicățiilor ce urmează a fi implementate
Impulse C () [Corola-website/Science/322879_a_324208]
-
o librărie de funcții care sunt menite pentru dezvoltarea aplicățiilor bazate pe FPGA. Impulse C este compatibil cu standardul ANSI C, lucru ce permite utilizarea instrumentelor C standard pentru proiectarea și verificarea aplicățiilor ce urmează a fi implementate pe FPGA. Compilatorul Impulse C accepta instrucțiuni din limbajul C și generează hardware FPGA în formă fișierelor Hardware Description Language (HDL). Impulse C permite proiectanților de sisteme embedded cât și programatorilor să accelereze implementarea programelor C pe dispozitive FPGA. Impulse C suporta o
Impulse C () [Corola-website/Science/322879_a_324208]
-
mecanism de comunicare. Într-o aplicație Impulse C de streaming, procesele hardware și software comunica în principal prin stream-uri de date buffer-ate care sunt implementate direct în hardware. Buffer-ele de date sunt implementate folosind cozi dublu-ceas (dual-clock FIFO) generate de compilator. Această abordare face posibilă scrierea aplicățiilor paralele la un nivel de abstractizare relativ ridicat, fără a mai fi nevoie de sincronizare ciclu-cu-ciclu. Folosind Impulse C, o aplicație poate fi partiționata pentru a crea o implementare multi-proces care este segmentata în
Impulse C () [Corola-website/Science/322879_a_324208]
-
și echipamentul hardware. C a fost creat având drept scop important de a face ca programele mari să poată fi scrise mai ușor și cu mai puține erori în paradigma programării procedurale, dar fără a pune un obstacole în scrierea compilatorului de C, care este încărcat de caracteristicile complexe ale limbajului. C are urmatoarele caracteristici importante: Printre caracteristicile ce lipsesc în C, dar care pot fi găsite în alte limbaje de programare se enumeră: Deși lista minusurilor limbajului C este destul de
C (limbaj de programare) () [Corola-website/Science/298786_a_300115]
-
C, dar care pot fi găsite în alte limbaje de programare se enumeră: Deși lista minusurilor limbajului C este destul de lungă, aceasta nu reprezintă un dezavantaj suficient de mare pentru inhiba utilizarea limbajului C în practică, deoarece permite ca noi compilatoare să poată fi scrise pe noi tipuri de platforme și pentru că permite programatorului să țină bine sub control programul pe care îl scrie. Acesta este unul din motivele care face ca un cod scris în C să fie mult mai
C (limbaj de programare) () [Corola-website/Science/298786_a_300115]