Programmering

Q # sprog: Hvordan man skriver kvantekode i Visual Studio

Computerens fremtid er ikke silicium; vi er allerede ved grænserne for Moores lov med hensyn til den præstation, vi kan få fra traditionelle transistorer. Vi arbejder også på meget større problemer, især når det gælder kryptografi og matematisk modellering; problemer, der kræver dage med beregningstid, selv på de største supercomputere.

Så hvor skal vi hen herfra? Microsoft Research har ligesom Google og IBM investeret stærkt i kvantecomputering. Meget af forskningen har været inden for grundlæggende fysik, hvor de har samarbejdet med universiteter rundt omkring i verden for at producere effektive miljøer med lave temperaturer og stabile kvantebaserede miljøer. Men at skabe en qubit - den sandsynlige kvantebit, der i det væsentlige erstatter 0'er og 1'er af en traditionel bit - er kun en del af historien. Det, der også er nødvendigt, er en måde at programmere en kvantecomputer på og fortolke qubits 'probabilistiske tilstand.

Konstruktion af kvantecomputere

Arkitekturen for et kvanteprogram er relativt enkel: Et traditionelt program får værdier fra brugerinput eller fra anden kode. Derefter overfører disse værdier til en kvanteapplikation, der indstiller qubits i en kvanteprocessor ved hjælp af en af ​​mange kvantealgoritmer, før resultaterne sendes tilbage til den overordnede applikation.

Det er en proces, der minder meget om den proces, jeg brugte ved mit første programmeringsjob, hvor jeg skrev Fortran-analysekode for finite-element, der brugte en vektorprocessor, der var knyttet til en supercomputer til at håndtere matrixalgebra. Vektorbibliotekerne, jeg brugte til at opbygge og løse mine 3D-elektromagnetiske modeller, arbejdede både på den specialiserede hardware eller på en matematisk coprocessor i en stationær arbejdsstation, så jeg kunne teste min kode, før jeg brugte dyr supercomputertid.

Microsoft udgav for nylig sit Quantum Development Kit, der er bygget op omkring sit nye Q # sprog. Designet til at bruge velkendte konstruktioner til at hjælpe programapplikationer, der interagerer med qubits, det tager en lignende tilgang til at arbejde med coprocessorer og levere biblioteker, der håndterer den faktiske kvanteprogrammering og fortolkning, så du kan skrive kode, der overfører qubit-operationer til en Microsofts kvantecomputere .

Det er ikke let at bygge bro mellem de klassiske og kvantebaserede verdener, så forvent ikke, at Q # skal være som Visual Basic. Det er mere som at bruge det sæt Fortran-matematikbiblioteker med den samme underliggende antagelse: at du forstår teorien bag, hvad du laver.

Et element i Quantum Development Kit er en quantum computing primer, der udforsker problemer omkring brug af simulatorer samt giver en primer i lineær algebra. Hvis du vil programmere i Q #, er det vigtigt at forstå vigtige lineære algebra-begreber omkring vektorer og matricer - især egenværdier og egenvektorer, som er nøgleelementer i mange kvantealgoritmer.

Kom godt i gang med Q #

Udviklingssættet downloades som en Visual Studio-udvidelse, så du kan bruge det med alle versioner af Microsofts vigtigste udviklingsmiljø, inklusive den gratis Community-udgave. Installationsprogrammet inkluderer Q # -sproget, en lokal kvantesimulator og biblioteker, der understøtter indlejring af Q # -moduler i din .Net-kode. Når du er installeret, kan du oprette forbindelse til Microsofts Q # Github-lager for at klone og downloade prøvekode og yderligere biblioteker. Det er en hurtig proces; installationsprogrammet tager et par minutter at downloade og køre på en rimelig kraftig udviklings-pc. Bibliotekerne er hostet på Nuget, så du hurtigt kan opdatere til de nyeste versioner.

Med en fungerende kvantecomputer, der stadig er et par år væk, er Quantum Development Kit begrænset til at arbejde med simulerede kvantecomputere. Microsofts forskningssystemer har endnu ikke produceret en fungerende topologisk qubit, men resultaterne har været lovende. Så indtil der offentliggøres resultater, og Azure får sine kvantecoprocessorer, er du begrænset til at eksperimentere med lokale og skyhostede simulatorer. Fordi de er begrænset til at bruge traditionelle programmeringsteknikker, vil de ikke håndtere hele spektret af komplekse matematiske operationer, som kvantecomputering lover. Men de giver en fornemmelse for, hvad et lille antal qubits kan gøre.

Meget af det arbejde, du skal gøre for at opbygge et kvanteprogram, er at konstruere en kvantecomputer ud af qubit-transformationer. Q # -sproget håndterer processen for dig, fordi det inkluderer udtryk for mange kvanteportstrukturer såvel som almindelige kvantealgoritmer. Selve sproget føles velkendt for .Net-udviklere med en struktur, der er et sted mellem C # og F #.

Grundlæggende om kvanteprogrammering

Du finder de fleste Q # -programmer relativt enkle, fordi det, du laver, er at konfigurere arrays af qubits og anvende matematiske transformationer på dem. Selvom det underliggende problem er komplekst (eller i det mindste sandsynligvis vil tage meget beregningstid ved hjælp af traditionelle beregningsressourcer), stoler du på kvantecomputeren til at håndtere arbejdet for dig, og dens kvantealgoritmer betyder, at du kan bruge et lille antal af tilsluttede qubits for at løse dit problem.

En vigtig ting at bemærke er, at nogle kvantesprog, som det, der bruges af DWave i sine kvantecomputere, er designet til at arbejde med kvanteudglødning, ikke den portmodel, der bruges i Microsofts kvantehardware.

Hvor Q # -sprog adskiller sig fra det velkendte, er det i dets understøttelse af kvantealgoritmer. Dette starter med typer: Q # er et stærkt skrevet sprog, der tilføjer nye typer, der repræsenterer qubits og grupper af qubits. En anden vigtig forskel er mellem Q # operationer og funktioner. Operationer indeholder kvanteoperationer, mens funktioner kun er til klassisk kode, selvom de kan arbejde med resultaterne fra en kvanteoperation.

Kvantealgoritmer og biblioteker

Q # inkluderer også specifikke operationstyper, der arbejder med kvantealgoritmer, herunder dem, der beregner de sammenhængende resultater af en matrix af qubits, og andre, der hjælper med at konstruere qubit-kredsløb, kun udløst, hvis kontrol-qubits er korrekt indstillet.

Det er vigtigt at huske, at hvor Q # bruger Zero og One i resultater som variabler til håndtering af qubits, er de ikke de samme som binære 0 og 1. I stedet er de repræsentationer af egenværdierne for de vektorer, der er gemt i qubits.

Du bruger Q # standardbibliotekerne til at opbygge og konstruere dine kvanteapplikationer. Disse inkluderer et sæt kvanteprimitiver, der definerer de porte, du bygger ud af dine qubits, samt anvendelse af kvanteoperatorer og måler resultaterne. Bibliotekerne er opdelt i to dele: optakt til opsætning af din kvantecomputer og kanonen til betjening af maskinen. Det er vigtigt at forstå forskellene mellem disse to dele af bibliotekerne, fordi de skal holdes adskilt i din kode. Brug af kanonoperatører kører kvantemaskinen med operatører, der håndterer specifikke kvantealgoritmer; for eksempel at anvende en Quantum Fourier Transform eller finde fælles skillevægge med to tal.

Q # er ikke et sprog for begyndere. Selvom det forenkler nogle kvanteoperationer, afhænger det af at have kendskab til, hvordan en kvantecomputer fungerer, samt forstå det grundlæggende i kvanteberegning. Hvis du har arbejdet med lineær algebra og sandsynligheder, har du et forspring, men det er stadig værd at bruge tid først på Microsofts tutorials og eksempler.

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