3 puan yazan GN⁺ 2024-06-26 | 1 yorum | WhatsApp'ta paylaş
  • Düşük maliyetli ESP32-S3’ün 128 bit SIMD komutları ile FAST feature detector hızlandırılarak QVGA (320×240) kareler yaklaşık 6 ms içinde işleniyor
  • Bu çip, 240 MHz’e kadar çift çekirdekli CPU, WiFi ve Bluetooth Low Energy’ye sahip bir mikrodenetleyici; teknik başvuru kılavuzunda sınırlı SIMD desteği de yer alıyor
  • Uygulamanın özü, FAST corner pre-test aşamasında 16 adet 8 bit pikseli tek seferde işlemek; ancak hizalanmamış okumalar ve signed karşılaştırma kısıtları aşılmak zorunda kalmış
  • unsigned 8-bit pikselleri signed karşılaştırmaya uygun hale getirmek için x - 128 == x ^ 0x80 özelliğinden yararlanılarak değerler 0x80 XOR ile dönüştürülüyor
  • Testlerde işlem hacmi 5,1 MP/s’den 11,2 MP/s’ye çıktı ve ESP32-S3 üzerinde 30 fps VGA akışını işleyebilecek seviyeye ulaştı

ESP32-S3 üzerinde FAST feature detector hızlandırma

  • ESP32-S3 için SIMD hızlandırmalı FAST feature detector uygulandı ve referans uygulamaya kıyasla yaklaşık 2 kat performans sağladı
  • Bir QVGA (320×240) kareyi işlemek yaklaşık 6 ms sürüyor
  • ESP32-S3 ucuz bir mikrodenetleyici olsa da 240 MHz’e kadar çift çekirdekli CPU ile WiFi ve Bluetooth Low Energy içeriyor
  • ESP32-S3 technical reference manual içinde sınırlı SIMD komut desteği görülebiliyor

Daha az bilinen SIMD komutları ve uygulama hazırlığı

  • ESP32-S3’ün SIMD komutları gizli bir özellik değil, ancak görece daha az biliniyordu
  • Başvurulabilecek örnekler üç başlıkta toplanıyor
    • Larry Bank’s blog: özellik keşfi ve minimal example sunuyor
    • esp-dsp: convolution, FFT gibi DSP nitelikli işlevlerde kullanılan Espressif kütüphanesi
    • esp-dl: çip üzeri yapay zeka hızlandırmasında kullanılan Espressif kütüphanesi
  • Uygulama sürecinde ESP32-S3 assembly’nin temel yapısı öğrenildi ve özel bir temel register allocator olan basm de yazıldı

FAST corner pre-test’in SIMD ile işlenme biçimi

  • FAST feature detector içindeki corner pre-test, doğu-batı-kuzey-güney yönlerindeki pikselleri örnekleyerek en az 3 “uç” piksel olup olmadığını kontrol eder
  • Burada uç piksel, merkez piksele göre mutlak farkı belirli bir eşiği aşan pikseldir
  • Her vektör register’ı 16 adet 8 bit değer saklayabildiğinden, tek seferde 16 pikselin extrema count değerini hesaplayacak şekilde yapılandırılmıştır
  • Doğu-batı-kuzey-güney yönlerinin her birinde dört piksel parçası örneklenir ve karşılık gelen merkez pikselle karşılaştırılır

ESP32-S3 SIMD kısıtları ve etrafından dolaşma yöntemleri

  • İlk kısıt, ISA’nın doğrudan misaligned read kullanımına izin vermemesidir
    • Merkez piksellerin hizalı olduğu varsayılırsa doğu ve batı blokları hizalı olmaz
    • Doğu ve batı blokları, bitişik iki register birleştirildikten sonra belirli bir dilimi çıkaran komutla elde edilir
  • İkinci kısıt, ESP32-S3’ün yalnızca signed 8-bit karşılaştırma uygulamasıdır
    • Piksel verisi unsigned 8-bit olarak saklandığından, doğrudan signed olarak yorumlanırsa [128, 255] aralığı doğrusal olmayan biçimde [-128, -1] aralığına eşlenir
    • Bu durumda karşılaştırma işlemleri doğru çalışmaz

unsigned pikselleri signed karşılaştırmaya uydurmak

  • Karşılaştırma ve aritmetiğin anlamlı çalışması için piksel değerlerini [0, 255] aralığından [-128, 127] aralığına taşımak gerekir
  • Basitçe 128 çıkarmak yeterli gibi görünse de ESP32-S3’ün SIMD aritmetik işlemlerinin tamamı saturating arithmetic olduğu için sorun çıkar
    • 127’yi aşan piksel değerleri doğru şekilde underflow yapmaz, -128 değerine clamp edilir
  • Çözüm, çıkarma komutu kullanmadan paralel biçimde 128 çıkarmaktır
    • signed 8-bit’te en yüksek bitin basamak değeri -128’dir
    • x - 128, en yüksek biti ters çevirmekle aynıdır
    • Bu nedenle x - 128 == x ^ 0x80 ilişkisinden yararlanılır
  • unsigned 8-bit değerler her yüklendiğinde 0x80 ile XOR uygulanarak aritmetik ve karşılaştırmaya uygun doğrusal aralığa dönüştürülür

Performans sonuçları ve gerçek zamanlı işleme olanağı

  • İki etrafından dolaşma tekniğiyle SIMD hızlandırmalı FAST corner pre-test uygulandı
  • Benzer bir işlem kombinasyonuyla SIMD hızlandırmalı scoring function da yazıldı, ancak ayrıntıları ele alınmıyor
  • Testlerde FAST feature detector işlem hacmi 5,1 MP/s’den 11,2 MP/s’ye yükseldi
  • İşlem hacmi önceye kıyasla yaklaşık %220 seviyesine çıktı
  • Bu performans, gerçek zamanlı bilgisayarlı görü işleri için kabul edilebilir aralıktadır ve ESP32-S3’ün 30 fps VGA akışını kolayca işleyebilmesini sağlar

1 yorum

 
GN⁺ 2024-06-26
Hacker News yorumları
  • Ortalama bir kahve fiyatından daha ucuz silikon oldukça havalı; ama belki de çip çok ucuz değil, kahve çok pahalıdır
    • Minority Report'u izlediğimden beri OLED video reklam gösteren tek kullanımlık kahve bardaklarını bekliyorum; teknolojik ilerleme çok yavaş
    • Kahvenin aslında şu ankinden daha pahalı olması gerekme ihtimali de yüksek
      Çünkü büyük şirketler yerel çiftlikleri sömürüyor ve fiilen bölgesel tekellerini koruyarak çiftlikleri gerçek değerlerinin çok altında fiyatlarla bu şirketlere satmaya mecbur bırakıyor
    • Daha doğrusu bu, kahvenin kendisinden çok birinin onu hazırlaması için ödenen emek bedeline yakın
    • Aşırı ucuz donanımla bilgisayarlı görü yapılabilmesinin rahatsız edici bir nedeni var
      Dünyadaki ülkeler vatandaşlarını gözetlemek için bu tür şeyleri milyarlarca adet satın alıyor; Big Brother muazzam bir ölçek ekonomisi yaratıyor
  • Benzer bir kart olarak ESP32-CAM var ve şu pratik bilgisayarlı görü projesi bunu destekliyor: https://github.com/jomjol/AI-on-the-edge-device?tab=readme-o...
  • ESP32-S3'ün SIMD'i hakkında kısa yazı da okunmaya değer. Daha önce tartışılmıştı: https://bitbanksoftware.blogspot.com/2024/01/surprise-esp32-...
  • Bu konular ilginizi çekiyorsa ve kendiniz denemek istiyorsanız ürünümüz Edge Impulse'a bakabilirsiniz: https://edgeimpulse.com/ai-practitioners
    Birçok tedarikçiyle doğrudan çalışarak onlarca mikrodenetleyici ve CPU mimarisinde, özel hızlandırıcılarda (nöromorfik bilişim dahil) ve edge GPU'larda derin öğrenme, bilgisayarlı görü ve dijital sinyal işleme işlerini düşük seviyede optimize ediyoruz
    ESP32 de dahil: https://docs.edgeimpulse.com/docs/edge-ai-hardware/mcu/espre...
    TensorFlow, PyTorch, JAX modellerini yükleyince dizüstü bilgisayarda birkaç satır Python ile optimize edilmiş bir C++ kütüphanesini hemen alabilmek oldukça şaşırtıcı
    Model eğitimi için Studio da var; ayrıca çeşitli gömülü donanımlarda iyi çalışacak şekilde tasarlanmış mimariler ve hedef cihazın gecikme ile bellek kullanımına göre en iyi modeli bulan donanım farkındalıklı hiperparametre optimizasyonu da sunuyor
    • Bu arada topluluk planı kısıtlamaları yüzünden buradan çıkan çıktıları herhangi bir açık kaynak projede kullanmak zor görünüyor
    • Neden C++? Üretilen C++ kodunun zor C++ özellikleri kullanıp kullanmadığını, yoksa sınıfları olan C'ye daha mı yakın olduğunu merak ediyorum
  • FAST'in ne için kullanıldığını merak ediyorum
    Features from accelerated segment test: https://en.wikipedia.org/wiki/Features_from_accelerated_segm...
    Bu fiyat aralığındaki çiplerde TPU benzeri bir işlev olup olmadığını merak ediyorum
    Neon, ARMv7 ve ARMv8'in isteğe bağlı SIMD komut kümesi uzantısı olduğundan Pi Zero ve üzeri modellerde SIMD uzantısı var
    Orrin Nano 40 TOPS olduğu için Copilot+ için yeterli seviyede diye anlıyorum. "A PCIe Coral TPU Finally Works on Raspberry Pi 5" https://news.ycombinator.com/item?id=38310063
    https://phys.org/news/2024-06-infrared-visible-device-2d-mat... adresine göre kızılötesi 1550nm dalga boyu 622nm görünür ışığa yukarı dönüştürülmüş ve çıkan ışık dalgası mevcut silikon tabanlı kameralarla algılanabiliyor
    Bu süreç eşevreliği (coherent) koruduğu için, giriş kızılötesi frekansına belirli bir desen işlenirse bunun yeni çıkış frekansına otomatik olarak aktarıldığı söyleniyor

"Show HN: PicoVGA Library – Raspberry Pi Pico’da VGA/TV Görüntü" https://news.ycombinator.com/item?id=35117847#35120403
https://news.ycombinator.com/item?id=40275530
"Designing a SIMD Algorithm from Scratch" https://news.ycombinator.com/item?id=38450374

  • FAST özellik noktası algılayıcısı, görüntüde görsel olarak öne çıkan bölgeleri bulan bir algoritmadır ve XR, robotik vb. alanlarda yaygın olan hareket izleme ve SLAM’in ilk adımı olarak kullanılabilir
    ESP32-S3’ün SIMD komutları, kuantize edilmiş yapay zeka model çıkarımını hızlandırmak için tasarlanmış görünüyor (https://github.com/espressif/esp-dl); FFT gibi sinyal işleme işleri de buna dahil
    ML çıkarımına yardımcı olan belirli komutların bulunması anlamında TPU’ya benzer denebilir. Örneğin EE.VRELU.Sx, ReLU işlemini gerçekleştiriyor
    Ancak bu komutları kullanmak hâlâ CPU zamanı tüketiyor ve TPU’lar genellikle ayrı bir işlem çekirdeği olarak asenkron çalıştığından ARM NEON’a daha yakın
  • Bu fiyat aralığındaki çiplerde TPU benzeri özelliklere örnek olarak Kendryte K210, "TPU" içinde 1x1 ve 3x3 evrişimi destekliyor
    Yazılımı ve dokümantasyonu oldukça iyiydi ama ne yazık ki geniş yayılım gösteremedi
    Günümüzde RV1103 ("LuckFox"), BL808 ("Ox64/Pine64"), CV1800B/SG20002 ("MilkV") tabanlı ucuz geliştirme kartlarını kolayca bulmak mümkün; hepsinde temel düzeyde TPU benzeri bir şey var
    Ancak Linux kartı olarak tasarlandıkları için TPU ile ilgili kısımlar aşırı derecede soyutlanmış durumda ve iç dokümantasyon neredeyse hiç yok; bu yüzden gerçekten TPU mu, yoksa akıllıca kod optimizasyonlarıyla taklit edilen bir şey mi olduğu hiç belli değil
  • TinyML, prensipleri web tabanlı uygulamalara da doğrudan uygulanabildiği için ilginç
    MicroPython ilk bakışta oldukça erişilebilir görünüyor; bu kodu WebAssembly’ye taşımanın kolay olup olmayacağını merak ediyorum
  • Algılama penceresinden bir miktar fedakârlık yapılacağı varsayımıyla, bu kartlardan birkaçını paralel kullanarak daha yüksek çözünürlük ve kare hızlarını işlemenin ne kadar zor olacağını merak ediyorum
  • ESP32 denetleyicilerde Rust kullanmış biri varsa, bunun da Rust ile mümkün olup olmadığını merak ediyorum
    • ESP8266’ya kıyasla ESP32’nin Rust desteği genel olarak oldukça iyi; ancak standart kütüphaneyi kullanmak için muhtemelen C++ araç zincirini de işin içine katmanız gerekir
      ESP32’de Rust no-std deneyimi de fena değil; fakat özellikle Wi-Fi/ağ, kamera gibi bileşenlere bağlanma tarafı hâlâ pek cilalanmış değil
      Diğer yorumda söylendiği gibi Rust’ta da SIMD ve assembly desteği yeterli
      Ciddi biçimde dalmadan önce Rust embedded veya Rust ESP32 sohbet odalarında sormak iyi olur
    • Mümkün. Büyük ölçüde LLVM/clang desteğine bağlı ve Rust’ın assembly’siyle çalışmak çok kolay
  • Yanlış okumadıysam sondan bir önceki kısım sadece temel 2’nin tümleyeni değil mi?
  • Bu tür işlemlerde SIMD, SMT’den önde görünüyor
    • SIMD ve SMT’nin birbirinin alternatifi olduğunu düşünmüyorum
      Bolca SIMD ekleyip SMT-4 veya SMT-8’i birlikte kullanırsanız, iş parçacıkları gecikmeyi gizleyerek performansa göre alan oranını daha iyi hâle getirebilir