SIMD komutlarıyla yüksek hızlı CSV ayrıştırma yöntemi anlatıldı
Öne çıkanlar
- Ayrıştırma algoritması 16 baytlık SIMD arama tablolarını birleştirerek karakterleri dallanmasız sınıflandırdı.
- Tırnak içindeki sahte ayırıcılar ön ek XOR işlemi ve taşımasız çarpma komutuyla tek adımda elendi.
- Kayıt aralıkları u64 bit dizileri üzerinden donanımsal sıfır sayma komutuyla belirlendi.
Yazılımcı Matthew, simdjson makalesindeki teknikleri temel alarak geliştirdiği ve aynı anda 64 karakteri işleyebilen CSV ayrıştırıcısının mimarisini açıkladı. Paylaşılan teknik inceleme, geleneksel skaler döngüler yerine SIMD ve bit düzeyinde işlemlerle yapısal karakterlerin toplu olarak nasıl sınıflandırıldığını ve filtrelendiğini aktarıyor. Çalışma, modern işlemcilerde çekirdek saat hızlarının sınırına ulaşması nedeniyle veri paralelliğinden yararlanmanın önemine değiniyor.
Ayrıştırma sürecinin ilk aşamasında ARM NEON komutları ve çift arama tablosu (lookup table) tekniği kullanılarak baytlar dallanmasız bir mantıkla virgül, tırnak ve satır sonu sınıflarına ayrıldı. Baytın yüksek ve düşük 4 bitlik kısımları (nibble) ayrı ayrı tablolardan geçirilerek bit düzeyinde AND işlemiyle doğrulandı. Elde edilen sonuçlar u64 boyutundaki bit dizilerine sıkıştırılarak her bir sınıf için maskeler oluşturuldu.
İkinci ve üçüncü aşamalarda ise tırnak işaretleri arasındaki geçersiz ayırıcılar ön ek XOR işlemiyle elendi. Taşımasız çarpma komutu veya bit kaydırma zinciriyle tırnak içindeki alanlar tespit edilerek virgül ve yeni satır maskeleri temizlendi. Kalan gerçek sınırların konumları donanımsal baştaki sıfırları sayma (clz) komutlarıyla çıkarılarak alan ve satır aralıkları minimum dallanma maliyetiyle kaydedildi.
Bu özet yapay zekâ ile hazırlanmıştır; ayrıntılar ve doğrulama için orijinal kaynağa başvurun.