RSS
 

Kuantum Programlama

17 Sep

Merhaba,

Yine uzun bir aradan sonra bir şeyler yazabiliyorum. :) Son zamanlarda iyice kafa yorduğum Quantum programlama üzerine bilgilerimi paylaşacağım. Tahmin ettiğiniz gibi programlama kısmına hepiniz yakınsınız ama quantum kısmı fizik ile ilgili ve pek sevdiğiniz bir konu olmayabilir. ;) Aslında Quantum fiziği diye bir bölümde var ama blogumun amacı fizik ile ilgili bilgi vermek olmadığından ve bende fizikçi olmadığımdan bu konuda paylaşım yapmam pek doğru olmaz. Fakat konumuzla alakalı olduğundan dolayı bilmeniz gereken fizikle ilgili bazı temel terimler var. Şimdi bunları burada açıklamak uzun ve sıkıcı olabilir. Siz zaman bulduğunuzda aşağıdaki kaynaklardan temel quantum fiziği bilgilerini inceleyebilirsiniz.

Kaynaklar;

Quantum programlama için, developer’lara pek fazla araç sunulmamaktadır. Şuan ki araçlar daha çok akademik araştırmacılar ve Ar&Ge çalışanları içindir. Kuantum programlamada şuan için 2 tip yaklaşım vardır. Bunlar imperative (Emir bazlı) ve functional (Fonksiyonel) programlama türleridir. Aslında şuan bildiğimiz yapıdan çokta farklı değildirler. Imperative dillere örnek vermek gerekirse; Java, C/C++ verebiliriz. Bir çok dilin fonksiyonel olarakta yazılabildiğini biliyorsunuzdur. Fakat piyasada sınırlı bulunan Quantum Computer’lar kendi compiler’ları üzerinde çalıştıklarından, kullandığınız sistem hangisi ise destekleyen bir dilde yazıp QC(Quantum Computer)’a göndermeniz gerekmektedir. Biz D-Wave System’in BlackBox’ı üzerinden gideceğiz. Aşağıda gördüğünüz resim BlackBox-One’ın 128-qubit’lik işlemcisidir. Henüz Qubit size yabancı geliyorsa, ve 128-Qubit’in ne kadar güclü bir yapı olduğunu öğrenmek istiyorsanız, şöyle bir karşılaştırma verebilirim; Bundan yıllar önce IBM ve MIT’in ortak geliştirdiği 7-Qubit’lik bir QC’nin gücü 128 paralel işlemcili bir super computer’dan daha yüksektir! Bu da demek oluyorsa RSA ile şifrelediğiniz ve güvenlidir dediğiniz yapılar çok kısa sürede kırılabilir. :) Sizi paranoyaklaştırmak istemem ama D-Wave’in BlackBox-Two ürünü 512-Qubit gücünde.

DWave_128chip

Şimdi Quantum programming üzerine biraz araştırma yaptıysanız QCL  ve LanQ terimlerini atlamadığınızdan emin olun. Çünkü örneklerimizin bir kısmını BlackBox için C ile vereceksekte genel olarak LanQ üzerinde Java ile duracağız.

Bu kadar çok Qubit’lerden bahsettikten sonra biraz da Qubit’ler ilgili bilgi verelim. Normal Pc’lerde bildiğiniz yapı 0 ve 1′ler üzerine kuruludur. QC’lar da ise 0,1 veya 0 ile 1 arasındaki bir değerini alabilir. Buna Quantum çakışması da diyebiliriz. Eğer daha önce verdiğim referanslara biraz göz gezdirdiyseniz QC’lardan elde edeceğiniz sonucun normal PC’lerde ki gibi tek olmayacağını anlamışsınızdır. Yani x64 veya x32 bir CPU üzerinde programlama yaparken bir karar kontrol mekanizması size sonuç olarak 0 veya 1 döner. QC’lar ise size O’a olan ihtimalleri ve 1′e olan ihtimalleri matris’ini döner. Şuan için kafa karıştırıcı ve/veya mantıksız gelebilir. Madem net bir sonuç dönmüyor o zaman nasıl programlama yapacağız? diyebilirsiniz. İlerleyen yazılarda hepsi kafanızda oturmuş olacağını umut ediyorum.

Basit bir tablo ile Qubit çakışmasını açıklayacak olursak;

1 Qubit Çifti => 4 Quantum çakışması durumunun her hangi birinde

3 Qubit         => 8 Quantum çakışması durumunun her hangi birinde olabilir.

D-wave system’in 512-Qubit BlackBox-Two ürünü için konuşacak olursak 2512 çakışmanın her hangi birinde olabilir. Normal PC’ler 2n durumunun sadece birinde olurken QC’lar hepsinde veya sadece bir kısmında olabilirler.

Peki bu kadar belirsizliğin olduğu bir ortamda nasıl sınırlı sonuç kümelerine erişeceğiz? Bunun için; QLG(Quantum Logic Gates) dediğimiz mantık kapıları ile yapacağız. Bu kapılara Quantum algoritması da denir. QLG ile ilgili ileride programlama kısmına geçtiğimizde daha somut örnekler vereceğiz fakat hemen bir şeyler öğrenmek isteyenler aşağıdaki dökümanı inceleyebilirler.

Kaynak 1: http://www.optics.rochester.edu/~stroud/presentations/muthukrishnan991/LogicGates.pdf

Ayrıca ilk implemente edilmiş dil olan QCL(Quantum Computation Language)’i incelemek isterseniz aşağıdaki kaynaktan faydalanabilirsiniz.

Kaynak 1: http://tph.tuwien.ac.at/~oemer/qcl.html (Yapısı C’ye benzemektedir)

QCL için biraz daha bilgi verecek olursak;

Aşağıdaki örnek qureg dedikleri Quantum Register’a bir örnektir.

qureg h1[3]  // h1, 3-qubit’lik bir register’dır.

qureg tr[2] // tr, 2-qubit’lik bir register’dır.

H(h1) // Matematikten bildiğimiz hadamard operasyonunu h1 için gerçekleştirir.

H(tr[1]) // Hadamard operasyonunu tr qubit register’ın daki 2. eleman için gerçekleştirir.

 

Yukarıda açıkladığımız gibi farklı dillerde mevcuttur fakat mantık olarak hepsi bir birine yakındır. Evet, tahmin ettiğiniz gibi şimdilik Quantum programlama dilleri ile Web Development yapamazsınız veya oyun geliştiremezsiniz. :) Web geliştirmek combo yapmanız gerekmektedir. :) Hem bir Interpreter ile dil’i işliyceksiniz hemde Interpreter, arkada kendi bir compiler yardımı ile QC üzerinde process’leri manage edecek. Şimdilik zor iş gibi geliyor bana ama olursa da en yakın Java’dan gelir gibi duruyor bu gelişmeler.

Ayrıca, Quantum Computer’lar şuan için çok astronomik rakamlara satıldığından eğer NASA, Pentagon veya Google’da çalışmıyorsanız bir QC görme ihtimaliniz çok düşüktür. Tahmin ettiğiniz gibi QC olmadan simulatör’ler üzerinden çalışacaksınız. D-Wave system Developer Portal için register işlemini durdurdu. Tekrar açtıklarında register olup daha geniş kaynaklara erişebilirsiniz fakat asla normal server mantığı ile düşünmeyin. Bana SSH v.s. verecekler kodu makine üzerine compile edicem falan hep hayal. :D Blacbox’a hiç bir şekilde erişme şansınız yok. Size sundukları tool’lar ile geliştirip compiler’dan geçiriyorsunuz. Daha sonra size sundukları program aracılığı ile kodlarınız gidip BlacBox üzerinde çalışıp size result set dönüyor.

LanQ üzerinde rastgele sayı üreten örnek bir kod örneği;

 /******************************************************************************
  A random number generator
 ******************************************************************************/

 /******************************************************************************
  Main method. From this method the program is run. A qubit is allocated (in
  maximally mixed state) and then measured in standard basis. The outcome is
  0 or 1 with 50/50 probability.
 ******************************************************************************/
int main() {
	qbit q;
	q = new qbit();
	return measure(StdBasis,q);
}

 

Bir sonraki yazıda BlackBox üzerinden örnekler ile ilerleyeceğiz.

Umarım, Quantum Computing adına Türkiye’de de bir şeyler yapabiliriz. En basitinden 2-Qubit’lik bir prototype bile yapsak mükemmel olur. ;)

Saygılar, Sevgiler…

Hakan

 

 

Tags: , , , , , , , , ,

Leave a Reply

 

 
  1. Seyfettin Deveci

    29/10/2013 at 05:28

    Bu Kuantum bilimi beni daima büyülemiştir, daha sonra makineye dönüştürülebileceğini öğrendiğimde merakım da ikiye katlanmıştı.. LAKİN PC’nin evrimleşip QC’lerin hayatımıza girmesi ile birçok riski de beraberinde getirebileceğini düşünüyorum. QC’ler büyük şirket ve devlet bünyesinde kullanılsın ama kişisel kullanıma açarsak Bu devasa hızı küçük beyinli insanlar Saldırı ve kötü amaçla kullanabilirler!!!!!!!!….
    Zaten SSD, 64Bİt gibi yeni standartlarla PC’ler son derece hızlanıyor KUANTUM Sadece Özelde kalsın yada ciddi bir çözüm bulunana kadar… ;).

    Quantum Computer`lar da yazılım geliştirilebildiğini de bu yazıda öğrenmiş oldum. Güzel makalen için Teşekkürler Hakan!.. :).