Algoritmalar bilgisayar mimarilerine mi bağlı?


22

Bir yerde okudum (hangi kitabın olduğunu unuttum), algoritmaların bilgisayar mimarilerinden bağımsız olduğunu. Hatta bazıları algoritmaların kendilerinin hesaplama olduğunu söyler (makineler?)?

Öte yandan, paralel programlama ile ilgili kitapların paralel algoritmalar hakkında bölümleri vardır. Paralel algoritmalar paralel mimarilere bağlı gibi mi görünüyor?

Sanırım bazı büyük resimleri özlüyorum? Teşekkürler.


sıralama birleştirme sonra daha iyi mi?
AK_

Paralel algoritmalar tek iş parçacıklı mimarilerde çalışabilir. Zaman dilimleme bu mimarilerin çoğu tarafından destekleniyor ve paralel görevlerin aynı anda çalışması gerektiğini kim söylüyor? A ve B paralel ise, neden A sonra B'yi çalıştıramazsınız? Ya da biri diğerine güveniyorsa onları serpiştirin (ama bu genellikle kötü bir fikirdir).

3
Algoritmalar bir Soyut Makineye karşı belirlenir . Denir günümüzün çok çekirdekli kişisel bilgisayarların bir idealleştirmedir Tipik bir PRAM (Random Access Machine Parallel . Bazen daha da EREW sınıflandırılır, (özel bellek / yazma) veya CRCW (eşzamanlı bellek yazma / okuma) okumak
rwong

@rwong: algoritmalar varsa soyut makineler bilgisayar mimarilerinden tamamen bağımsız mıdır?
Tim

2
Algoritmalar (ve veri yapıları) belirli mimariler için optimize edilebilir - örn. B + Ağacı, büyük bir veri bloğunun okunmasının birkaç küçük bloğu okumaktan daha ucuz olduğu mimariler için optimize edilmiş ilişkisel bir veri yapısıdır.
user253751

Yanıtlar:


20

Algoritmalar, belirli bir sorunu çözmek için atılan adımlar dizisidir. Sorunu çözmek için reçete, eğer yapacaksanız. "Programlar" aynı şeyleri elbette yapar; belirli makine tasarımlarından, programlama dillerinden ve benzerlerinden bağımsız "genelleştirilmiş" veya "genel olarak uygulanabilir" tarifleri önermek için "algoritma" yı kullanırız.

Algoritmalar genel olmak içindir, ancak mevcut bazı özelliklere hala bağlı olabilirler. Örneğin, "eşzamanlı algoritmalar" farklı programların eşzamanlı olarak çalışması için bazı mekanizmalara sahip olmanıza bağlı olabilir. "Dağıtılmış algoritmalar", işbirliği yapan bir grupta birden fazla sisteme ve bunlar arasında bir ağa veya başka bir iletişim şemasına sahip olmanıza bağlı olabilir. Benzer şekilde, "paralel algoritmalar" çoğu zaman birden fazla işlem biriminiz olduğunda çalışmak üzere tasarlanmış olanlardır - potansiyel olarak çok sayıda işlem birimi ve büyük işlem birimleri dizilerinizde yaygın olan iletişim olanakları. Yalnızca bir bilgisayarınız veya bir CPU'nuz olsa bile bir "paralel algoritma" çalıştırabilirsiniz - ancak trafik mühendislerinin bulunma şekli çok ilginç değil '


13

Algoritmalar bilgisayar mimarisinden bağımsızdır. Bunun nedeni algoritmaların bir sorunu çözen bir dizi işlemi tanımlamasıdır. Mimarilerden bağımsız olarak, sıralama algoritmaları her zaman sıralanır. Bazı mimarilerde aniden 3D çizimler oluşturmazdı.

Bunu düşünürseniz, bu aslında sezgiseldir. Google Chrome (yalnızca algoritmalardan oluşan bir koleksiyon), herhangi bir mimari için derlendiğinde bir web tarayıcısıdır. Aniden bazı mimarilerde aygıt sürücüsü olmayacaktı.

Ancak algoritmaların çalışma hızı mimarilere bağlıdır. Ve bazı algoritmalar mimarilere bağlı olarak diğerlerinden daha hızlı çalışır.

Bunu düşünürseniz, bu aslında sezgiseldir. Bir algoritma verildiğinde, donanım tasarımcısının bu algoritmayı özellikle hızlandıran bir mimari tasarlaması her zaman mümkündür. 3D hızlandırılmış grafik kartları ve bitcoin madenci hızlandırıcıları gibi şeylerin olmasının bir nedeni budur.

İnsanlar paralel algoritmalar hakkında konuşurken, paralel mimariler üzerinde daha hızlı çalışabilen bir algoritma ailesinden bahsediyorlar. Paralel mimariler tarafından geliştirilmeyen birçok algoritma vardır. Dolayısıyla, aynı problem için paralel çalışan yeni algoritmaların tanımlanması, aktif bir araştırma alanıdır.

Ancak bu algoritmalar hala aynı şeyleri yapıyor. Mimariler yaptıklarını değiştirmez.


"Ancak algoritmaların çalışma hızı mimarilere bağlıdır. Bazı algoritmalar mimarilere bağlı olarak diğerlerinden daha hızlı çalışır." Bunun değerli bir cevap verdiğini düşünüyorum.
Rıdvan Nuri Göçmen

4

"Paralel algoritmalar paralel mimarilere bağlı gibi mi görünüyor?"

Bence cevap basit: hayır. General Sadece özellikleri alıyorum

  • paralellik
  • kelime boyutu (örtük kaynak sınırları)

donanım mimarisini düşünürken.

Paralelliğe atıfta bulunarak, herhangi bir paralel algoritmanın toplu olarak hesaplanması ve seri çalışması için herhangi bir paralel arkın olması gerekir, böylece algoritma buna bağlı değildir. Kelime boyutu, sayısal kararlılık için bir sorun olabilir, ancak algoritmanın kendisi için bir sorun olmayabilir. 64bit gibi kaynak sınırları, yalnızca 2 ^ 64 farklı sayının sorun olabileceğini açıklayabilir, ancak yine de öğeler sınırlıdır.

Tabii ki bazı genişletilmiş komut kümelerine bağlı bazı algoritmalar olabilir, ancak en azından her şey temel matematik ile tanımlanabilir.

Örneğin kuantum hesaplama ile bazı Big-O değerleri değişebilir ve sonra şunu söyleyebilirim

"algoritmalar bilgisayar mimarilerinden bağımsızdır"

artık doğru değil.


4

Algoritmalar bilgisayar mimarisine bağlı değildir, ancak belirli bir algoritmanın çalıştırılmasının verimliliği mimariye bağlıdır. Herhangi bir Turing Complete makinesi, diğer tüm Turing Complete makinelerini taklit edebilir, ancak bazı makineler bir şeyde diğerlerinden daha iyi olabilir.

Eşzamanlı algoritmalar ile kastettiğimiz, algoritmanın iyi oynatması veya makinedeki eşzamanlılıktan yararlanabilmesidir, çünkü belki de eşzamanlı makine için özel olarak tasarlanmamış algoritmalar tarafından gerekli olabilecek daha az kilitleme gerektirir veya belki de Algoritma, makinenin tüm gücünü kullanmak için bölmeyi ve fethetmeyi etkin bir şekilde kullanır. Algoritmanın eşzamanlı olmayan bir makinede çalıştırılması yine de mümkün olabilir, ancak bu kadar etkili olmayabilir veya düzgün çalışması için ek kilitleme gerekebilir.

Ayrıca, önbelleğe almayı optimize eden önbellek dostu algoritmalar gibi belirli bir mimarinin tuhaflığından yararlanmak için tasarlanmış algoritmalar da vardır. Bu algoritmalar, algoritmanın varsaydığı şekilde önbelleğe almayan makinelerde daha az verimli olabilir.


3

Teoride algoritmalar mimariden tamamen bağımsızdır. Tek sayıya sahip zaman dilimli bir sistemde her zaman paralel bir mimari taklit edebilirsiniz. Hiç mimarisi olmayan algoritmalar hakkında akıl yürütebilirsiniz . Knuth'un kitabı kurgusal bir mimari kullanıyor.

Uygulamada, önbellek donanım ve senkronizasyon ilkelerinin kullanımını optimize ederek aynı "O" karmaşıklığı için daha iyi çalışma zamanı elde etmeye çalışan algoritmalar vardır.


3

Evet ve hayır. Bu , karşılamak istediğiniz kısıtlamalara ve algoritmanızı çalıştırmak için gereken ön koşullara bağlıdır .

İdeal olarak, algoritma bir şeyin nasıl yapılacağını adım adım tanımlayan soyut bir reçetedir . Algoritmalar, tekrarlanabilirlik ve daha sonra otomatikleştirme amacıyla bu şekilde tanımlanmıştır. Algoritmalar lambda-calcul kaynaklıdır, bu yüzden neden bu şekilde yapıldığını kolayca görebilirsiniz. Bu tanım olağan olanıdır, ancak modern algoritmalar sıralı olmayabilir (eşzamanlı algoritmalar gibi adım adım değil veya birleştirme kullananlara benzer mantıksal), doğrusal olmayan (stokastik algoritmalar) veya sadece garip (kuantum) olabilir algoritmalar), ancak bunu geçeceğim.

Dolayısıyla, ideal olarak, bir algoritma herhangi bir donanımı hesaba katmadan mümkün olduğunca soyut olmalıdır.

Ancak, herhangi bir sistemde olduğu gibi , sadece tutarlı bir sistem elde etmek için değil, aynı zamanda zaman kazanmak için de bazı aksiyomlar tanımlamanız gerekir . Örneğin, çoğu algoritma en azından örtük olarak bir Von-Neumann makinesinde tanımlandığını varsayar. Durum böyle değilse, çalıştırılması gereken sistemin her bir parçasını açıkça tanımlamaları gerekir (çünkü bu tarifi yeniden üretmek için gereklidir, bu bir tür önkoşuldur). Ayrıca, algoritmalar genellikle tam olarak tanımlanmadan write () gibi yaygın komutlara dayanır.

Algoritmaların donanım mimarisinden bu kadar soyut olmamasının bir başka nedeni de, bazı kısıtlamaları karşılamanız gerektiğidir .

Diyelim ki gömülü sistemler üzerinde çalışıyorsunuz, o zaman muhtemelen iş istasyonlarında sahip olduğunuz kaynakların miktarına güvenemezsiniz. En kısıtlı kaynaklardan biri muhtemelen bellektir. Bununla birlikte, çoğu algoritma bellek karmaşıklığını (veriler üzerinde çalışmak için gerekli bellek miktarı) değil, zaman karmaşıklığını (CPU üzerinde yürütme hızı) optimize etme eğilimindedir. Bu sistemler için, bellek için optimize edilmemiş algoritmaların başarısız olacağı veya çok daha yavaş çalışacağı yerlerde bellek için optimize edilmiş algoritmalar tasarlanmıştır. Aslında, gömülü sistemler bellek verimli algoritmaların tek hedefi değildir: örneğin, işlemlerini CPU önbelleğini verimli bir şekilde kullanacak şekilde uyarlayan önbelleksiz algoritmalar vardır. Başka bir örnek: büyük veriler için bazı makine öğrenme algoritmalarıherhangi bir bilgisayarda bulunan bellekten çok daha büyük miktarda veri işlemek için artımlı öğrenme veya çekirdek dışı hesaplama .

Bilgisayarın belirli bir bölümünü değil, donanım mimarisine bağlı olan bir standardı optimize eden algoritmalar da vardır. Örneğin, hassaslık gerektiren sayısal veriler, donanım sınırları nedeniyle doğası gereği sınırlı olan şamandıra veya çiftte saklanır. Sorun, karmaşık hesaplamaların yuvarlamaya yol açabileceğidir ve yuvarlanmış sayılar üzerinde ne kadar fazla hesap yaparsanız, o kadar fazla sürüklenirsiniz. Buna katastrofik müdahale denir . Bazı uygulamalar, en kötü karmaşıklık pahasına bile kritik bir hassasiyete ihtiyaç duyar. Bu tür uygulamalar için, felaket parazitini azaltmak veya kaldırmak için hesaplamalarını optimize eden algoritmalar yapılmıştır.

Dolayısıyla, bir algoritma tasarlamak aynı zamanda soyutlama ve kısıtlamalar arasında bir denge olabilir.

Sonunda, bir algoritmanın hedefi kadar soyut ve ön koşul (mimari) ihtiyacı kadar diyebiliriz . Algoritmanız ne kadar belirli bir hedef hedeflerse, muhtemelen donanım mimarisine o kadar çok güvenir.

İlginizi çekebilecek alakalı bazı anahtar kelimeler:


1
Çoğu algoritma bir Von Neumann veya Harvard mimarisi üzerinde çalışıp çalışmadığını neden umursar ki? Çoğu gömülü sistem ikincisidir, ancak çoğu algoritmayı çalıştırmakta sorun yaşamazsınız. Ayrıca, "önbellek-kayıtsız mimari" bağlantısı daha önce terim duymadım çünkü takdir, ama cümlenin doğru olduğunu sanmıyorum. Anladığım kadarıyla, önbellek-habersiz algoritmalar erişim kalıplarını önbelleğe uyacak şekilde uyarlamaz - aksine, hemen hemen her önbellekte iyi çalışacak erişim kalıplarını kullanırlar, böylece önbelleğin nasıl olduğunu umursamaları gerekmez İşler.
supercat

Belki de bazı algoritmaların büyük miktarlarda verilere esasen rasgele bir şekilde eriştiğini ve hemen hemen her önbellekte kötü çalışacağını gözlemlemek iyi olabilir, bazıları hemen hemen her önbellekte iyi çalışacak yerelleştirilmiş desenler kullanır ve bazıları ile iyi çalışacak şekilde uyarlanabilir belirli önbellek mimarilerini kullanır, ancak başkalarıyla birlikte kullanıldığında kötü performans gösterir.
supercat

2

Bir algoritmayı genel olarak matematiksel veya hesaplama algoritmaları ile karıştırmamalısınız. Bilgi işlem algoritmalarını kastediyorsanız, evet, bunlar makine mimarisinden bağımsızdır.

Wikipedia'dan algoritma tanımı:

Matematik ve bilgisayar biliminde , algoritma, gerçekleştirilecek adım adım gerçekleştirilen bağımsız bir dizi işlemdir. Hesaplama , veri işleme ve otomatik akıl yürütme gerçekleştiren algoritmalar vardır .

Bu tanım, bazı kapalı hesaplama veya veri işleme görevlerini belirtmek için kullanılır. Diğer bir deyişle, Turing Machine üzerinde soyut olarak çalıştırılabilen hesaplamalar . Bununla birlikte, son zamanlarda matematikte, hesaplama sırasında dış dünya ile giriş / çıkış iletişimini içeren Etkileşimli hesaplama adlı bir kavram vardır .

Genel bir tanımda, algoritma sadece bir reçetedir (talimat dizisi). Kullanabileceğiniz komut kümesini veya işlemleri bilmeden bir algoritmayı düşünemeyeceğinizi düşünüyorum; Matematiksel işlemler hesaplama ile ilgilidir, daha sonra ' fırını ısıtın ' adında bir adım içeren bir algoritma matematiksel bir algoritma değildir, ancak bir şefe verebilirsiniz, çünkü nasıl çalıştırılacağını biliyor.

Daha sonra, X, Y, Z ... yapabilen bir makine oluşturabilirsiniz. Bunların her biri algoritmanızda bir talimat olarak kullanılabilir. Ancak hepsi kapalı hesaplama ile ilgiliyse (aslında, interaktif olmayan deterministik dijital küçük adımlı hesaplamalar), o zaman makinenizin Turing Makinesi ile eşdeğer olduğunu kanıtlayabiliriz . Ancak, diğer hesaplama türlerini (sürekli değerler veya etkileşimli hesaplama [ancak bunların gerçekten başka bir hesaplama türü olup olmadığından emin değilim) veya hatta hesaplama yapma görevlerini hedeflerseniz, bunları gerçekleştirebilecek makineleri düşünebilirsiniz.

Bu soru ve cevap , algoritmalara daha geniş bir bakış açısı elde etmek için de ilginçtir.


1

Genel olarak algoritmalar, bazı "maliyet" ölçüsünü en aza indirirken bazı özel problemlere göre tasarlanmıştır. Tarihsel olarak, ortak işlemlerin göreli maliyetlerinin birçok mimaride nispeten benzer olacağı varsayımı üzerine birçok algoritma tasarlandı ve bu nedenle bazı tipik makineler bir algoritmayı diğerinden daha iyi çalıştıracaktı, daha sonra çoğu tipik makinede eski algoritmanın en kötüsü, ikincisinden biraz daha düşüktür. Zaman geçtikçe, böyle bir varsayım eskisi kadar iyi değildir.

Örneğin eskiden bir şeyin bellekten okunması için gereken program sayısının, okunacak şeylerin konumlarından daha önemli olduğu düşünülüyordu. Bellekte birbirine yakın olan şeyleri okumak, birbirinden uzak, ama aşırı derecede gösterilmeyen şeyleri okumaktan biraz daha ucuzdu. Ana CPU hızları bellek hızlarının çok üzerinde bir oranda arttıkça, erişim dizisinin önemi önemli ölçüde artmıştır. Önceki programın bellek getirmelerinin% 95'i L1 önbellek isabetine neden oluyorsa ve ikinci programın bellek getirmelerinin büyük bir kısmı önbellek isimlendirmeleri üretiyorsa, bir programın on kat daha fazla komut yürütmesini ve yine de daha hızlı çalışmasını sağlamak mümkündür.

Ayrıca, eşzamanlılıkla ilgili belirli algoritmalar, bir işlemci çekirdeği tarafından belleğe yazılan verilerin diğer çekirdekler tarafından ne zaman "görüleceği" konusunda çeşitli varsayımlar yapar. Birçok işlemcinin bellekleri okuyabilmeleri ve yazabilmeleri için çeşitli maliyetleri vardır ve bunlar görünürlük konusunda değişken maliyetler ve garantiler sağlar. Bazı algoritmalar, "ücretsiz" görünürlük gereksinimlerini karşılayabilen mimarilerde çok iyi çalışacaktır, ancak bu garantiler için gerekli talimatların pahalı olduğu diğerlerinde zayıf olacaktır. Gerçekten de, bazı mimarilerde, eşzamanlılıkla ilgili bazı algoritmaların, yalnızca tek bir zaman paylaşımlı CPU çekirdeğiyle (elbette eşzamanlı bir algoritma kullanma noktasını yenecek) sınırlı çalışarak çalışması garanti edilebilir.


1

Pek çok cevap, bir algoritmanın mimariden soyut ya da doğrudan, kelimenin tam anlamıyla ilişkisi açısından tanımlanabileceği gerçeğini kaçırmaktadır. Bir algoritmanın açık olması gerekir, ancak bunun az çok spesifik olması için hala yer vardır.

Bir dizeyi tümüyle büyük harflere dönüştürmek için kullanılan bir algoritma mimariden bağımsız olan sahte kodda kolayca açıklanabilir. Ancak aynı zamanda, bir dizeyi özellikle x86 mimarisinde bir dizeyi tamamen büyük harflere dönüştürmek için bir algoritma tanımlamanıza engel olan hiçbir şey yoktur . Tek gereken bir x86 Meclisi ödevidir. (Bunu yine sözde kodda yapabilirsiniz - sadece bu mimariyle ilgili sözde kod!) Sorunun özellikle bunu bir x86 mimarisinde yapmak olduğu gerçeği, artık onu çözmek için bir algoritmaya sahip olmadığınız anlamına gelmez.

Algoritmanın çözmek için tanımlandığı soruna bağlıdır. Çözdüğü sorun mimariden bağımsızsa algoritma mimariden bağımsızdır (ve bunun algoritmanın tanımlanma veya bir araya getirilme biçimiyle geri alınmadığını varsayarsak). Sorun ya teorik, karatahta olabilir ya da çok özel bir mimari olabilir. İkinci durumda, algoritma, bu mimariyle çalışmakla sınırlı olacaktır.


1

Algoritmalar bir dizi adımdır. Onları neyin yürüttüğüne (veya neyin yürütmediğine) bağlı değiller.

Bununla birlikte, bir algoritmanın zaman karmaşıklığı , onu çalıştıranın ne olduğuna bağlı olabilir . Bu nedenle bir algoritmanın ayrıntılı analizi, rasgele erişimli bir makine gibi bir "hesaplama modeli" gerektirir .
Belleğe rasgele erişilip erişilemeyeceği kesinlikle algoritmanızın ne kadar süreceğini etkiler ve çoğu algoritma bunun böyle olduğunu varsayarken gerçekte çoğu mimarlık bu koşulu karşılamamaktadır.


0

Sorunların farklı bağlamlarında farklılık gösterirler. Algoritma, bir sorunu çözmek için atılacak adımların toplamıdır. Bu sorunun bağlamı teorik olarak herhangi bir şey olabilir. Dolayısıyla problemi çözme algoritması tam anlamıyla hayal edebileceğimiz evrende her şeye bağlı olabilir. Bir örnekle açıklığa kavuşayım. Diyelim ki size bir görev verildi,

Çok çekirdekli olduğunda yükleri çoklu çekirdeğe dağıtacak bir algoritma oluşturun.

Şimdi algoritmanızın mimariye bağlı olup olmayacağını hayal edebiliyor musunuz? Tabii ki evet .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.