|  Startsida |  Hårdvara |  Nätverk |  Programmering |  Programvara |  Felsökning |  System |   
Programmering
  • C /C + + -programmering
  • Computer Programspråk
  • Delphi Programmering
  • Java Programming
  • JavaScript programmering
  • PHP /MySQL Programmering
  • perl Programmering
  • python Programming
  • Ruby programmering
  • Visual Basics Programmering
  • * Dator Kunskap >> Programmering >> Computer Programspråk >> Content

    Vilket programmeringsspråk, Fortran eller C, erbjuder bättre prestanda när det gäller hastighet?

    Historiskt sett Fortran har i allmänhet ansetts erbjuda bättre prestanda för vetenskaplig och numerisk dator, särskilt för specifika uppgifter som linjär algebra och arraybaserade operationer. Verkligheten är emellertid mer nyanserad, och Svaret beror på flera faktorer :

    Argument för Fortrans potentiellt bättre prestanda:

    * designad för numerisk datoranvändning: Fortran var specifikt utformad för vetenskapliga och tekniska beräkningar. Dess syntax och semantik är ofta mer naturliga för att uttrycka sådana problem. Tidiga versioner hade direkt stöd för komplexa nummer, arrayoperationer och andra funktioner som är kritiska för vetenskapliga koder.

    * Compiler Optimization: FORTRAN -kompilatorer har historiskt sett varit starkt optimerade för numeriska operationer, särskilt i arraymanipulation och loopoptimering. Kompilatorer använder ofta tekniker som loop-rullning, vektorisering och auto-parallellisering mer aggressivt i Fortran. Dessa optimeringar utnyttjar hårdvarufunktioner som SIMD -instruktioner (enstaka instruktioner, flera data) mer effektivt.

    * aliasing antaganden: Fortran -kompilatorer kan ofta göra starkare antaganden om aliasing av minnes (när två pekare kan hänvisa till samma minnesplats). Fortran begränsar aliasing mer som standard än C. Detta gör att kompilatorn kan ordna om och optimera koden mer aggressivt utan att riskera felaktiga resultat. I C måste du använda nyckelordet "Restrict" för att uppnå liknande aliasing -antaganden.

    * mogna bibliotek: Fortran har en lång historia, och många mycket optimerade numeriska bibliotek som BLAS (grundläggande linjära algebra -underprogram), lapack (linjär algebra -paket) och FFTW (snabbaste Fourier -transform i väst) är skrivna i Fortran eller har Fortran -gränssnitt. Även om dessa bibliotek också är tillgängliga från C, kan det ibland leda till bättre integration och mindre omkostnader att använda dem direkt från Fortran.

    Argument för C:s potentiellt bättre prestanda (eller åtminstone konkurrenskraft):

    * Låg nivå kontroll: C erbjuder mycket finare kontroll över minneshantering och hårdvaruresurser. Färdiga programmerare kan utnyttja denna kontroll för att optimera koden för specifika arkitekturer och potentiellt överträffa Fortran i vissa fall.

    * Moderna kompilatorer: Moderna C -kompilatorer är också mycket sofistikerade och kan utföra många av samma optimeringar som Fortran -kompilatorer. Klyftan i kompilatoroptimering har minskat avsevärt under åren.

    * Vectorization Libraries: C har också bibliotek som ger tillgång till SIMD -instruktioner, till exempel Intels intrinsics och ARM:s neon. Att använda dessa kräver mer manuell ansträngning, men kan leda till utmärkt prestanda.

    * bredare ekosystem: C har ett mycket större och mer mångsidigt ekosystem av bibliotek och verktyg. Detta kan vara en fördel för uppgifter som går utöver ren numerisk beräkning, såsom databehandling, I/O och gränssnitt med andra system. C är ofta ett bättre val när du behöver integrera numerisk kod med andra delar av ett större system.

    * Minneshantering: Även om Fortrans implicita minneshantering ofta är enklare att använda, kan C:s uttryckliga minneshantering (med "Malloc" och "fria") * vara mer effektivt i specifika scenarier, särskilt när man hanterar komplexa datastrukturer. (Men det gör också minnesläckor och andra minnesrelaterade buggar mycket mer troliga).

    Nyckelöverväganden:

    * Programmerarens skicklighet: Den viktigaste faktorn är ofta programmerarnas skicklighet. Ett välskrivet C-program kan ofta överträffa ett dåligt skrivet Fortran-program och vice versa.

    * Det specifika problemet: Den typ av numeriska problem som löses är avgörande. Fortran kan vara bättre lämpad för stora matrisbaserade beräkningar, medan C kan vara mer effektiva för uppgifter som kräver finkornig minnesmanipulation eller komplexa datastrukturer.

    * Kompilatorn och optimeringsflaggorna: Kompilatorn som används och optimeringsflaggorna aktiverade kan ha en betydande inverkan på prestanda. Experimentera med olika kompilatorer och optimeringsinställningar för att hitta den bästa kombinationen för din specifika kod och hårdvara.

    * Kodkomplexitet: Även om optimerad prestanda är målet är det ofta inte praktiskt att skriva den bästa presterande koden. Därför beror valet mellan C och Fortran ofta på avvägningen mellan råprestanda och utvecklarproduktivitet.

    Sammanfattningsvis:

    * Historiskt, och för vissa specifika vetenskapliga datoruppgifter, hade Fortran en prestandakant, främst på grund av bättre kompilatoroptimering för numerisk kod och färre aliasingproblem. Många äldre (och till och med några nyare) vetenskapliga bibliotek är skrivna i Fortran.

    * Moderna C-kompilatorer fångar upp, och med noggrann kodning och användning av vektoriseringsbibliotek kan C uppnå jämförbara eller till och med överlägsen prestanda, särskilt för problem som kräver kontroll eller integration med låg nivå med andra system.

    * Valet mellan Fortran och C bör baseras på en grundlig utvärdering av det specifika problemet, programmerarens expertis, de tillgängliga biblioteken och den önskade prestandanivån.

    Därför finns det ingen definitiv "vinnare." Det är bäst att jämföra båda språken för din specifika applikation för att avgöra vilken som ger den bästa prestanda i ditt specifika sammanhang. Överväg att profilera din kod för att identifiera flaskhalsar och fokusera optimeringsinsatser där de kommer att ha störst inverkan.

    Tidigare:

    nästa:
    relaterade artiklar
    ·Hur att bädda in en sida i en div-tagg
    ·Användningsområden för en rekursiv funktion
    ·Vad är SEI CMMI
    ·Vad är det ursprungliga filformatprogrammet Quark?
    ·Hur man använder standardiserade Namnkonventioner i Mu…
    ·Hur man lär blinkkoden
    ·Hur du uppdaterar Bredd GridView Kolumn
    ·ASP.Net utvecklare Träning
    ·Hur man installerar Lisp på OSX
    ·Hur man hålla värdet Kryssruta på en GridView Sorter…
    Utvalda artiklarna
    ·Hur att beräkna längden av String
    ·Hur spåra med Java Script & PHP
    ·Hur man startar en ny instans av Visual Basic
    ·Hur man konfigurerar MIT Scheme för SICP
    ·Hur du ändrar Element Marginaler Använda HTML Program…
    ·MySQL Tutorial för hur man laddar en bild
    ·Så här aktiverar Perl i Snow Leopard
    ·Hur man lägger Integer Array i Function C Språk
    ·Hur Importera Binary till Xcode
    ·Handledning för SQL lagrade procedurer
    Copyright © Dator Kunskap https://www.dator.xyz