den här veckan är jag på NDC Developer Conference i Sydney. Medan jag var här deltog jag i en workshop om programmering av kvantdatorer med Q#, som drivs av John Azariah, skaparen av Q# – programmeringsspråket.
Q# är ett nyligen släppt Microsoft-språk speciellt utvecklat för programmering av kvantdatoroperationer från en klassisk dator. Det stöds på Mac, Windows och Linux.
det som är så spännande med Q# är att det är en abstraktion av kvantberäkning på en ny semantisk nivå. Du kan uttrycka komplexa tankar kortfattat (tänk på C kontra monteringsspråk). Nya nivåer av semantisk abstraktion möjliggör framväxten av nya paradigmer.
Q # är dock inte bara en ny abstraktionsnivå över en tidigare, bekant. Q # är en semantisk abstraktion över en revolutionerande hårdvara som fortfarande implementeras fysiskt — en kvantdator.
du kan uttrycka saker i Q # som du helt enkelt inte kan uttrycka på ett klassiskt datorspråk.
Q # är verkligen mer besläktat med ett monteringsspråk för kvantdatorer, när det gäller primitiverna som det inkapslar. Vi är i grunden med kvantdatorer där vi var i slutet av 40-talet / början av 50-talet med klassiska datorer.
Q# programmeringsmodell
programmeringsmodellen för Q# är att behandla kvantdatorn som en coprocessor. Det liknar att arbeta med en GPU — grafikbehandlingsenheten i datorns grafikkort. GPU är en specialiserad processor för att krossa polygoner och beräkna skuggning. Det visar sig att GPU: er också är bra för den typ av nummerkrossning som behövs för Bitcoin-gruvdrift, så folk använder dem för det. För att programmera en GPU monterar du instruktionerna för GPU med ett domänspecifikt språk och skickar dem sedan från datorns huvudprocessor till GPU för körning.
med Q# skriver du kvantoperationerna i det domänspecifika språket Q#, vilket är ett statslöst, funktionellt språk, och skickar dem sedan till kvantdatorn från ett program skrivet i C# som körs på en klassisk CPU, vilket också är där du får den slutliga utmatningen från kvantdatorn.
exempel Q# kod
efter workshopen skrev jag ett Q# – program som visar ett enkelt kvantbeteende som skiljer sig från beteendet hos en klassisk dator.
HGate-programmet visar ett speciellt fall av det berömda Dubbelslitsexperimentet, där observation av ett mellanliggande tillstånd i systemet påverkar systemets beteende.
” Gud spelar inte tärningar… ” — Albert Einstein
för att förstå beteendet som visas av detta program: tänk dig att ta ett mynt och börja med heads up och sedan vända det. Det har en 50% chans att komma upp krona eller klave. Du kontrollerar vad det är och vänder sedan igen. Det har en 50% chans att komma upp krona eller klave igen.
ganska rakt fram. Nu, här är quantum weirdness. I quantum realm, om myntet är en partikel som är föremål för kvanteffekter, vänder du det genom att skicka det genom en kvantlogisk krets som kallas en Hadamard gate. Om du tittar på det efter den första luckan får du en 50/50 Krona/klave på den luckan och på den andra luckan. Men om du inte tittar på det efter den första luckan kommer den andra luckan upp huvudet — varje gång.
Albert Einstein, som först upptäckte kvantmekanik, kunde inte tro att universum kunde fungera så här. Och ändå gör det, för annars skulle vi inte ha iPhones och annan modern elektronik, som arbetar i extremt små skalor och utnyttjar ett antal kvantbeteenden som detta. Einstein tillbringade resten av sitt liv med att försöka bevisa att den kvant weirdness han upptäckte inte var en sak, utan framgång. Och det är därför han inte får äran för det. Men ja, han publicerade tre papper samtidigt-en var ett bevis på atomernas existens, den andra var relativitet och den tredje handlade om svart kroppsstrålning, vilket är ett kvantmekaniskt fenomen.
för att läsa lite mer om varför detta specifika kvantbeteende händer, se README.md fil för exempelprogrammet.
en Q # Quantum Operation
här är ett exempel på en quantum operation skriven i Q#, tagen från exempelprogrammet länkat ovan:
operation CoinFlip (count: Int) : (Int, Int)
{
body
{
mutable numOnes = 0;
mutable numZeros = 0; // Get a Qubit in Zero state
using (qubit = Qubit) { for (test in 1..count) {
// Set is an operation defined elsewhere
Set (Zero, qubit); // Send the qubit through a Hadamard quantum logic gate
H(qubit); // Measure the value of the q-bit
let state = M(qubit); if (state == Zero) {
set numZeros = numZeros + 1;
}
if (state == One) {
set numOnes = numOnes + 1;
}
}
ResetAll(qubit); // Reset the qubit
}
return (numZeros, numOnes);
}}
Q# Language Design
Q# bygger på inspiration från F# som ett funktionellt språk (kompilatorn / tolken är skriven i F#), C# för syntax och drar några ideer från Python (särskilt for in
).
det är ett statslöst språk — det finns inget sätt att hålla tillstånd mellan kvantoperationer, och mätningen av tillstånd för att returnera ett värde från en operation kollapsar kvanttillståndet till en enda verklig stat. Det har inga variabler, men använder bindning av konstanta immutables.
typer är Tupelbaserade, med godtycklig arity. Den har icke-curry partiell applikationsstöd, och har generika och funktorer. Funktorer tillåter sekvenser av operationer som skall uttryckas och motiveras över.
Q# – kompilatorn kan göra hela programanalysen och resonera över koden för att göra optimeringar innan du skickar operationerna till kvantdatorn. Detta är viktigt på grund av kostnaden för operationer, särskilt med tanke på den lilla tid som qubit-tillståndet är sammanhängande med nuvarande och troliga (kortsiktiga) framtida kvantdatorer.
Vilka Problem Kan Kvantdatorer Lösa?
klassiska datorer använder bitar som kan ha en av två tillstånd — en eller noll. Kvantdatorbitar, eller qubits, har bara en av dessa två tillstånd när man tittar på dem, men inuti kvantdatorn kan de ha probabilistiska tillstånd. Med detta kan de modellera många stater — särskilt de probabilistiska tillståndsvågformerna av partiklar. Hur gör du användbara beräkningar med detta? Det är bra att modellera fysiska system.
år 1911 räknade vi ut hur man gör ammoniak. Det kräver uppvärmning av kväve till 5000 grader och komprimering till 50 atmosfärer. Denna ammoniak används för krut och gödselmedel, och detta gödselmedel tillät den gröna revolutionen på 60-talet som gjorde det möjligt för oss att fördubbla den globala mänskliga befolkningen. 4% av den globala energibudgeten går till produktion av ammoniak.
Kväveas är ett enzym i en bakterie som lever i parasitiska knölar på bönans rötter. När du odlar bönor i ett fält fixar detta enzym kväve från atmosfären i marken och gödslar jorden. Så bönder roterar grödor-växande vete, sedan bönor, sedan vete — för att hålla jorden bördig.
för att förstå hur man producerar ammoniak som bakterierna gör — vid rumstemperatur med H2O + N från atmosfären-kräver att man löser interaktionen mellan 170 elektroner. Kväveas har två övergångsmetaller som fungerar som katalysatorer: järn och molybden. Det betyder att vi behöver 21 komplexa tal för att modellera elektronernas vågformer. Det finns bara 21 AX — atomer på jorden-så du skulle behöva 1 000 000 jordar bara för att lagra problemdefinitionen.
en kvantdator med 200 qubits kan modellera så många stater.
med den datorn kan vi köra simuleringarna för att förstå hur man gör det som bakterierna gör. Det kommer att finnas ytterligare teknik när vi har lösningen att bygga något som kan göra det — precis som nya läkemedelsföreningar måste produktiveras. Och när det är klart kommer jordbruksproduktionen att bli betydligt högre.
Kvantdatorkonstruktion
i en kvantdator finns det två komponenter till en qubit — någon fysisk komponent som håller kvanttillståndet och en komponent som utför operationer på den fysiska komponenten.
en qubit — åtminstone hur vi närmar oss det nu — fungerar på 15 milliKelvin. Flytande Helium är 4 Kelvin.
modellen för kvantberäkning är en generalisering av klassisk databehandling. Det är matematiskt linjär algebra. Matematiskt är en qubit en vektor i ett högdimensionellt linjärt utrymme (ett Hilbert-utrymme).
du kan inte observera qubit i det utrymmet, men du kan använda det genom att begära att systemet tillämpar rotationsöversättningar på det.
nuvarande kvantdatorer kan generera en fysisk qubit i 10^-6 sekunder. Efter den perioden sönderfaller det, så felkorrigering behövs.
det finns två modeller av kvantberäkning:
- grindmodellen – tidsutveckling av kvanttillstånd med hjälp av matrismultiplikation. Detta är den modell som Q# använder.
- Kvantglödgning — hitta det lägsta energitillståndet som löser ett problem. Dwave-datorn använder den här metoden.
klassisk databehandling är ett speciellt fall av kvantberäkning. Så utveckling och upptäckter inom kvantberäkning orsakar insikter i klassisk databehandling.
Quantum Computing Impacts
rubrikaffischbarnet för Quantum Computings troliga framtida påverkan kan bryta nuvarande krypteringsscheman. Men det kommer sannolikt att bli många mer effektfulla förändringar innan dess.
att bryta modern kryptografi kräver kvantdatorer med 5000 qubits.
Microsoft rullar redan ut post-quantum-computing-resistent kryptering — inklusive gitterbaserad kryptografi. Modern kryptografi bygger på factoring stora primtal — klassiskt dyrt att lösa, men trivialt för kvantdatorer.
NISQC är ”Noisy Intermediate Scale Quantum Computing”. Vissa människor utvecklar datorer som har ett stort antal bullriga qubits. MS gör inte detta. De arbetar med att få sin första ”topologiska qubit” – en qubit som är resistent mot dekoherens. Det kommer att vara mer beräkningsmässigt relevant. De är på väg att få det i år. John hoppas att vi under hans livstid kommer att se 1000-1, 000, 000 qubits på en skiva vid 15milliKelvin.
när vi får kvantdatorer online är en av de saker de hjälper oss att göra modellera fysiska system som vi kan använda för att göra effektivare kvantdatorer.
att lösa problem som Kväveas, eller hur klorofyll fångar CO2 från atmosfären och förvandlar det till kolhydrater — reverserar växthuseffekten och låter oss skapa mat ur tunn luft (och solsken) — är närmare horisonten och kommer att ha en enorm inverkan — som kommer att använda kvantdatorer för att utveckla superledare.
och de kommer också att låsa upp problem och möjligheter som vi inte ens överväger just nu. Einstein tänkte inte på iPhone eller Internet när han publicerade sitt papper om svart kroppsstrålning.
vi lever i framtiden just nu.
för ett par bra böcker som introducerar kvantfysik utan mycket matematik rekommenderar jag:
”på jakt efter Schrödingers katt: Kvantfysik och verklighet ” – en populär historia om utvecklingen av kvantmekanik, som spårar utvecklingen av tanke och upptäckt genom 20-talet.
”verklighetens Tyg – vetenskapen om parallella universum och dess konsekvenser” — en bok av David Deutsch, en pionjär inom kvantberäkning. Denna bok börjar med vetenskapsfilosofi (särskilt dess epistemologi) och fortsätter med att undersöka några av de filosofiska konsekvenserna av kvantmekanik.
om du vill komma in i det, kolla in ”Quantum Computing for Computer Scientists”. Det här är boken som John rekommenderar.
det finns känd teknik i detta utrymme-till exempel Quipper, som implementeras i Haskell. Q# kommer dock i en Quantum Computing SDK som innehåller en 3-qubit lokal simulator och tillgång till en 40-qubit molnbaserad simulator. IBM har OpenQASM-ett programmeringsspråk för kvantmontering, som har en Skrapliknande visuell redaktör och en molnbaserad (verklig) kvantdatorplattform. Q # är ett språk på högre nivå med typer och kontrollflöde.