Programmering

Q # språk: Hvordan skrive kvantekode i Visual Studio

Datamaskinens fremtid er ikke silisium; vi er allerede på grensene til Moores lov når det gjelder ytelsen vi kan få fra tradisjonelle transistorer. Vi jobber også med mye større problemer, spesielt når det gjelder kryptografi og matematisk modellering; problemer som krever dager med beregningstid selv på de største superdatamaskinene.

Så hvor går vi herfra? Microsoft Research, i likhet med Google og IBM, har satset mye på kvanteberegning. Mye av forskningen har vært innen grunnleggende fysikk, og samarbeidet med universiteter over hele verden for å produsere effektive miljøer med lave temperaturer og stabile kvanteberegningsmiljøer. Men å lage en qubit - den sannsynlige kvantebiten som i det vesentlige erstatter 0 og 1 av en tradisjonell bit - er bare en del av historien. Det som også trengs er en måte å programmere en kvantecomputer og tolke qubittenes sannsynlighetstilstand.

Konstruere kvantecomputere

Arkitekturen til et kvanteprogram er relativt enkel: Et tradisjonelt program får verdier fra brukerinngang eller fra annen kode. Den overfører deretter disse verdiene til et kvanteapplikasjon som setter qubits i en kvanteprosessor, ved hjelp av en av mange kvantealgoritmer, før resultatene sendes tilbake til foreldreapplikasjonen.

Det er en prosess som er veldig lik den jeg brukte ved min første programmeringsjobb, og skrev Fortran endelig-elementanalysekode som brukte en vektorprosessor festet til en superdatamaskin for å håndtere matrise-algebra. Vektorbibliotekene jeg brukte til å bygge og løse mine 3D-elektromagnetiske modeller, jobbet både på den spesialiserte maskinvaren eller på en matematisk prosessor på en stasjonær arbeidsstasjon, slik at jeg kunne teste koden min før jeg brukte kostbar superdatamaskintid.

Microsoft ga nylig ut sitt Quantum Development Kit, bygget rundt det nye Q # -språket. Designet for å bruke kjente konstruksjoner for å hjelpe programapplikasjoner som samhandler med qubits, tar det en lignende tilnærming til å jobbe med koprosessorer, og tilbyr biblioteker som håndterer den faktiske kvanteprogrammeringen og tolkningen, slik at du kan skrive kode som overfører qubit-operasjoner til en Microsofts kvantedatamaskiner. .

Det er ikke lett å bygge bro over den klassiske og kvante-databehandlingen, så ikke forvent at Q # skal være som Visual Basic. Det er mer som å bruke det settet av Fortran matematikkbiblioteker, med samme underliggende antagelse: at du forstår teorien bak det du gjør.

Ett element i Quantum Development Kit er en quantum computing primer, som utforsker problemer rundt bruk av simulatorer, samt å gi en primer i lineær algebra. Hvis du skal programmere i Q #, er det viktig å forstå viktige lineære algebra-begreper rundt vektorer og matriser - spesielt egenverdier og egenvektorer, som er nøkkelelementer i mange kvantealgoritmer.

Komme i gang med Q #

Utviklingssettet lastes ned som en Visual Studio-utvidelse, slik at du kan bruke den med alle versjoner av Microsofts viktigste utviklingsmiljø, inkludert den gratis Community-utgaven. Installasjonsprogrammet inkluderer Q # -språket, en lokal kvantesimulator og biblioteker som støtter innbygging av Q # -moduler i .Net-koden. Når du er installert, kan du koble til Microsofts Q # Github-arkiv for å klone og laste ned eksempelkode og tilleggsbiblioteker. Det er en rask prosess; installatøren tar et par minutter å laste ned og kjøre på en rimelig kraftig utviklings-PC. Bibliotekene er vert på Nuget, slik at du raskt kan oppdatere til de nyeste versjonene.

Med en fungerende kvantecomputer som fortsatt er noen år unna, er Quantum Development Kit begrenset til å jobbe med simulerte kvantecomputere. Microsofts forskningssystemer har ennå ikke produsert en fungerende topologisk qubit, men resultatene har vært lovende. Så til det er publiserte resultater og Azure får sine kvanteprosessorer, er du begrenset til å eksperimentere med lokale og skyhostede simulatorer. Fordi de er begrenset til å bruke tradisjonelle programmeringsteknikker, kommer de ikke til å håndtere hele spekteret av komplekse matematiske operasjoner som kvanteberegning lover. Men de gir en følelse av hva et lite antall qubits kan gjøre.

Mye av arbeidet du trenger å gjøre for å bygge et kvanteprogram, er å konstruere en kvantecomputer fra qubit-transformasjoner. Q #-språket håndterer prosessen for deg, fordi det inkluderer uttrykk for mange kvanteportstrukturer, samt vanlige kvantealgoritmer. Selve språket vil føles kjent for .Net-utviklere, med en struktur som er et sted mellom C # og F #.

Grunnleggende om kvanteprogrammering

Du finner de fleste Q # -programmer relativt enkle, fordi det du gjør er å sette opp matriser med qubits og bruke matematiske transformasjoner på dem. Selv om det underliggende problemet er komplekst (eller i det minste sannsynlig å ta mye beregningstid ved hjelp av tradisjonelle beregningsressurser), stoler du på kvantecomputeren for å håndtere arbeidet for deg, og dens kvantealgoritmer betyr at du kan bruke et lite antall av tilkoblede qubits for å løse problemet ditt.

En viktig ting å merke seg er at noen kvantespråk, som det som brukes av DWave i sine kvantedatamaskiner, er designet for å fungere med kvanteutglødning, ikke portmodellen som brukes i Microsofts kvantehardware.

Hvor Q # -språket skiller seg fra det kjente, ligger i støtten til kvantealgoritmer. Dette starter med typer: Q # er et sterkt skrevet språk, og legger til nye typer som representerer qubits og grupper av qubits. En annen viktig forskjell er mellom Q # -operasjoner og -funksjoner. Operasjoner inneholder kvanteoperasjoner, mens funksjoner er utelukkende for klassisk kode, selv om de kan jobbe med resultatene fra en kvanteoperasjon.

Kvantealgoritmer og biblioteker

Q # inkluderer også spesifikke operasjonstyper som fungerer med kvantealgoritmer, inkludert de som beregner de tilgrensende resultatene av en matrise av qubits, og andre som hjelper til med å konstruere qubit-kretser, utløses bare hvis kontroll-qubits er riktig satt.

Det er viktig å huske at der Q # bruker null og ett i resultatene som variabler for å håndtere qubits, er de ikke det samme som binær 0 og 1. I stedet er de representasjoner av egenverdiene til vektorene som er lagret i qubits.

Du bruker Q # standardbibliotekene til å bygge og konstruere kvanteapplikasjonene dine. Disse inkluderer et sett med kvanteprimitiver som definerer portene du bygger ut av qubits, samt å bruke kvanteoperatører og måle resultatene. Bibliotekene er delt inn i to deler: opptakten til å sette opp kvantecomputeren og kanonen for å betjene maskinen. Det er viktig å forstå forskjellene mellom disse to delene av bibliotekene, fordi de må holdes adskilt i koden din. Å bruke kanonoperatørene kjører kvantemaskinen, med operatører som håndterer spesifikke kvantealgoritmer; for eksempel å bruke en Quantum Fourier Transform eller finne felles divisorer med to tall.

Q # er ikke et språk for nybegynnere. Selv om det forenkler noen kvanteoperasjoner, avhenger det av å ha kunnskap om hvordan en kvantecomputer fungerer, samt å forstå det grunnleggende i kvanteberegning. Hvis du har jobbet med lineær algebra og sannsynligheter, vil du ha et forsprang, men det er fortsatt verdt å bruke tid først med Microsofts veiledninger og eksempler.

$config[zx-auto] not found$config[zx-overlay] not found