- AI er allerede i stand til å generere og forbedre mer effektive assemblere enn kompilatorer i spesifikke tilfeller, ved å utnytte SIMD og lavnivåteknikker.
- En ny arbeidsflyt dukker opp: utvikleren programmerer på et høyt nivå, og AI fungerer som en automatisk optimaliserer tilpasset hver arkitektur.
- Kodemedpiloter og avanserte LLM-er forvandler feilsøking, refaktorering og vedlikehold av store kodebaser.
- Fordelene i ytelse og produktivitet er enorme, men de krever menneskelig tilsyn, god praksis og oppmerksomhet på personvern og sikkerhet.
La kunstig intelligens anvendt på optimalisering av monteringskode Det begynner å fordype seg i et av de mest komplekse og spesialiserte områdene innen programvareutvikling: finjustering på CPU-nivå. Det som nylig hørtes ut som science fiction – at en AI kunne omskrive assemblerspråk og utkonkurrere toppkompilatorer – sees nå i virkelige eksperimenter med svært lovende resultater.
Utover den tekniske nysgjerrigheten står vi overfor en mulig en ny måte å jobbe med høy ytelse påUtvikleren skriver i C, C++ eller et annet høynivåspråk, og en AI-assistent fungerer som en ytelseskopilot, tester assemblyvarianter, utnytter SIMD-instruksjoner, finjusterer for ARM eller x86, og returnerer mye raskere versjoner og til og med vedlikeholdbare C++-versjoner. Alt dette skjærer seg i den andre store bølgen: AI-verktøy for programmering, feilsøking og refaktorering, som allerede endrer den daglige driften i SDI-er.
Assembler for optimalisering av kunstig intelligens: Daniel Lemires eksperiment
Et av de mest siterte verkene om dette emnet kommer fra forskeren Daniel Lemire, kjent for sine performancestudierLemire stilte et veldig spesifikt spørsmål: hvis vi starter med rimelig C++-kode, kan en AI generere en assembly-versjon som utfører færre instruksjoner enn koden produsert av en moderne, velkonfigurert kompilator?
For å teste dette startet han med en tilsynelatende triviell, men svært vanlig oppgave: telle hvor mange ganger et tegn forekommer i flere tekststrengerBasisimplementeringen brukte standard C++ med funksjonen std::countEn ren, tydelig og vedlikeholdbar løsning, men ikke spesielt utviklet for å presse inn hver klokkesyklus.
Fra det utgangspunktet ba Lemire ulike kunstige intelligenser om å omskrive kjernen i algoritmen i assemblermed det eksplisitte målet å redusere antall instruksjoner som ble utført per streng. Prosessen ble gjentatt i iterasjoner: AI-en genererte en versjon, den ble målt, nye ledetekster med forslag til forbedringer ble gitt, og prosessen ble gjentatt.
Resultatene var alt annet enn beskjedne. Den første C++-versjonen var rundt... 1200 instruksjoner per behandlet strengDet første AI-forslaget senket tallet betraktelig, og etter flere runder med forbedring ble det oppnådd kode som kjørte rundt 154 instruksjoner per strengVi snakker om noe nær en åttedobling av antall instruksjoner, noe som i mange scenarier betyr en svært merkbar akselerasjon.
Fra et teknisk synspunkt ble disse gevinstene oppnådd ved å kombinere SIMD-instruksjoner, vektorbehandling og aggressiv avhengighetsreduksjon mellom operasjoner. Det er nettopp den typen lavnivå, grundig arbeid som vanligvis er reservert for ultrafine biblioteker skrevet av prosessorarkitektureksperter.
Tekniske nøkler: SIMD, NEON og parallell utførelse
AI-en oversatte ikke bare fra C++ til assembly bokstavelig talt. En viktig del av suksessen kom fra Systematisk utnyttelse av SIMD-vektorinstruksjoner, i både ARM64- og x86-arkitekturer, som tillater behandling av flere data med én instruksjon.
I det spesifikke tilfellet med ARM64 ble de mest avanserte versjonene av AI-generert kode brukt NEON-instruksjoner for å håndtere blokker på 16, 32 eller 64 byte samtidig. I stedet for å gå gjennom strengen tegn for tegn, behandlet algoritmen flere byte parallelt, noe som økte mengden arbeid som ble utført i hver CPU-syklus.
Videre innlemmet den genererte assembleren ideen om å bruke flere akkumulatorer for å redusere avhengigheter mellom påfølgende instruksjoner. Dette er viktig for at prosessorens interne utførelsesenheter skal kunne operere parallelt: hvis hver addisjon eller sammenligning avhenger strengt av det forrige resultatet, blir pipelinen overbelastet; omvendt, hvis flere akkumulatorer håndteres parallelt, kan CPU-en utføre flere operasjoner samtidig.
Hele dette spillet manuell vektorisering og omorganisering av instruksjoner Det gir redusert latens og økt gjennomstrømning. I gunstige scenarier kan forsiktig bruk av vektorbehandling mangedoble ytelsen med en faktor på to til åtte, avhengig av arbeidsmengde, datastørrelse og mikroarkitekturdetaljer.
Denne typen teknikker, som tidligere krevde inngående kunnskap om maskinvarens interne virkemåteDe blir nå tilgjengelige for flere team takket være formidlingen av AI-modeller som er i stand til å foreslå høytytende assemblermønstre.
Assemblys skjønnhet og potensial i AI-tidsalderen
I en tid hvor nesten alt er bygget på rammeverk, biblioteker og lag av abstraksjon, kan det høres rart ut å snakke om en «tilbake» til assembly-programmeringMen snarere enn et skritt tilbake handler det om å gjenoppdage et kontrollnivå som er nøkkelen når målet er å få mest mulig ut av hver ressurs i systemet.
Programmering i assemblerspråk krever grundig forståelse hvordan instruksjonene faktisk utføresHva koster det å få tilgang til minne, hva innebærer en feiljustert gren, eller hvordan oppfører hurtigbufferen seg? Dette perspektivet gir svært klare fordeler: omfattende kontroll over utførelse, muligheten til å måle nøyaktig hvor tiden brukes, og en svært finjustert følsomhet for beregningseffektivitet.
Anvendt innen kunstig intelligens, oversettes denne kunnskapen til muligheten for å designe mye mer effektive modell- og algoritmearkitekturerDe som forstår assemblerspråk godt, er bedre posisjonert til å dra nytte av vektorinstruksjoner, prosessorspesifikke utvidelser, eller til og med designe kritiske kjerner skreddersydd for lineære algebraoperasjoner, konvolusjoner eller signalbehandling.
For teknologigründere og produktledere er dette skjæringspunktet mellom Montering og kunstig intelligens Det åpner for spennende muligheter: fra å skaffe AI-løsninger som bruker færre ressurser og gir besparelser i infrastruktur, til å differensiere seg gjennom ren ytelse i nisjer der latens eller gjennomstrømning utgjør forskjellen.
Den sterkeste trenden tyder på at AI ikke bare vil bidra til å kjøre kode raskere, men til slutt også forenkle forståelsen av montøren selvAnalyse-, visualiserings- og forklaringsverktøy støttet av språkmodeller kan gjøre et felt som historisk sett har vært forbeholdt noen få spesialister mye mer tilgjengelig.
AI som en automatisk optimalisator: en ny arbeidsflyt for høy ytelse
Det sanne produktet som kommer frem fra Lemires eksperiment er ikke en konkret modell, men ideen om bruker kunstig intelligens som en automatisk optimalisering på lavt nivåDette kan endre måten ytelseskritisk programvare håndteres på betraktelig.
Den typiske flyten kan se omtrent slik ut: først skriver utvikleren en tydelig implementering i C eller C++fokusert på korrekthet og lesbarhet. Deretter ber den en AI om å generere en ytelsesorientert monteringsversjon, eller flere varianter med forskjellige strategier (ved bruk av SIMD, utrulling av løkker, omorganisering av minnetilganger osv.).
Disse versjonene måles deretter under realistiske forhold, og resultatene gis. Nye oppfordringer for å forbedre seg ytterligere det som oppdages som en flaskehals. Denne prøving-og-feiling-prosessen, som tidligere kunne ta timer eller dager med manuelt arbeid av en svært erfaren person, er nå komprimert til minutter takket være en AI-assistent med gode kodegenererings- og resonneringsevner.
En annen viktig fordel er at AI kan raskt teste et bredt utvalg av konfigurasjonerÅ skille mellom ulike vektoriseringsgranulariteter, eksperimentere med minnetilgangsmønstre eller leke med instruksjoner som er spesifikke for hver mikroarkitektur. For et menneske er det utmattende å utføre alle disse testene grundig; for en automatisert agent er det en naturlig del av jobben.
Og det som er mest attraktivt for team med heterogene distribusjoner er at AI kan tilpasse koden til flere arkitekturer: ARM, x86 eller spesialiserte prosessorerI stedet for å manuelt vedlikeholde flere optimaliserte versjoner, kan én enkelt AI-basert arbeidsflyt generere den optimale assembleren for hver plattform, og opprettholde én sannhetskilde på et høyt nivå.
Kan AI utkonkurrere tradisjonelle kompilatorer?
En av de mest slående konklusjonene fra Lemires eksperiment er at, i hvert fall i spesifikke og veldefinerte tilfellerAI-en var i stand til å produsere mer effektiv kode enn resultatet fra ledende kompilatorer som GCC eller LLVM ved hjelp av avanserte optimaliseringsnivåer.
Moderne kompilatorer gjelder svært sofistikerte heuristikker og generelle optimaliseringerDe er imidlertid fortsatt begrenset av regler angående sikkerhet, portabilitet og vedlikeholdbarhet. Videre opererer de vanligvis med et begrenset kompileringsbudsjett; de har ikke råd til å utforske alle mulige assemblervarianter som kan forbedre ytelsen med noen få prosentpoeng.
AI, derimot, kan fungere som en et ekstra lag med automatisert manuell optimaliseringDet er mer som arbeidet til et bibliotek, håndskrevet av eksperter på SIMD og mikroarkitektur (som noen Google-biblioteker eller andre vektoriseringsfokuserte prosjekter), men med fordelen at det kan brukes ad hoc på ditt spesifikke tilfelle og gjentas så mange ganger som nødvendig.
Utvikleren har fortsatt det siste ordet: å godta eller avvise fragmenter, sammenligne ytelse og stabilitet, og bestemme hvilken versjon som skal settes i produksjon. Men kostnaden for å teste nye forslag synker kraftig når det finnes en AI-modell som er i stand til det. motta tilbakemeldinger og juster din egen montør i påfølgende iterasjoner.
Dette betyr ikke at kompilatorer kommer til å bli foreldet, ikke i det hele tatt. Mest sannsynlig vil vi se tettere integrasjoner mellom kompilatorer og AIder verktøykjeden selv kaller spesialiserte modeller for visse kritiske deler, eller for å generere manuelle vektoriseringsforslag som kompilatoren deretter innlemmer eller avviser avhengig av konteksten.
Har assemblerspråk en fremtid hvis AI «skjuler» det bak C++?
En veldig interessant detalj ved eksperimentet er at AI-en ikke bare var i stand til å generere skarp monteringskodemen også å konvertere noen av disse optimaliseringene til tilsvarende C++-kode, samtidig som mye av den oppnådde ytelsen opprettholdes.
Dette åpner opp en ganske pragmatisk vei: å bruke assembleren som laboratorium for utforskning og prototypebyggingMen ikke nødvendigvis som det endelige kodeformatet som vedlikeholdes i depotet. Når de beste ideene er identifisert (tilgangsmønstre, vektoriseringsnivå, bruk av flere akkumulatorer), kan AI hjelpe oss med å oversette dem til en relativt lesbar C++-implementering.
Dette reduserer et av de store klassiske problemene til assembleren: dens vanskelig vedlikehold og den enorme inngangsbarrieren for nye teammedlemmer. Koden som ender opp i produksjon kan fortsatt være i et høynivåspråk, men drevet av automatiserte optimaliseringssykluser der assembleren har fungert som et testmiljø.
I store prosjekter tillater denne tilnærmingen å kombinere en velstrukturert C++- eller Rust-kodebase med sporadisk bruk av AI for å generere lavnivåoptimaliseringer når det er nødvendig å presse maskinvaren til det yttersteDen kritiske delen itereres ved hjelp av AI; resten av systemet forblir rent og forståelig.
Når man ser fremover, er det svært sannsynlig at IDE-er vil innlemme nesten transparente arbeidsflyter som dette: du velger en populær funksjon, miljøet aktiverer en AI-modell for å foreslå en superoptimalisert versjon, og tilbyr deg til og med en høynivådifferanse som integrerer disse forbedringene uten å tvinge deg til å lese alle assemblerinstruksjoner.
AI utover assembler: kopiloter for programmering, feilsøking og refaktorering
Ved siden av disse nisjefremskrittene er utviklerens hverdag allerede i endring takket være kode-copiloter som GitHub Copilot, Tabnine, CodeWhisperer eller CodeiumI tillegg til de viktigste språkmodellene som brukes mer generelt (ChatGPT, Claude, Gemini, osv.), har disse verktøyene utviklet seg fra avanserte autofullføringsfunksjoner til ekte feilsøkings- og designassistenter.
En av de største hodepinene for den gjennomsnittlige programmereren fortsetter å være feilsøking av logiske eller subtile feilnoe som noen ganger tar mer tid enn å skrive selve funksjonaliteten. Her kan AI finne en feil på sekunder som ville ha krevd at en person gjennomgikk halve prosjektet: den analyserer stakksporingen, kryssrefererer kontekst mellom filer, oppdager typiske feilmønstre og foreslår spesifikke endringer.
I motsetning til klassiske statiske parsere, som er begrenset til stil- og syntaksregler, forstår disse AI-ene bedre kontekst og hensikt med kodenDe forteller deg ikke bare at «denne variabelen brukes ikke», men de kan resonnere om hvordan informasjon flyter på tvers av ulike moduler og advare deg hvis du er i ferd med å ødelegge en funksjon som kjører senere.
I tillegg fungerer de som utrettelige kodegranskere, foreslå refaktoreringer, forenkle overdrevent lange funksjoner, foreslå mer passende designmønstre (f.eks. å erstatte kjedede if-else-setninger med en strategitabell) og bidra til å redusere teknisk gjeld.
Denne typen assistanse frigjør utvikleren til å fokusere på arkitektur, strategi og forretningsbeslutningerAI-en tar seg av «plukk og spade»-arbeidet med å finne feil, foreslå variasjoner og automatisere tester, mens personen fokuserer på hvilket problem som løses og hvorfor.
AI-verktøy for programmerere som setter tempoet
Økosystemet av AI-verktøy for utvikling eksploderer. Hver løsning fyller et litt forskjellig gap, fra assistenter dypt integrert i IDE-en til orkestreringsplattformer som kombinerer flere modeller avhengig av oppgaven.
GitHub Copilot Den har blitt den mest gjenkjennelige co-piloten, takket være den sømløse integrasjonen med Visual Studio Code, Neovim og andre koderedigerere og IDE-erDen er spesielt sterk til å generere komplette funksjoner fra kommentarer, foreslå tester og, med Copilot Chat, tillate feilsøking i samtalemodus («hvorfor feiler denne testen?») uten å forlate redigeringsprogrammet.
Tabnin satser veldig tungt på Personvern og personalisering for bedrifterDet lar deg trene private modeller ved hjelp av din egen kode og distribuere dem lokalt eller i en VPC, slik at sensitiv kode aldri forlater den kontrollerte infrastrukturen. Dette er nøkkelen i sektorer som bank eller helsevesen.
Amazon Code Whisperer Den er utmerket for de som bor i AWS-økosystemet. Den genererer kode som er justert med API-ene til tjenester som S3, Lambda eller DynamoDB, og inneholder en sikkerhetsskanner som oppdager typiske sårbarheter (inkludert noen av OWASPs topp 10-liste) og hjelper med å løse dem, ved å sitere kilder og lisenser for å unngå juridiske problemer.
Kodeium Den har posisjonert seg som et svært kraftig alternativ og gratis for individuelle brukereMed autofullføring og chat som ligner på Copilot, og fordelen for bedrifter av å kunne distribuere det i selvhostet modus, gir dette full kontroll over data og samsvar med regelverk.
På et litt annet nivå, modeller som Claude 3 eller Gemini Pro De er utmerkede for mer konseptuelle feilsøkingsoppgaver: å lime inn store biter med kode, be om forklaringer på komplekse arkitekturer eller utforske ulike tilnærminger til et problem. De fungerer nesten som en "smart gummiand" for å resonnere om design.
Kriterier for å velge den beste AI-en for programmering i henhold til konteksten din
Det finnes ingen «beste AI for programmering» som fungerer for alle. Valget avhenger av dine behov. teknologistabelen, din rolle, størrelsen på teamet ditt og budsjettet dittDet finnes noen svært praktiske filtre som bør brukes før man bestemmer seg.
Det første du må gjøre er å sjekke kompatibilitet med hovedspråkene dine og IDE-en dinSelv om de fleste støtter Python, JavaScript, Java eller C#, fungerer ikke alle like bra i alle miljøer. Det er også viktig at utvidelsen integreres sømløst med VS Code, JetBrains, Neovim eller hvilken som helst editor du bruker daglig.
Et annet viktig aspekt er å forstå om du har å gjøre med en unik modell eller orkestreringsplattformDe mest avanserte løsningene forplikter seg ikke til en enkelt LLM, men velger dynamisk den mest passende modellen (GPT-4, Claude, osv.) for hver deloppgave: generere kode, resonnere om feil, oppsummere logger, osv.
Da må du se veldig nøye på Kodesikkerhet og distribusjonsmodellSendes kodesnutter til en tredjeparts sky? Tilbys det lokale eller private VPC-alternativer? Brukes koden din til å trene generelle modeller eller bare private instanser? For mange selskaper er dette en rød linje.
Til slutt er det verdt å vurdere læringskurve og støtte fra lokalsamfunnetVerktøy med tydelig dokumentasjon, aktive forum eller Discord-kanaler forenkler bruken. Når det gjelder Copilot, for eksempel, gir det enorme fellesskapet støtte til å løse tvil og dele produktivitetstips.
Virkelige fordeler: bruksområder i oppstartsbedrifter og store selskaper
Bruken av AI i utvikling gir allerede konkrete resultater, ikke bare når det gjelder «bekvemmelighet», men også i målinger som tid til marked, programvarekvalitet og driftskostnader.
Det finnes oppstartsbedrifter, for eksempel i fintech-sektoren, som har klart å redusere tiden brukt på feilsøking med rundt 40 % De har optimalisert kritiske moduler takket være AI-assistenter som flagger subtile logiske feil og kanttilfeller som enhetstester ikke har dekket. Denne ekstra tiden har latt dem komme dit før konkurrentene.
I store selskaper med eldre produkter på millioner av linjer i Java eller C++ brukes AI til å avdekke skjulte feil og foreslå systematiske refaktoreringer som samsvarer med eldre kode med moderne interne standarder, reduserer teknisk gjeld og forenkler vedlikehold.
En annen veldig klar fordel er i onboarding av nye utviklereMed samtaleassistenter kan en yngre ansatt direkte spørre «hva gjør denne funksjonen, og hvordan er den relatert til betalingsmodulen?» og motta kontekstuelle forklaringer på sekunder, noe som reduserer tilpasningstiden fra uker til bare noen få dager.
I kritiske sektorer som helsevesen eller finans, bidrar AI-støttet automatisert kodeanalyse til å oppdage kappløpsforhold, minnelekkasjer og sårbarheter noe som kan få alvorlige konsekvenser, samtidig som det sikres at strenge sikkerhets- og personvernregler overholdes.
Nåværende utfordringer, risikoer og begrensninger ved AI i programmering
Det er ikke bare fordeler. Integrering av kunstig intelligens i utvikling medfører risikoer som er viktige å huske på når man bruker den. ansvarlig og uten å miste kontrollen om selve koden.
Det første er det klassiske problemet med «svart boks»Å akseptere forslag uten å egentlig forstå hva de gjør. En modell kan generere fragmenter som består nåværende tester, men mislykkes i avdekkede scenarier, eller introdusere sårbarheter som er vanskelige å oppdage. Derfor bør AI alltid sees på som copilot, ikke autopilot.
Effekten på problemløsningsferdigheterSpesielt for juniorprofiler. Å stole for mye på AI for hver feil kan hemme evnen til å resonnere trinn for trinn og feilsøke manuelt. En god praksis er å prøve å løse problemer selv og bruke AI til å sammenligne løsninger, ellers blir man sittende fast når man ikke ser noen utvei.
Fra et sikkerhetssynspunkt gir det opphav til bekymring å sende proprietær kode til skytjenester. alvorlig tvil om immaterielle rettigheter og konfidensialitetFør du tar i bruk en løsning, anbefales det å gjennomgå datapolicyer og om nødvendig velge selvhostede systemer eller private modeller som aldri blander koden din med andre kilder.
Til slutt er det risikoen for den såkalte «Zombiekode»AI-genererte kodesnutter som ender opp i produksjon, men som ingen i teamet forstår fullt ut. Hvis den koden inneholder subtile feil eller tvilsomme designbeslutninger, kan det bli en svært dyr teknisk gjeld å betale ned i fremtiden.
Likevel svekker ikke disse begrensningene den generelle trenden. Snarere fremhever de behovet for å følge AI med God praksis for gjennomgang, testing og dokumentasjonakkurat som med alle andre kraftige verktøy.
Totalt sett kombinasjonen av AI som en assembleroptimaliserer Og som en omfattende programmeringsassistent sikter den mot en dyp transformasjon av yrket: mindre tid på å bry seg med mekaniske detaljer og mer fokus på arkitektur, strategi og forståelse av komplekse problemer. Utfordringen for utviklere og tekniske team vil være å lære å utnytte disse verktøyene uten å gi avkall på kritisk tenkning, og integrere dem i arbeidsflyter der AI forsterker menneskelig talent i stedet for å erstatte det.
Lidenskapelig forfatter om verden av bytes og teknologi generelt. Jeg elsker å dele kunnskapen min gjennom å skrive, og det er det jeg skal gjøre i denne bloggen, vise deg alle de mest interessante tingene om dingser, programvare, maskinvare, teknologiske trender og mer. Målet mitt er å hjelpe deg med å navigere i den digitale verden på en enkel og underholdende måte.

