16 poin oleh GN⁺ 2025-08-08 | Belum ada komentar. | Bagikan ke WhatsApp
  • Hukum Moore mencapai batasnya, sehingga hardware berevolusi dari percepatan single-core ke fokus pada multi-core dan pemrosesan paralel
  • Pemrosesan paralel dibagi ke dalam berbagai bentuk seperti paralelisme data, paralelisme model, dan paralelisme pipeline, serta digunakan secara campuran dalam sistem deep learning modern
  • Paralelisasi dilakukan di berbagai lapisan seperti SIMD (paralelisme data tingkat instruksi), paralelisme thread/core, dan paralelisme masif GPU
  • Bahasa, library, dan alat untuk pemrosesan paralel sebagian besar berupa ekstensi yang 'ditempelkan' ke bahasa sekuensial yang sudah ada, sehingga arus untuk mengintegrasikan paralelisme secara native ke dalam bahasa (seperti Mojo) semakin mendapat perhatian
  • Tantangan penting dalam optimasi performa nyata mencakup optimasi berbagi cache line (interaksi yang tidak perlu), pembagian memori yang efisien, dan vektorisasi otomatis

Motivasi Paralelisme dan Evolusi Hardware

  • Pada awalnya, performa meningkat secara alami melalui miniaturisasi transistor dan kenaikan clock, tetapi kemudian mencapai batas fisik karena panas dan keterbatasan proses manufaktur
  • Setelah itu, arsitektur multi-core menjadi standar, dengan satu CPU memuat puluhan hingga ratusan core

Bentuk Umum Paralelisme

  • Paralelisme data: menerapkan operasi yang sama ke banyak data secara bersamaan (contoh: operasi penjumlahan vektor)
  • Paralelisme model: menempatkan satu model secara terdistribusi di beberapa device
  • Paralelisme pipeline: membagi komputasi ke beberapa tahap, lalu tiap tahap berjalan secara bersamaan

SIMD (Single Instruction Multiple Data) dan Vektorisasi

  • SIMD adalah metode untuk memproses banyak data (vektor) dengan satu instruksi, dan didukung oleh berbagai ISA seperti ARM NEON dan x86 SSE/AVX
  • Melalui intrinsic C/C++, operasi vektor dapat dikendalikan secara eksplisit; vektorisasi otomatis oleh compiler juga didukung, meski memiliki keterbatasan
  • Dalam praktiknya, data diproses berulang sesuai panjang vektor, lalu sisa datanya dikoreksi dengan operasi skalar

Paralelisasi di CPU

  • Menggunakan thread untuk eksekusi paralel di lingkungan multi-core, dengan dukungan API per bahasa dan scheduler OS
  • Karena biaya pembuatan/penghancuran thread tinggi, pembagian kerja dengan jumlah thread yang sesuai ukuran data (mirip dengan jumlah core) lebih efisien
  • Optimasi cache line 'false sharing' (penurunan performa saat thread berbeda mengakses variabel independen dalam cache line yang sama) sangat penting, dengan memanfaatkan hal seperti std::hardware_destructive_interference_size di C++17
  • Diperlukan padding/alignment agar tiap thread menulis ke area data yang terpisah

Paralelisasi di GPU

  • GPU dioptimalkan untuk pemrosesan paralel data skala besar melalui ribuan core kecil
  • CUDA/OpenCL: mengeksekusi fungsi kernel dalam puluhan hingga puluhan ribu unit thread/blok, dengan model internal SIMT (single instruction multiple threads)
  • Beroperasi dalam unit work group/warp, dan meminimalkan branch divergence sangat penting untuk performa
  • Hierarki memori: perlu optimasi bertingkat untuk register thread, shared memory per blok, hingga global memory keseluruhan

Triton: DSL Kernel GPU Berbasis Python

  • Triton adalah DSL yang tertanam di Python, mendukung kompilasi JIT dan multi-backend (MLIR/LLVM/PTX, dll.)
  • Kode kernel ditulis dalam Python tingkat tinggi, dengan dukungan untuk paralelisasi otomatis, partitioning, masking, dan lainnya
  • Dapat mencapai performa 75~90% dibanding tingkat NVIDIA cuDNN, sambil secara drastis mengurangi kompleksitas pengembangan

Menjadikan Paralelisme Native dalam Bahasa: Mojo

  • Mojo adalah bahasa baru yang dibuat oleh pengembang LLVM/MLIR Chris Lattner, dengan dukungan paralelisme dan kompilasi khusus hardware di tingkat bahasa
  • Tipe vektor SIMD, fungsi vektorisasi, pemisahan memori host/device, dan lainnya membuat paralelisme tertanam dalam sistem tipe dan struktur bahasa
  • Loop bergaya Python juga dapat divektorkan otomatis, sehingga performa bisa diraih tanpa kontrol low-level yang eksplisit

Kesimpulan dan Prospek

  • Pemrograman paralel modern dibangun dari kombinasi berbagai hardware dan model paralelisme, dan dukungan dari bahasa itu sendiri menjadi semakin penting
  • Dengan bangkitnya bahasa dan alat paralel generasi berikutnya seperti Mojo, Triton, dan JAX, paralelisasi berkembang menjadi lebih intuitif dan produktif
  • Dalam pemrograman paralel, performa nyata hanya bisa dimaksimalkan jika struktur hardware, optimasi memori, dan dukungan bahasa berpadu secara organik

Belum ada komentar.

Belum ada komentar.