Burada sunulan diğer popüler cevapların tümü FPGA'lar ve CPU'lar arasındaki gerçek farklılıklar hakkında konuşuyor. Bir CPU'nun sıralı yapısına karşı FPGA'nın paralel yapısına işaret ederler veya belirli algoritmaların bir FPGA üzerinde neden iyi çalıştığına dair örnekler verir. Bunların hepsi iyi ve doğru, ancak CPU ve FPGA'lar arasında daha temel bir fark olduğunu söyleyebilirim.
Bir FPGA ve bir CPU arasındaki ortak payda nedir? Her ikisi de silikon üzerine inşa edilmiştir. Ve bazı durumlarda kelimenin tam anlamıyla aynı silikon süreçleri.
Temel fark, o silikonun üstüne yığdığımız soyutlamalar. Bir insanın, tek bir modern CPU tasarımının silikondan paketlenmiş IC'ye kadar olan bütün detaylarını anlaması mümkün değildir. Bu yüzden, mühendislik sürecinin bir parçası olarak, bu karmaşık problemi, insanların kafalarını sarması için daha küçük yönetilebilir problemlere bölüyoruz.
Bu silikonu çalışan bir CPU'ya dönüştürmek için ne gerektiğini düşünün. İşte bu amaç için gerekli olan soyutlama katmanlarının biraz basitleştirilmiş bir görünümü:
Öncelikle silisyumdan transistör oluşturmayı bilen mühendislerimiz var. Gücü kesen ve 10'lu ve hatta 100'lü gigahertz hızında değişen minik transistörlerin nasıl tasarlandığını ve bir IC paketinden ve bir PCB'nin karşısına göndermek için yeterli güce sahip sinyalleri sürdürebilen etli transistörlerin nasıl tasarlandığını biliyorlar. başka bir çip için.
Daha sonra, bu transistörleri yüzlerce farklı mantık hücresi içeren kütüphanelere nasıl biraraya getireceğini bilen dijital mantık tasarımcılarımız var. Mantık kapıları, birkaç isim vermek için floplar, ekler ve ekleyiciler çevirin. Hepsi çeşitli konfigürasyonlarda.
Daha sonra, bu dijital (ve bazen analog) blokları, yüksek hızlı alıcı-vericiler, bellek denetleyicileri, dal tahmin edicileri, ALU, vb.
Ardından, bu fonksiyonel üniteleri eksiksiz bir sistemde bir araya getirerek üst düzey CPU tasarımları yapabilecek CPU tasarımcılarımız var.
Ve orada bitmiyor. Bu noktada, montaj kodunu çalıştıran çalışan bir CPU'muz var ancak bu, çoğu programcının bugünlerde yazdığı bir dil değil.
- Montaj kodunu derleyen bir C derleyicimiz olabilir (muhtemelen bazı orta temsiller aracılığıyla)
- Nesne yönelimli bir dil elde etmek için C'nin üstüne başka bir soyutlama ekleyebiliriz.
- Java bayt kodu gibi şeyleri yorumlayabilmemiz için C veya C ++ üzerine bir Sanal makine bile yazabiliriz.
Ve soyutlama katmanları oradan devam edebilir. Buradaki önemli nokta, bu soyutlama katmanlarının, toplu olarak ölçeklendirilen ve özel bir silikon tasarımının küçük bir kısmını harcayan bir CPU tabanlı sistem üretmek için birleşmesidir.
Bununla birlikte, burada yapılması gereken önemli nokta, her soyutlamanın aynı zamanda kendi başına bir maliyet taşıdığıdır. Transistör tasarımcısı, her kullanım durumu için mükemmel transistörü oluşturmaz. Makul bir kütüphane kuruyor ve bazen eldeki iş için gerçekten gerekenden biraz daha fazla güç ya da biraz daha fazla silikon tüketen bir transistör kullanılıyor. Benzer şekilde, mantık tasarımcıları her olası mantık hücresini oluşturmazlar. 4 giriş NAND geçidi ve 8 giriş NAND geçidi oluşturabilirler, ancak başka bir mühendis 6 giriş NAND'a ihtiyaç duyduğunda ne olur? 8 girişli NAND geçidi kullanıyor ve silikon kaynaklarının kaybedilmesine ve güç kazanmasına neden olan kullanılmayan 2 girişi kapatıyor. Ve böylece soyutlamalar zincirine kadar çıkıyor. Her katman bize karmaşıklığı ele almak için bir yol veriyor.
Şimdi bu soyutlamaları bir FPGA için gerekenlerle karşılaştırın. Temelde, FPGA soyutlamaları yukarıdaki listede 2. sırada durur. FPGA, geliştiricilerin dijital mantık katmanında çalışmasına izin verir. Bundan biraz daha karmaşık çünkü işlemcilerin bu katmanda 'zor kodlanmış' olması ve FPGA'ların çalışma zamanında yapılandırılması gerekiyor (BTW, bu nedenle işlemcilerin genellikle daha yüksek frekanslar çalıştırmasıdır), ancak asıl önemli gerçek şu ki FPGA'lar için CPU'lardan çok az soyutlama var.
Öyleyse, bir FPGA neden bir CPU'dan daha hızlı olabilir? Temelde bunun nedeni FPGA'nın CPU'dan çok daha az soyutlama kullanmasıdır, yani tasarımcı silikona daha yakın çalışır. İşlemciler için gerekli olan tüm soyutlama katmanlarının maliyetini ödemiyor. Daha düşük seviyede kod yazıyor ve belirli bir işlevsellik elde etmek için daha çok çalışması gerekiyor, ancak ödül daha yüksek performans alıyor.
Fakat elbette, daha az soyutlamanın da aşağı tarafı var. Bütün bu CPU soyutlamaları iyi sebeplerden dolayı orada. Bize daha basit bir kodlama paradigması veriyorlar, bu da daha fazla insanın onlar için kolayca geliştirebileceği anlamına geliyor. Bu da, var olan daha birçok CPU tasarımı olduğu ve dolayısıyla CPU'lardan çok büyük fiyat / ölçek / piyasaya zaman avantajımız olduğu anlamına gelir.
Yani orada var. FPGA'lar daha az soyutlamaya sahiptir ve bu nedenle daha hızlı ve daha verimli olabilirler ancak programlanması zor olabilir. İşlemciler, geliştirilmeleri kolay, ölçeklenebilir ve ucuz olmaları için birçok soyutlama tasarımına sahiptir. Ancak bu avantajlar için ticarette hız ve güçten vazgeçerler.