---
title: "2 Dolarlık Bir Mikrodenetleyicide SIMD Hızlandırmalı Bilgisayarlı Görü"
url: https://blog.edumints.com/2-dolarlik-bir-mikrodenetleyicide-simd-hizlandirmali-bilgisayarli-goru
category: "Yazılım"
date: 2026-10-27T08:07:27.967Z
publisher: Edumints Blog
lang: tr-TR
source_name: "Hacker News"
source_url: https://shraiwi.com/blog/simd-fast-esp32s3/
---

# 2 Dolarlık Bir Mikrodenetleyicide SIMD Hızlandırmalı Bilgisayarlı Görü

## Giriş ve ESP32-S3'ün Donanım Gücü

ESP32-S3 için 128-bit **SIMD (Single Instruction, Multiple Data)** komutlarını kullanan hızlandırılmış bir **FAST** özellik dedektörü (feature detector) geliştirildi. Bu uygulama, referans uygulamaya kıyasla yaklaşık iki kat performans artışına ulaşarak bir **QVGA (320x240)** kareyi yaklaşık **~6 ms** içinde işleyebiliyor.

Fiyatına göre **ESP32-S3**, mütevazı plastik paketinin altında **WiFi** ve **Bluetooth Low Energy** radyoları dahil birçok çevre birimiyle birlikte maksimum **240 MHz** hızında çalışan çift çekirdekli bir işlemci barındıran oldukça güçlü bir mikrodenetleyicidir. Teknik referans kılavuzu incelendiğinde, ortalama bir kahveden daha ucuz olan bu yonganın sınırlı bir **SIMD** komut setini desteklediği görülüyor. Bu süreçte, ESP32-S3 üzerinde **assembly** temellerini öğrenmek, kendine özgü kısıtlamalarının etrafından dolaşmak ve **basm** adlı temel bir yazmaç ayırıcı (register allocator) yazmak mümkün oldu.

## Kaynak Araştırması ve Assembly Yapısı

Bu komutlar aslında gizli olmasa da nispeten az biliniyordu. Bilgisayarlı görü alanındaki çalışmalarla birlikte, internette bulunanlardan daha gelişmiş bir kod yazmak amacıyla ESP32-S3 için SIMD hızlandırmalı bir **FAST** köşe dedektörü uygulanmasına karar verildi. İlk adımda SIMD komutlarını kullanan örnek kodlar araştırıldığında yalnızca üç kaynak bulunabildi:

- **Larry Bank’in blogu**: Özelliği keşfettiği ve minimal bir örnek sunduğu yazı.
- **Espressif’in esp-dsp kütüphanesi**: Evrişim (convolution) ve FFT gibi DSP benzeri özellikler için kullanılan kütüphane.
- **Espressif’in esp-dl kütüphanesi**: Yonga üzerinde yapay zeka hızlandırması için kullanılan kütüphane.

Bu kaynaklar incelendiğinde ESP32-S3 üzerinde assembly yazmanın korkulduğu kadar zor olmadığı görüldü ve iki sayıyı toplayan basit bir fonksiyon üzerinden aşağıdaki genel yapı benimsendi:

```assembly
.section .rodata
# salt okunur veriler buraya
.section .text
.align 4
.global add
.type add,@function
# iki sayıyı toplayan basit bir fonksiyon
# int32_t add(int32_t a, int32_t b)
add:
    entry sp, 48 # sp (stack pointer) a1 için bir takma addır
    #define r_a a2
    #define r_b a3
    # kod buraya
    add a2, r_a, r_b # a2 = a + b
    retw.n # dönüş değerini içeren a2 ile geri dön.
```

## FAST Köşe Ön Testi ve Bellek Hizalama Kısıtlamaları

Bu temel yapıdan yola çıkarak **FAST** köşe ön testinin SIMD hızlandırmalı sürümü yazılmaya başlandı. Algoritma temel olarak her ana yönden bir piksel örnekler ve en az üç "uç" (extreme) piksel olup olmadığını kontrol eder. Buradaki uç piksel, merkez pikselden mutlak farkı belirli bir eşik değerinin üzerinde olan pikseldir. Her vektör yazmacı on altı adet sekiz bitlik değer depolayabildiği için, tek seferde on altı pikselin uç değer sayısını hesaplayan bir fonksiyon tasarlandı. Bu işlem, her ana yönde dört piksel "yığınını" (chunk) örnekleyip kendi merkez pikselleriyle karşılaştırarak gerçekleştirilir.

Ancak burada ilk donanım kısıtlamasıyla karşılaşıldı: **ISA (Komut Kümesi Mimarisi)**, doğrudan hizalanmamış okumalara (misaligned reads) izin vermiyordu. Merkez pikselin hizalı olduğu varsayımı altında, doğu ve batı blokları hizalanmamış durumda kalıyordu:

- **center** (merkez)
- **east** (doğu)
- **west** (batı)
- **north** (kuzey)
- **south** (güney)

Neyse ki yonga, uç uca eklenmiş iki yazmaçtan bir dilimi (slice) başka bir yazmaca çıkarmaya olanak tanıyan özel bir komuta sahiptir. Bu işlevsellik kullanılarak, merkez bloğa bitişik iki blok okunup dilimler çıkarıldı ve böylece doğu ile batı blokları başarıyla elde edildi.

## Yazılım Geliştirme ve Öğrenme Çıkarımları

Gömülü sistemlerde ve düşük maliyetli donanımlarda yüksek performanslı yazılım geliştirmek için bu çalışmadan çıkarılabilecek pratik dersler şunlardır:

- **Teknik Belgeleri Derinlemesine İnceleyin**: Resmi referans kılavuzlarını okumak, yaygın olarak bilinmeyen ancak performansı ikiye katlayabilecek donanım özelliklerini (SIMD gibi) keşfetmenizi sağlar.
- **Mevcut Açık Kaynak Kodlardan Öğrenin**: Dokümantasyonun yetersiz kaldığı noktalarda üreticinin resmi kütüphaneleri (`esp-dsp`, `esp-dl`) en iyi öğrenme ve mimari referans kaynaklarıdır.
- **Donanım Kısıtlamalarını Yazılımla Aşın**: Bellek hizalama (alignment) gibi mimari engellerle karşılaştığınızda, yazmaç birleştirme ve dilimleme gibi alternatif komut seti yeteneklerini kullanarak veriyi doğru формаta getirebilirsiniz.

Orijinal makaleye [buradan](https://shraiwi.com/blog/simd-fast-esp32s3/) ulaşabilirsiniz.

---

**Kaynak:** Hacker News (https://shraiwi.com/blog/simd-fast-esp32s3/)
**Yayıncı:** [Edumints Blog](https://blog.edumints.com) · Alıntılarken bu URL'ye bağlantı verin: https://blog.edumints.com/2-dolarlik-bir-mikrodenetleyicide-simd-hizlandirmali-bilgisayarli-goru
