💻 Modül 6 · Yazılım Yığını · Bölüm 6.5 · 9 dk okuma

SDK Katmanları

SIDRA Software Development Kit — yazılımcının arayüzü.

Bu bölümde öğreneceklerin

  • SIDRA SDK'nın 3 katmanını (low-level C, high-level C++, Python) say
  • API tasarım prensiplerini ve örneklerini oku
  • PyTorch ve TensorFlow plugin yapısını özetle
  • Versiyonlama, ABI stabilitesi ve dokumentasyon stratejilerini söyle
  • Geliştirici ekosistemini (sample apps, demo) tanı

Açılış: Driver Direkt Kullanmak Cefakar

Driver IOCTL’lar düşük seviye C, hata-yaratan. SDK bunları sarar:

  • Low-level C API: her IOCTL için fonksiyon.
  • High-level C++ API: Model, Tensor, Inference sınıfları.
  • Python API: import sidra ile her şey.

Geliştirici %95 oranında Python kullanır. SDK altta iş yapar.

Sezgi: 3 Katman Soyutlama

[App: PyTorch model + birkaç çağrı]

[Python sidra package]

[C++ libsidra (SDK)]

[C aether-driver (kernel)]

[Donanım]

Her katman bir önceki için soyutlama. Geliştirici en üstte yaşar; içerideki karmaşıklık görünmez.

Formalizm: SDK API Tasarımı

L1 · Başlangıç

Python API (en yaygın):

import sidra
import numpy as np

# Çipi aç
chip = sidra.Chip(device_id=0)
print(f"SIDRA {chip.version}, {chip.memristor_count}M memristors")

# Model yükle (PyTorch state_dict'ten)
import torch
model_pt = torch.load("my_model.pt")
model = sidra.Model.from_pytorch(model_pt)
chip.load_model(model)

# Inference
input_tensor = np.random.randn(1, 784).astype(np.float32)
output = chip.infer(input_tensor)
print(output.shape, output)  # (1, 10) MNIST sınıf

C++ API (performans kritik için):

#include <sidra/sidra.h>

int main() {
    sidra::Chip chip(0);
    sidra::Model model = sidra::Model::load("model.bin");
    chip.load_model(model);
    
    std::vector<float> input(784);
    auto output = chip.infer(input);
    
    return 0;
}

C low-level (driver doğrudan):

int fd = open("/dev/sidra0", O_RDWR);
struct inference_req req = {.input = ..., .output = ...};
ioctl(fd, SIDRA_IOCTL_INFER, &req);
L2 · Tam

Tensor sınıfı:

class Tensor {
    DType dtype;          // FP32, INT8, INT4
    Shape shape;          // dimension'lar
    DeviceMem data;       // SIDRA bellekte
    
    Tensor reshape(Shape new_shape);
    Tensor quantize(DType target);
    Tensor copy_to_host();
};

GPU’larda CUDA tensor benzeri. Veri GPU/SIDRA bellekte; host’a kopyalama açıkça istenir.

Model sınıfı:

class Model {
    std::vector<Layer> layers;
    Quantization q;
    
    static Model from_pytorch(const PyTorchModel&);
    static Model from_onnx(const std::string& path);
    void quantize(QuantConfig cfg);  // FP32 → INT8
    void compile_for(Chip& chip);    // crossbar mapping
};

ONNX (Open Neural Network Exchange) standart format, framework-agnostic.

Inference workflow:

chip = sidra.Chip(0)

# Bir kerelik
model = sidra.Model.from_onnx("yolov8.onnx")
model.quantize(sidra.INT8)
model.compile_for(chip)
chip.load_model(model)

# Tekrar tekrar
for image in stream:
    output = chip.infer(image)
    process(output)
L3 · Derin

ABI stabilite:

C++ ABI değişebilir → her SDK upgrade’da app rebuild gerekebilir. Çözüm:

  • C ABI sabit (libsidra_c.so).
  • C++ wrapper inline (header’da).
  • Python pure-Python wrapper.

Strateji: C ABI minimal + Python rich. C++ orta yol.

Versiyonlama:

libsidra.so.1.0.0. SemVer:

  • Major (1.x): breaking changes.
  • Minor (1.1): new features, backward-compatible.
  • Patch (1.0.1): bug fixes.

App’ler libsidra.so.1 link → 1.x güncellemeleri otomatik kabul.

Dokümantasyon:

  • API reference (Doxygen + Sphinx).
  • Tutorial notebooks (Jupyter).
  • Sample apps GitHub’da.
  • Stack Overflow tag.

PyTorch / TensorFlow plugin:

# PyTorch
import torch
import sidra

# SIDRA backend register
torch.backends.sidra.enabled = True

# Normal PyTorch model SIDRA'da çalışır
model = torch.load("model.pt").to("sidra:0")
output = model(input)  # transparent SIDRA inference

NVIDIA CUDA backend gibi. Custom backend register protokolü PyTorch 2.0+.

TensorFlow XLA:

XLA (Accelerated Linear Algebra) backend. tf.config.set_visible_devices(["sidra:0"]). Sınırlı kapsamda, geliştirme aşamasında.

SDK boyutu:

  • libsidra.so: ~5 MB.
  • Python sidra package: ~10 MB (compiled extension dahil).
  • Headers: ~500 KB.

App boyutuna minimal etki.

Sample apps:

sidra-examples/ repo:

  • mnist_classifier.py (101 satır).
  • imagenet_resnet50.py.
  • bert_qa.py.
  • speech_whisper.py.
  • gpt2_chat.py.

Geliştiricinin başlangıç noktası.

Deney: 10 Satırda MNIST Inference

import sidra
import torch
import torchvision

# Model yükle (PyTorch standart)
model = torchvision.models.simple_mlp()
model.load_state_dict(torch.load("mnist_mlp.pth"))

# SIDRA'ya geçir
chip = sidra.Chip(0)
sidra_model = sidra.Model.from_pytorch(model).quantize(sidra.INT8)
chip.load_model(sidra_model)

# Inference
import torchvision.transforms as T
mnist_test = torchvision.datasets.MNIST("/data", train=False, transform=T.ToTensor())
img, label = mnist_test[0]
prediction = chip.infer(img.numpy().reshape(1, 784))
print(f"Predicted: {prediction.argmax()}, True: {label}")  # 7, 7

10 satırlık kod. SDK altta:

  1. PyTorch state_dict’i parse.
  2. Model graph oluştur.
  3. INT8 quantize.
  4. Crossbar mapping.
  5. ISPP ile programla.
  6. Driver IOCTL ile inference.

Süre:

  • Kod yazma + setup: 5 dakika.
  • Model yükleme (640 ms ISPP): 1 saniye.
  • Inference: 25 µs/MNIST.

Kısa Sınav

1/6SDK kaç katmandan oluşur?

Laboratuvar Görevi

SIDRA SDK kullanıcı eğitimi materyalleri planı.

Hedef kitleler:

  • Akademik araştırmacı (Python, PyTorch).
  • Üretim mühendisi (C++, performance).
  • Embedded developer (C, kernel).

Kaynaklar (önerilen):

  1. Quick start (15 dk): Python + MNIST.
  2. Tutorial notebook serisi (10 adım).
  3. C++ API rehberi.
  4. Performance optimization rehberi.
  5. Sample apps GitHub.

Topluluk:

  • Discord/Slack soru-cevap.
  • Aylık webinar.
  • Türkiye’de yıllık konferans.

Özet Kart

  • SDK 3 katman: C low-level, C++ high-level, Python.
  • Python en kolay: 10 satırla MNIST.
  • ONNX import: framework-agnostic.
  • PyTorch backend: model.to(‘sidra:0’).
  • ABI stabilite: C sabit, C++ wrapped.
  • SDK boyutu: ~10 MB.
  • Sample apps: GitHub repo.

Vizyon: SIDRA Geliştirici Ekosistemi

  • Y1: Python + PyTorch destek.
  • Y3: TensorFlow + JAX backend.
  • Y10: Mobil SDK (Android/iOS).
  • Y100: SIDRA-native AI framework.
  • Y1000: Quantum-AI hibrit SDK.

Türkiye için: SDK Türkçe doküman, Türk üniversitelerde dersler, akademik camiada kullanım yaygınlaşma.

Daha İleri