Zephyrnet Logosu

Heterojen Mimarilerde Programlama İşlemcileri

Tarih:

Programlama işlemcileri, aynı mimariye daha fazla ve farklı türde işleme öğesi dahil edildiğinden daha karmaşık hale gelmektedir.

Sistem mimarları, gücü, performansı ve alanı iyileştirmek için mevcut seçeneklerin sayısından keyif alabilirken, programlama işlevselliği ve hepsinin birlikte çalışmasını sağlama zorluğu büyük bir zorluk olarak ortaya çıkıyor. Çeşitli IP sağlayıcılarından birden fazla programlama aracı, modeli ve yaklaşımı içerir.

"Her türlü uç çıkarım ürününde, ister bir Nest kamera, ister bir otomotiv uygulamasındaki bir kamera, hatta bir dizüstü bilgisayar olsun, temel olarak üç tür işlevsel yazılım olacaktır ve büyük ölçüde üç farklı tür geliştiriciden gelir: veri bilimcileri, gömülü veri bilimcileri. CPU geliştiricileri ve DSP geliştiricileri," dedi. kuadrik.

Ve geliştirme sürecinde oturdukları yere bağlı olarak yaklaşımları çok farklı görünebilir. Roddy, "Veri bilimcileri zamanlarını Python'da, çerçeveler için eğitimde ve matematiksel soyutlama düzeylerinde şeyler yaparak geçiriyorlar" dedi. “PyTorch çok üst düzey, soyutlanmış, yorumlanmış, uygulama verimliliğine pek önem verilmemiş çünkü onların tek umursadıkları matematikte fonksiyon kazanmak, modellerde doğruluk vs. Oradan PyTorch modelleri, ONNX kodu çıkıyor. ve PyTorch modeline katıştırılmış Python kodu. Gömülü geliştiriciler tamamen farklı bir kişilik tipidir. CPU satıcılarının araçları veya Arm araç setleri veya C/C++ geliştirme için Microsoft Visual Studio gibi genel bir şey olabilecek daha geleneksel araç setleri ile çalışırlar. Ve hangi CPU olursa olsun, belirli bir çip için satıcının bir geliştirme stüdyosu sürümünü alacaksınız ve RTOS kodu ve sürücü kodu gibi önceden oluşturulmuş şeylerle birlikte gelecek. Belirli bir satıcıdan çip düzeyinde bir çözüm satın alıyorsanız, DDR, PCI arabirimleri vb. için sürücülere sahip olacaktır.”

Örneğin, oldukça soyut olan bir iPhone için uygulama programlamayı düşünün. "iPhone geliştiricileri için, üzerinde birçok başka yazılımın bulunduğu bir geliştirici kiti var" dedi. “Ama çoğunlukla, gömülü bir şey. Birisi C kodu yazıyor, birisi bir işletim sistemi çekiyor, ister Zephyr, ister Microsoft OS veya buna benzer bir şey olsun. Ve ne üretiyorlar? Derleyicinin kalitesine bağlı olarak C kodu, bazen montaj kodu üretirler. Aynı zamanda bir algoritma geliştiricisi olan DSP geliştiricisi, genellikle matematikçi odaklıdır ve MATLAB veya belki de bir Visual Studio gibi araçlar kullanır. Burada üç kod seviyesi oluşturulur. Python benzeri veri bilimi kodu, DSP, C++ ve gömülü kod.”

Bir Android geliştiricisinin gözünden, şuradaki Müşteri İş Hattı ürün yönetimi direktörü Ronan Naughton: Kol "Tipik bir yazılım mühendisi, birden çok platforma dağıtım için bir mobil uygulama geliştiriyor olabilir. Bu durumda, Arm CPU'nun ve destekleyici araç zincirlerinin her yerde bulunabilmesiyle sağlanabilecek en düşük bakım yükünü, sorunsuz taşınabilirliği ve yüksek performansı arıyor olacaklar.”

Bir Android ortamında, CPU için programlama mümkün olan en geniş araç seçimini sağlar.

"Örneğin," diye belirtti Naughton, "LLVM veya GCC gibi iyi bir vektörleştirme derleyicisi birden çok CPU ve işletim sistemi hedefini hedefleyebilir. Arm Compute Library for ML gibi işleve özel görevler için zengin bir kitaplık ekosistemi vardır. Alternatif olarak, geliştiriciler, Komut Seti Mimarisinin kendisini Arm C Dil Uzantıları gibi gerçeklerle hedefleyebilir.

Tüm bunların altında, hedef ana bilgisayar CPU'suna inmek için gereken tüm adımlarla birlikte bir NPU, DSP ve CPU'dan oluşan geleneksel bir mimari bulunur. Bunların tümü veya çoğu, bir tür çalışma zamanı uygulaması kullanıyor.

Roddy, "Makine öğrenme kodunuzu çalıştırıyorsanız, CPU her çıkarıma, her yinelemeye, makine öğrenimi grafiğinden her geçişe aktif olarak dahil olur ve her şeyi düzenler," dedi Roddy.

Şekil 1: Geleneksel NPU+DSP+CPU için araç/kod akışı. Kaynak: Quadric.io

Şekil 1: Geleneksel NPU+DSP+CPU için araç/kod akışı. Kaynak: Quadric.io

Şekil 1: Geleneksel NPU+DSP+CPU için araç/kod akışı. Kaynak: Quadric.io

DSP'lerin, CPU'ların ve NPU'ların nasıl programlanacağı uygulamalara, kullanım durumlarına, sistem mimarilerine ve ortamlara bağlı olarak değişir. Bu, belirli bir uygulama veya kullanım modeli için en iyi performansı elde etmek için kodun nasıl optimize edileceğini belirleyecektir.

Bölüm başkanı Andy Heinig, "Bir CPU üzerinde, derleyicilerin çoğu kodu son derece iyi optimize edebilir, ancak DSP'leri veya NPU'ları programlarken, özellikle kodu paralel hale getirmek için, yazılım mühendisi tarafından çok iş yapılması gerekir çünkü tüm derleyiciler başarısız olur" dedi. verimli elektronik için Fraunhofer IIS'nin Uyarlanabilir Sistemler Mühendisliği Bölümü. "Bu, donanım üzerinde ne kadar çok paralel iş yapılacaksa, yazılım mühendisi tarafından o kadar çok manuel olarak yapılması gerektiği anlamına gelir. Ve işin çoğu, düşük seviyeli programlamada gereklidir.

Bazı örtüşmeler olsa da, bu farklı işleme öğeleri arasında bazı temel farklılıklar da vardır. "Bir CPU genel amaçlı bir mimaridir ve bu nedenle çok çeşitli kullanımları, işletim sistemlerini, geliştirme araçlarını, kitaplıkları ve geleneksel düşük seviye C'den yüksek seviye C++, Python, Web uygulamaları ve Java'ya kadar birçok programlama dilini destekler" dedi. Guy Ben Haim, ürün müdürü Synopsus. "DSP uygulamaları genellikle optimize edilmiş bir gerçek zamanlı sistemde çalışır, bu nedenle DSP işlemcilerinin programlanması, veri paralelliğine, performans ayarına ve kodlara izin vermek için düşük seviyeli dillerin (örneğin, montaj, C), DSP kitaplıklarının ve belirli derleyicilerin/profil oluşturucuların kullanılmasını gerektirir. boyut optimizasyonları. Genel amaçlı CPU'ların aksine, ancak DSP'lere benzer şekilde, NPU mimarisi ayrıca belirli görevleri hızlandırmaya, bu durumda AI/ML uygulamalarını hızlandırmaya adanmıştır.

Bir DSP mimarisi, birden çok sensörden gelen verileri paralel olarak işleyebilir. Ve geleneksel CPU veya DSP programlaması, verileri işlemek için bir programa veya bir dizi kurala sahip bir algoritmaya dayanırken, yapay zeka verilerden öğrenir ve zaman içinde performansını artırır.

Ben Haim, "AI modelleri oluşturmak, eğitmek ve dağıtmak için PyTorch ve TensorFlow gibi üst düzey çerçeveler kullanıyor" dedi. "Sinir ağı modelleri, insan beynindeki nöronların mimarisinden ilham alıyor ve girdi verilerine dayalı olarak tahminler veya kararlar verebilen bir sistemin matematiksel temsillerinden oluşuyor."

Başka farklılıklar da var. C ve C++ gibi üst düzey dillerle programlamaya ek olarak, Tensilica Vision ve AI DSP'ler için ürün pazarlama ve yönetimi grup direktörü Pulin Desai, şunları söyledi: Ritim, “DSP'ler ve CPU'lar ayrıca math lib, fp lib gibi çeşitli kitaplıkları kullanır. DSP'ler ayrıca, özel amaçlı bir uygulama gerçekleştirmek için adresleyebilecekleri belirli sektör için belirli bir lib'e sahiptir. DSP'ler ve CPU'lar, müşterilerin uygulamalarını geliştirmek için kullandıkları OpenCL ve Halide gibi üst düzey dillerle de çalışır."

NPU programlama, yapay zeka eğitim çerçeveleri kullanılarak tamamen farklı bir ortamda yapılır. Bunlar da TensorFlow ve PyTorch'ta sinir ağı kodu oluşturuyor ve ağ, bir sinir ağı derleyicisi kullanılarak belirli donanım için daha da derleniyor."

“Sinir ağları 'programlanmış' değildir. Synopsys'in ürün müdürü Gordon Cooper, eğitildiler' dedi. "DSP'ler ve CPU'lar daha geleneksel bir şekilde programlanıyor. Kod C/C++ ile yazılmıştır. Ardından, kodu test etmek ve düzenlemek için bir IDE'ye ve hata ayıklayıcıya ihtiyacınız var."

Programlama modelleri nasıl çalışır?
Bu nedenle, CPU'lar ve DSP'ler için tasarımcılar C veya C++ ile programlayacaklar, ancak belirli bir lib api'yi çağırabilirler. Desai, "Örneğin, vizyon için kod, OpenCV API çağrılarını çağırabilir" dedi.

Şekil 2: DSP'ler/CPU'lar ile NPU'lar üzerindeki gömülü yazılım geliştirmenin karşılaştırılması. Kaynak: Kadans

Fraunhofer'den Heinig, çoğu zaman kodu optimize etme işinin elle yapıldığını söyledi. "Üst düzey programlama modelleri, donanımın paralel olarak kullanılması söz konusu olduğunda genellikle başarısız olur. Ancak, elbette, yüksek düzeyde optimize edilmiş temel işlevlere sahip kitaplıkları kullanmak mümkündür."

Bir AI modeli geliştirmek çok farklıdır. Birkaç adım gereklidir. Synopsys'ten Ben Haim, "Önce tanımlama ve hazırlık" dedi. “Yapay zekanın çözmeye uygun sorunu belirledikten sonra doğru modeli seçmek ve süreçte kullanılacak verileri toplamak önemlidir. İkincisi model eğitimidir. Modeli eğitmek, modeli optimize etmek, performansı artırmak ve doğruluğu sağlamak için büyük miktarda eğitim verisi kullanmak anlamına gelir. Üçüncüsü çıkarımdır. Yapay zeka modeli, bir üretim ortamında kurulur ve mevcut verilere dayalı olarak hızlı sonuçlar, tahminler ve çıkarımlar yapmak için kullanılır."

Başka farklılıklar da var. DSP'lerin çoğu, paralel olarak bir veri dizisinin verimli bir şekilde işlenmesi için ayarlanmış bir mimariye sahip vektör işlemcileridir. Synopsys'in kıdemli ürün müdürü Markus Willems, "Donanımı verimli bir şekilde kullanmak için verilerin vektörleştirilmesi gerekiyor" dedi. "Optimize eden bir derleyici, skaler koddan başlarken bir dereceye kadar otomatik vektörleştirme uygulayabilir. Yine de, kullanım durumlarının büyük çoğunluğu için, optimum sonuçlara ulaşmak için bir programcının, özel vektör veri türleri kullanarak kodu vektörleştirilmiş bir şekilde yazması gerekir."

Willems, talimat setinin tüm gücünden yararlanmak için içsellerin yaygın olarak kullanıldığını öne sürdü. "Düz montaj kodlamasından farklı olarak, bir içsel, kayıt tahsisini derleyiciye bırakır, bu da kodun yeniden kullanılmasına ve taşınabilirliğine izin verir."

Ek olarak, çoğu DSP algoritması için tasarım, işlevsel performansı analiz etmek için (yani, algoritmanın sorunu çözüp çözmediğini kontrol etmek için) MATLAB'de başlar. Giderek artan sayıda DSP için, MATLAB gömülü kodlayıcıyı ve işlemciye özel DSP kitaplıklarını kullanarak MATLAB algoritmalarını vektörleştirilmiş DSP koduna eşlemek için doğrudan bir yol vardır.

Ancak işlemciden tam olarak yararlanmak için Heinig, donanım ve yazılımı birlikte optimize etmenin gerekli olduğunu söyledi. “Aksi takdirde, bir çözümde başarısız olursunuz çünkü tasarlanan donanımın problem özelliklerine pek uymadığını çok geç fark edebilirsiniz. Bu, özellikle paralel olarak daha fazla operasyon yürütmek istiyorsanız geçerlidir.”

Bir SoC mimarı için, donanım ve yazılım mimarisini yönlendirecek olan hedef pazar ve hedef uygulamalarla başlar.

Desai, "Programlanabilirlik ve sabit donanım arasında seçim yapmak her zaman zorlayıcıdır" dedi. "Kararlar, maliyet (SoC alanı), güç, performans, pazara sunma süresi ve geleceğe dönüklük tarafından yönlendirilir. Hedef uygulamanızı biliyorsanız ve gücü ve alanı optimize etmek istiyorsanız, sabit donanım en iyisidir. [Bir örnek bir H.264 kod çözücüdür.] Sinir ağları sürekli değişiyor, bu nedenle programlanabilirlik zorunludur, ancak bazı işlevlerin sabit işlevlerde (donanım hızlandırıcı, NPU gibi) ve bazılarının programlanabilir CPU'larda veya DSP'ler yapay zeka için en iyisidir."

İşlemeyi bölümleme
Tüm bunlar daha karmaşık hale getirildi çünkü çeşitli kodlardan farklı tasarımcılar/programcılar sorumlu olabilir.

Desai, "Çıkarım uygulamalarından bahsediyoruz ama aynı zamanda sistem yapan bir sistem şirketinden de bahsediyoruz" dedi. "Ve bir SoC genel amaçlı olduğundan, belirli bir sorunu çözmek için belirli bir sinir ağı geliştirecek yapay zeka geliştiricileri olabilir - örneğin, bir mikrofon için gürültüyü azaltmak için bir gürültü azaltma ağı, güvenlik kamerası için insan algılama ağı, vb. Bu ağın SoC üzerinde çalışabilen bir koda dönüştürülmesi gerekir, böylece sinir ağını bir CPU/DSP/ ile bir SoC üzerinde başlatılabilecek koda dönüştürmek için araçları nasıl kullanacağını bilen programcılara sahip olursunuz. NPU. Ancak gerçek zamanlı bir uygulama ise, gerçek zamanlı işletim sistemleri, işlemci düzeyinde sistem yazılımları vb. ile nasıl çalışılacağını bilen sistem yazılım mühendislerine de ihtiyacınız olacaktır. bu bir tüketici cihazıysa bir GUI veya kullanıcı arabirimi."

Bir NPU için birkaç husus vardır. Ben Haim, "İlk olarak, NPU yapay zeka iş yüklerini hızlandırmak için tasarlanmalıdır" dedi. "AI/NN iş yükleri, birçok katmanda ağır matematiksel ve çoklu matris çarpımları gerektiren derin öğrenme algoritmalarından oluşur ve bu nedenle paralel mimariye ihtiyaç vardır."

İyi bir NPU'nun temel özelliklerinden birinin, TOPS/MAC'lerde ölçülen performansla verileri işleme ve işlemleri hızlı bir şekilde tamamlama yeteneği olduğunu açıkladı. "Güç/performans/alan (maliyet) arasındaki tipik yarı iletken değiş tokuşu, NPU tasarımı durumunda da oldukça alakalıdır. Otonom otomotiv kullanımları için, özellikle arabanın frenlerine ne zaman basılacağına karar vermek bir ölüm kalım meselesi olduğunda, NPU'nun gecikme süresi kritiktir. Bu aynı zamanda işlevsel güvenlik tasarımı hususlarıyla da ilgilidir. Tasarım ekipleri ayrıca NPU tasarımının güvenlik gereklilikleriyle uyumlu olduğunu da düşünmelidir.”

Programcılar için bir diğer önemli husus, geliştirme ve programlama araçlarıdır.

“Popüler AI çerçevelerinden NN/AI modellerini kolayca içe aktarabilecek, derleyebilecek, optimize edebilecek ve bellek tasarımı da dahil olmak üzere NPU mimarisinden otomatik olarak yararlanabilecek uygun yazılım geliştirme araçları olmadan harika bir NPU oluşturmak yeterli değildir. hususlar" dedi. "Simülasyon araçlarının yanı sıra modelin doğruluğunu kontrol etmenin bir yolunu sağlamak da önemlidir, böylece programcılar yazılım geliştirmeye ve doğrulamaya donanım var olmadan çok önce başlayabilir. Bu, pazara çıkış süresi için önemli bir husustur.”

Cooper kabul etti. “NPU'lar, özel hızlandırıcılara, tamamen esnek olan bir DSP'den veya özellikle bir GPU veya CPU'dan daha yakındır. Önemli bir süre boyunca NN performansına güçlü bir şekilde ihtiyacınız olmadıkça bir NPU eklemeyi seçmeyebilirsiniz. Yalnızca biraz yapay zekaya ihtiyaç duyan müşterilerimiz, DSP performansı için bir vektör DSP kullanıyor ve gerektiğinde yapay zekayı işlemek için yeniden yapılandırarak mülklerinin maksimum esnekliğini sağlıyor. Bu iyi, ancak özel bir NPU kadar güç veya alan açısından verimli olmayacak.

Son olarak, grafiğin hangi alt kümesinin NPU'ya uyduğunu ve neyin uymadığını belirlemeye çalışırken programlama zorlukları ortaya çıkar. [Yukarıdaki şekil 1'in sol tarafına bakın]

Quadric'ten Roddy, "Çalışmazsa, başka bir yerde çalışması gerekir, bu nedenle kodun bölünmesi gerekir," dedi. "Bununla birlikte, bellekte depolanan ikincil bir komut akışı üreteci veya bağlantılı liste oluşturucu var ve NPU, gidip komutlarını getirecek kadar bilgi sahibi. Bu kısım oldukça basit olsa da, sistemde çalışmayan tüm bitler ne olacak? Bu operatörler nerede çalışmalı? Halihazırda var olan bu makine öğrenimi operatörünün verimli bir uygulaması var mı? Eğer öyleyse, burada DSP'de mi, yoksa yoksa CPU'da mı? Birinin gidip bunun yeni bir versiyonunu yaratması gerekiyor. Bunu bir DSP'de yapıyorsunuz çünkü onun yüksek performans göstermesini istiyorsunuz. Şimdi bunu DSP'de kodlamanız gerekiyor ve pek çok DSP, özellikle makine öğrenimi için özel olarak oluşturulmuş iyi araçlardan yoksun. DSP'lerin genel sürümlerinde - ses DSP'leri veya temel genel amaçlı DSP'ler - iki MAC veya dört MAC türü şeyler olabilir. Makine öğrenimi için oluşturulmuş DSP türleri, çok geniş DSP'ler olacaktır. Ekstra geniş DSP'ler, çok geniş aktivasyonlar ve normalleştirmeler ve veri biliminde meydana gelen türden şeyler için iyi bir hedef olabilir, ancak bunlar yenidir ve bu nedenle sağlam derleyicilere sahip olmayabilirler."

Sonuç
Geçmişte, bu programlama dünyaları ayrı disiplinlerdi. Ancak yapay zeka bilgi işlemi, cihazların içinde ve üzerinde giderek daha fazla yer aldıkça ve sistemler giderek daha heterojen hale geldikçe, yazılım geliştiricilerin en azından diğer alanlarda neler olup bittiğinin çok daha fazla farkında olmaları gerekecek.

Sonuç olarak, bu, mühendislik ekiplerinin iki veya üç tür işlemci arasında bölümleme yapmak zorunda kalmadan karmaşık C++ kodu yazmasına ve çalıştırmasına izin veren tek bir donanım/yazılım mimarisinin sürücüsü haline gelebilir. Ancak bunun gerçekleşmesi için şimdi ile o zaman arasında yapılacak çok iş var. Yapay zeka ve donanım mimarilerinin gelişme hızı göz önüne alındığında, bu mimarinin hazır olduğunda hala alakalı olup olmayacağı tamamen net değil.

spot_img

En Son İstihbarat

spot_img

Bizimle sohbet

Merhaba! Size nasıl yardım edebilirim?