GFLOPS
GFLOPS (Giga Floating-point Operations Per Second) adalah satuan ukuran throughput komputasi yang menyatakan jumlah operasi floating-point yang dapat dilakukan oleh suatu sistem dalam satu detik, dalam skala miliar (109). Satuan ini umum digunakan untuk mengukur performa CPU, GPU, dan accelerator lainnya, terutama dalam konteks high-performance computing (HPC), scientific computing, dan deep learning.
Definisi
Satu FLOP (Floating-point Operation) adalah satu operasi aritmatika pada bilangan floating-point, seperti penjumlahan, pengurangan, perkalian, atau pembagian. FLOPS (FLOPs per Second) adalah laju operasi tersebut per satuan waktu.
Skala satuan:
| Satuan | Singkatan | Nilai |
|---|---|---|
| KiloFLOPS | kFLOPS | 103 FLOPS |
| MegaFLOPS | MFLOPS | 106 FLOPS |
| GigaFLOPS | GFLOPS | 109 FLOPS |
| TeraFLOPS | TFLOPS | 1012 FLOPS |
| PetaFLOPS | PFLOPS | 1015 FLOPS |
| ExaFLOPS | EFLOPS | 1018 FLOPS |
Perlu dibedakan:
- FLOPs (huruf s kecil) = jumlah operasi (count).
- FLOPS (huruf S besar) = laju per detik (rate).
Rumus dasar
Secara umum:
Untuk satuan GFLOPS:
dengan adalah waktu eksekusi dalam detik.
Theoretical peak
Theoretical peak GFLOPS suatu prosesor dihitung dari spesifikasi hardware:
dengan:
- = jumlah core atau compute unit
- = frekuensi clock (Hz)
- = jumlah operasi floating-point yang dapat dilakukan per clock cycle per core (tergantung lebar SIMD, FMA support, dll)
Menghitung FLOPs untuk algoritma umum
Matrix multiplication
Untuk perkalian matriks dengan dimensi dan , jumlah operasi adalah:
Faktor 2 berasal dari satu perkalian dan satu penjumlahan per elemen inner product.
Contoh: untuk matriks square berukuran :
Inner product (dot product)
Untuk dua vektor berukuran :
Konvolusi 2D
Untuk input feature map dan kernel :
Contoh perhitungan
Contoh 1: Matrix multiplication 2048×2048
Misalkan suatu kernel OpenCL menyelesaikan perkalian matriks dalam waktu ms.
Jumlah operasi:
Throughput:
Contoh 2: Theoretical peak GPU
Sebuah GPU memiliki spesifikasi:
- 2048 CUDA cores
- Clock 1.5 GHz
- 2 FLOPs/cycle (satu fused multiply-add = 2 FLOPs)
Snippet pengukuran
Pengukuran GFLOPS empiris dalam C:
#include <stdio.h>
#include <time.h>
double measure_gflops(long flops, double elapsed_seconds) {
return (double) flops / (elapsed_seconds * 1e9);
}
int main(void) {
const int N = 2048;
long flops = 2L * N * N * N; // 2 * N^3 untuk matmul
struct timespec t0, t1;
clock_gettime(CLOCK_MONOTONIC, &t0);
// ... jalankan kernel matmul di sini ...
clock_gettime(CLOCK_MONOTONIC, &t1);
double elapsed = (t1.tv_sec - t0.tv_sec)
+ (t1.tv_nsec - t0.tv_nsec) / 1e9;
double gflops = measure_gflops(flops, elapsed);
printf("Throughput: %.2f GFLOPS\n", gflops);
return 0;
}
Achieved vs theoretical peak
Dalam praktiknya, performa terukur (achieved GFLOPS) hampir selalu lebih rendah dari theoretical peak. Rasio antara keduanya disebut efisiensi komputasi:
Penyebab utama efisiensi tidak mencapai 100%:
- Memory-bound workload; bandwidth memori jadi bottleneck, bukan kemampuan komputasi.
- Cache miss dan non-coalesced memory access.
- Branch divergence pada GPU.
- Pipeline stall dan dependency hazard.
- Underutilization: ukuran data terlalu kecil untuk mengisi seluruh compute unit.
- Communication overhead pada sistem terdistribusi.
Untuk menganalisis apakah suatu kernel compute-bound atau memory-bound, umum digunakan Roofline Model.
Presisi numerik
Nilai GFLOPS sangat bergantung pada presisi floating-point yang digunakan:
| Presisi | Lebar bit | Konteks penggunaan |
|---|---|---|
| FP64 (double) | 64 | Scientific computing, simulasi numerik |
| FP32 (single) | 32 | Grafika, deep learning tradisional |
| FP16 (half) | 16 | Deep learning modern, mixed precision |
| BF16 (bfloat16) | 16 | Training neural network |
| FP8 / INT8 | 8 | Inference neural network ter-quantize |
GPU modern umumnya memiliki peak FP16 yang 2× lebih tinggi dari FP32, dan FP8 hingga 4× lebih tinggi. Saat melaporkan angka GFLOPS, presisi wajib disebutkan agar perbandingan adil.
Keterbatasan sebagai metrik
GFLOPS bukan ukuran performa yang sempurna. Beberapa keterbatasan:
- Tidak mencerminkan kecepatan eksekusi nyata: algoritma dengan FLOPs lebih sedikit bisa lebih cepat dari yang FLOPs-nya banyak.
- Tidak memperhitungkan memory bandwidth: banyak workload nyata memory-bound.
- Mudah di-game: vendor sering melaporkan peak yang tidak realistis di workload praktis.
- Tidak relevan untuk integer-heavy workload seperti cryptography atau database.
Metrik alternatif yang sering digunakan bersama GFLOPS:
- Wall-clock time: waktu eksekusi murni.
- Memory bandwidth (GB/s).
- Operational intensity (FLOPs/byte): dipakai dalam Roofline Model.
- Energy efficiency (GFLOPS/Watt).
Referensi
- John L. Hennessy, David A. Patterson, Computer Architecture: A Quantitative Approach, 6th ed., Morgan Kaufmann, 2017.
- Samuel Williams et al., "Roofline: An Insightful Visual Performance Model for Multicore Architectures", Communications of the ACM, 2009.
- TOP500 Project, top500.org peringkat supercomputer berdasarkan benchmark LINPACK (Rmax dalam TFLOPS/PFLOPS).