Bisakah Anda menjelaskan cara kerja komputer dari bawah ke atas?


Untuk memahami komputer, Anda harus menerima satu realitas fisik terlebih dahulu. Tidak ada sihir di dalam komputer. Hanya sinyal listrik. Lebih tepatnya, hanya tegangan tinggi dan tegangan rendah.

Bahan dasar untuk chip yang kita gunakan saat ini adalah silikon. Silikon adalah semikonduktor. Semikonduktor memiliki sifat fisik: dengan mencampurnya dengan elemen yang berbeda dan mengontrol tegangan pada elektroda, kita dapat mengontrol apakah mereka menghantarkan listrik atau tidak. Struktur kecil yang dapat dihidupkan dan dimatikan oleh listrik ini disebut transistor.

CPU modern berisi puluhan miliar transistor. Proses 3-nanometer TSMC saat ini berarti transistor ini dibuat sangat kecil sehingga puluhan miliar dapat muat di atas potongan silikon seukuran kuku jari.

Anda hanya perlu mengingat satu fungsi inti transistor. Jika Anda memberikan tegangan tinggi ke terminal kontrolnya, ia menghantarkan. Jika Anda memberikan tegangan rendah, ia mati. Ini adalah realitas fisik yang paling mendasar. Kita mendefinisikan tegangan tinggi sebagai 1 logis dan tegangan rendah sebagai 0 logis. Seluruh ilmu komputer dibangun di atas dua keadaan ini.

Dengan transistor, kita dapat menggabungkannya menjadi gerbang logika.

Misalkan kita menghubungkan dua transistor secara seri. Arus hanya dapat mengalir dari satu ujung ke ujung lainnya – menghasilkan keluaran 1 – ketika kedua terminal kontrol menerima tegangan tinggi, yaitu kedua masukan bernilai 1. Jika salah satu bernilai 0, arus terputus dan keluarannya 0. Rangkaian fisik ini disebut gerbang AND.

Dengan logika yang sama, jika dua transistor dihubungkan secara paralel, arus mengalir – menghasilkan keluaran 1 – selama setidaknya satu masukan bernilai 1. Hanya ketika keduanya 0 barulah keluarannya 0. Ini adalah gerbang OR.

Menggunakan metode koneksi yang sedikit berbeda, di mana memasukkan 1 menghasilkan keluaran 0 dan memasukkan 0 menghasilkan keluaran 1, kita menciptakan gerbang NOT.

Dengan gerbang AND, OR, dan NOT, dunia fisik secara resmi memasuki dunia matematika. Saya sangat merekomendasikan sebuah buku teks klasik di sini berjudul Code, oleh Charles Petzold. Buku ini tidak bertele-tele – dimulai dari telegraf dan menjelaskan cara menghubungkan gerbang logika. Ini sempurna untuk membangun lapisan pertama intuisi fisik itu. Anda harus memeriksanya setelah membaca postingan ini – pasti akan membuat Anda tercengang.

Sekarang kita memiliki gerbang logika, bagaimana cara membuat komputer melakukan penjumlahan?

Dalam biner, 1 ditambah 1 sama dengan 10. Itu berarti bit saat ini menjadi 0 dan kita menyimpan 1 ke posisi berikutnya. Ini sebenarnya adalah dua operasi logis. Pertama, tentukan bit saat ini: jika kedua masukan adalah 1, bit saat ini adalah 0. Jika satu masukan adalah 1 dan yang lainnya 0, bit saat ini adalah 1. Logika ini dapat diimplementasikan dengan menggabungkan gerbang dasar yang telah kita bahas – kita menyebutnya gerbang XOR. Kedua, tentukan simpanan: hanya ketika kedua masukan bernilai 1 kita menyimpan, yang persis merupakan fungsi dari gerbang AND.

Hubungkan gerbang XOR dan gerbang AND bersama-sama, dan Anda secara fisik telah mengimplementasikan penjumlahan satu digit biner. Ini disebut setengah-penjumlah. Hubungkan beberapa setengah-penjumlah secara bertingkat, menangani sinyal simpanan, dan Anda mendapatkan penjumlah penuh. Jika Anda menghubungkan 64 penjumlah penuh ini, Anda mendapatkan rangkaian fisik yang dapat menjumlahkan bilangan biner 64-bit.

Ketika Anda menulis baris kode a = b + c, apa yang terjadi pada level terbawah adalah sinyal listrik yang mewakili b dan c mengalir secara bersamaan ke dalam rangkaian penjumlah yang terbuat dari puluhan ribu transistor ini. Setelah penundaan fisik yang sangat singkat, ujung lain dari rangkaian menghasilkan tegangan tinggi dan rendah yang stabil yang mewakili hasilnya.

Itulah yang disebut sebagai Unit Aritmatika dan Logika (ALU). Ini sama sekali bukan komponen inti yang misterius – ini hanyalah jaring padat dari gerbang logika semikonduktor, dihubungkan secara kaku sesuai aturan matematika yang dirancang oleh manusia. Selain penjumlahan, melalui konfigurasi koneksi yang berbeda, ia juga dapat melakukan pengurangan, pergeseran bit, dan bahkan perkalian.

Tetapi hanya bisa menjumlahkan saja tidak berguna. Hasilnya hanyalah sekumpulan sinyal listrik – begitu daya diputus atau masukan berubah, hasilnya menghilang. Komputer harus dapat mengingat data. Ini membawa kita ke memori dan register.

Bagaimana cara menggunakan sinyal listrik untuk mengingat suatu keadaan? Insinyur elektronik menemukan rangkaian yang sangat cerdik yang disebut flip-flop. Ini adalah rangkaian gerbang logika dengan loop umpan balik. Sederhananya, sinyal keluaran diumpankan kembali ke masukan. Desain ini memungkinkan rangkaian mempertahankan keadaan tegangan tinggi atau rendahnya saat ini menggunakan umpan balik internal, bahkan setelah masukan asli dihilangkan.

Ketika Anda memberikan sinyal tulis tertentu ke flip-flop ini, ia memperbarui keadaan internalnya dan menguncinya. Kecuali Anda mengirimkan sinyal tulis lain, ia akan mempertahankan 0 atau 1 itu tanpa batas.

Atur 64 flip-flop dalam satu baris, dan Anda dapat menyimpan bilangan biner 64-bit. Di dalam CPU, tepat di sebelah ALU, unit penyimpanan ultra-cepat yang terbuat dari flip-flop ini disebut register. Lokasi fisik mereka tepat di sebelah sirkuit komputasi, yang berarti sinyal listrik menempuh jarak terpendek yang mungkin, sehingga mereka sangat cepat. Tentu saja, mereka juga sangat mahal untuk dibuat, sehingga hanya bisa dibuat sangat kecil.

Di sini saya harus merekomendasikan sebuah buku yang benar-benar legendaris: Computer Systems: A Programmer’s Perspective, lebih dikenal di dunia IT sebagai CSAPP. Ini adalah buku teks yang digunakan di Universitas Carnegie Mellon. Yang membuatnya luar biasa adalah ia menjembatani kesenjangan dari bahasa assembly ke arsitektur perangkat keras ke sistem operasi. Setelah Anda memahaminya, Anda akan tahu mengapa beberapa kode berjalan cepat dan beberapa lambat – karena Anda akan mulai menulis kode dengan pola pikir level fisik.

Jika Anda ingin melangkah lebih jauh dan secara sistematis menghubungkan sistem operasi, organisasi komputer, jaringan, dan fundamental dasar lainnya sekaligus, saya telah mengumpulkan koleksi yang mencakup struktur data dan algoritma, organisasi komputer, dan banyak lagi.

Lebih dari 1 juta unduhan di seluruh web – fundamental komputer yang akan meningkatkan keterampilan Anda.

Mari kita terus bergerak keluar. Bagaimana jika register tidak cukup? Kita membutuhkan penyimpanan yang lebih besar. Di sinilah peran modul RAM yang terpasang di motherboard Anda. Nama teknisnya adalah Dynamic Random Access Memory, atau DRAM.

Prinsip fisik DRAM benar-benar berbeda dengan register. Alih-alih flip-flop, ia menggunakan kapasitor kecil untuk menyimpan muatan listrik. Kapasitor dengan muatan adalah 1, tanpa muatan adalah 0. Karena struktur kapasitor sangat sederhana – hanya membutuhkan satu transistor dan satu kapasitor untuk menyimpan satu bit data – kapasitasnya dapat dibuat sangat besar. Saat ini, puluhan atau bahkan ratusan gigabyte adalah hal yang umum.

Tetapi kapasitor memiliki kelemahan fatal: mereka bocor. Jika dibiarkan, muatan yang mewakili 1 akan bocor sepenuhnya dalam hitungan milidetik, menjadi 0. Oleh karena itu motherboard harus memiliki sirkuit kontrol khusus yang membaca data dari memori dan mengisi ulang pada interval yang sangat pendek. Ini disebut penyegaran dinamis. Inilah sebabnya ketika Anda mencabut daya komputer, semua yang ada di memori langsung hilang.

Sekarang kita memiliki ALU yang dapat melakukan perhitungan, dan register serta memori yang dapat menyimpan data. Pertanyaan intinya adalah: bagaimana benda mati ini mulai bergerak? Siapa yang memerintahkan mereka untuk melakukan penjumlahan terlebih dahulu, lalu perkalian, dan akhirnya menyimpan hasilnya?

Ini adalah pekerjaan unit kontrol, dan ini adalah mekanisme inti yang membuat komputer menjadi mesin.

Motherboard memiliki osilator kristal – kristal kuarsa yang menghasilkan sinyal pulsa frekuensi tetap selama daya diberikan. Misalnya, jika CPU Anda diberi nilai 4.0 GHz, itu berarti kristal ini menghasilkan 4 miliar transisi tegangan tinggi-ke-rendah setiap detik.

Ini adalah detak jantung komputer. Semua gerbang logika dan flip-flop di dalam CPU beroperasi secara sinkron ketat dengan detak jantung ini.

Di dalam CPU, ada register yang sangat khusus yang disebut penghitung program. Ia hanya berisi alamat memori.

Ketika detak pertama berbunyi, CPU melakukan hal pertama: mengambil instruksi. Ia mengirimkan alamat yang tersimpan di penghitung program ke memori melalui jalur logam di motherboard. Memori mengirimkan kembali rangkaian panjang 0 dan 1 yang tersimpan di alamat tersebut.

Rangkaian panjang 0 dan 1 ini adalah instruksi. Setelah instruksi kembali ke CPU, ia memasuki unit kontrol. Unit kontrol juga hanya sekumpulan gerbang logika yang dikoneksikan secara kaku – tugasnya adalah dekode. Misalnya, ketika ia melihat beberapa digit pertama dari 0 dan 1 yang masuk adalah 1011, struktur koneksi internalnya menentukan bahwa tegangan tinggi dan rendah ini secara tepat mengaktifkan saklar yang mengarah ke sirkuit penjumlahan di ALU. Pada saat yang sama, sisa instruksi menentukan register mana yang berisi dua nilai data yang akan dijumlahkan.

Ketika detak berikutnya berbunyi, fase eksekusi dimulai. Sirkuit penjumlahan yang diaktifkan menerima data, sinyal listrik melesat melalui jaringan gerbang logika penjumlah dalam sekejap, dan hasilnya diproduksi.

Pada detak berikutnya, hasilnya ditulis kembali ke register yang ditentukan.

Akhirnya, penghitung program secara otomatis bertambah satu, menunjuk ke instruksi berikutnya di memori. Kemudian siklus berulang. Miliaran kali per detik.

Inilah kebenaran level terbawah yang lengkap tentang bagaimana komputer berjalan. Tidak ada kecerdasan tingkat lanjut sama sekali – hanya osilator kristal yang berdetak secara membabi buta, penghitung program yang secara mekanis menambah alamat, unit kontrol yang secara robotik mengganti jalur sinyal berdasarkan 0 dan 1 yang dibacanya, dan ALU yang secara pasif mengubah level tegangan yang masuk menjadi level tegangan baru.

Kode Python atau Java yang Anda tulis dalam pekerjaan sehari-hari pada akhirnya diterjemahkan oleh perangkat lunak yang disebut kompiler menjadi urutan instruksi mesin yang panjang dan membosankan khusus untuk arsitektur CPU – 0 dan 1 murni.

Pada titik ini, Anda sebenarnya telah menyelesaikan seluruh rantai dari pasir (silikon) hingga program. Banyak orang merasa paham pada tahap ini, tetapi dalam lingkungan industri nyata saat ini, hanya memahami prinsip CPU tradisional bahkan tidak mencapai nilai kelulusan.

Mengingat topik terpanas saat ini tentang model AI besar, saya harus memperluas wawasan Anda. Mari kita lihat seperti apa lanskap daya komputasi yang sebenarnya saat ini.

Tim mana pun yang bekerja dengan model besar saat ini, baik untuk pelatihan maupun inferensi, sama sekali tidak dapat menggunakan CPU untuk menghitung. Mengapa?

Karena CPU dirancang untuk menangani kontrol logika yang kompleks. Lihatlah sebuah CPU: sebagian besar areanya dikhususkan untuk prediksi cabang, manajemen cache, dan unit kontrol. Bagian yang benar-benar digunakan untuk komputasi numerik murni – ALU – tidak terlalu besar. Ini seperti CPU adalah seorang intelektual berpendidikan tinggi yang unggul dalam proses manajemen yang kompleks. Minta dia menghitung 1+1, dia bisa melakukannya, dan dia bahkan mungkin menganalisis apakah ada kesalahan – tetapi dia hanya bisa menangani beberapa pada satu waktu.

Esensi matematika di inti model besar adalah perkalian matriks skala sangat besar. Misalnya, mengalikan dua matriks berukuran beberapa ribu kali beberapa ribu. Ini membutuhkan ratusan juta operasi perkalian dan penjumlahan. Logikanya sangat sederhana – kali-tambah, kali-tambah – tanpa percabangan yang kompleks, tetapi volume datanya luar biasa.

Jika Anda menggunakan CPU tradisional untuk menghitung ini, ia memang dapat mengeksekusi miliaran instruksi per detik, tetapi dihadapkan dengan ratusan miliar parameter, itu hanya setetes air di lautan.

Untuk benar-benar memahami apa yang sebenarnya dihitung oleh model besar, jika intuisi matematika Anda masih mengandalkan rumus hafalan, saya sangat menyarankan Anda untuk menonton “Essence of Linear Algebra” dari 3Blue1Brown. Untuk memudahkan review dan derivasi, Anda bisa memadukannya dengan kumpulan catatan 3Blue1Brown dalam bahasa Mandarin dan Inggris ini. Ia benar-benar mencapai visualisasi intuitif dari perkalian matriks tingkat lanjut dan transformasi linear. Setelah menontonnya, Anda akan memiliki gambaran mental tingkat fisik yang nyata dari operasi perkalian-akumulasi di ribuan parameter.

Catatan Aljabar Linear 3Blue1Brown: Mungkin kompilasi Mandarin-Inggris terbaik di web

Sifat dari perhitungan matriks masif ini melahirkan GPU, Unit Pemrosesan Grafis – yang sekarang harus disebut Unit Komputasi Paralel Tujuan Umum.

Filosofi desain GPU benar-benar berlawanan dengan CPU. Ia memotong sebagian besar sirkuit kontrol yang kompleks dan cache besar, mengisi setiap bit ruang fisik yang dibebaskan dengan ALU sesederhana mungkin. Chip NVIDIA H100 saat ini berisi puluhan ribu inti komputasi. Meskipun setiap inti mungkin berjalan pada frekuensi yang lebih rendah daripada inti CPU dan memiliki logika kontrol yang lemah, mereka semua dapat bekerja secara simultan.

Bayangkan GPU sebagai formasi 100.000 siswa sekolah dasar yang hanya tahu aritmatika. Anda memberi mereka perintah yang sangat sederhana: kalikan angka di kiri Anda dengan angka di kanan Anda. Semua 100.000 siswa menghitung hasilnya secara bersamaan pada detak clock yang sama. Untuk operasi matriks paralel masif yang diperlukan oleh model besar, GPU ratusan hingga ribuan kali lebih efisien daripada CPU.

Sebenarnya, AI – seperti penjumlah CPU – tidaklah semisterius itu. Ia tetap hanya lapisan demi lapisan logika dan matriks. Jika Anda ingin membangun pemahaman deep learning dari awal, saya merekomendasikan sebuah buku yang dipuji oleh banyak orang di Twitter karena sepenuhnya mendemistifikasi AI: Deep Learning with Python. Setelah Anda memahami perhitungan tensor dalam propagasi maju dan mundur, Anda akan menyadari bahwa tidak ada sihir di dalam model besar juga.

Setelah membaca buku ini, saya sepenuhnya demistifikasi tentang AI!

Kembali ke perangkat keras. Ketika kita melakukan optimasi algoritma level rendah, sebagian besar upaya kita dihabiskan untuk bertarung dengan bandwidth VRAM. Ini juga tempat di mana banyak programmer tingkat tinggi tersandung.

Karena ALU menghitung sangat cepat. Seperti yang disebutkan sebelumnya, modul memori menyimpan data dengan mengisi dan mengosongkan kapasitor, dan mereka berada pada jarak fisik tertentu dari CPU atau GPU – sinyal listrik membutuhkan waktu untuk bepergian melintasi motherboard. Tantangan terbesar yang dihadapi chip AI saat ini adalah apa yang disebut dunia akademis sebagai hambatan von Neumann.

Yaitu: ribuan inti komputasi selesai memproses data di tangan mereka dalam sekejap, dan kemudian mereka hanya bisa duduk diam, menunggu data baru dipindahkan dari memori lambat. Bahkan jika Anda membuat sirkuit komputasi pada chip lebih cepat, jika Anda tidak dapat memberikan data dengan cukup cepat, daya komputasi akan terbuang percuma.

Untuk memecahkan masalah ini, insinyur perangkat keras telah didorong ke titik ekstrem. Karena modul memori biasa terlalu jauh dan terlalu lambat, mengapa tidak mengemas memori dan chip GPU langsung pada substrat yang sama? Untuk meningkatkan lebar saluran transmisi data, alih-alih menggunakan kabel tradisional, mereka menggunakan teknologi yang disebut interposer silikon – mengebor ribuan lubang konduktif mikroskopis di dalam silikon untuk menghubungkan memori dan inti komputasi secara langsung. Inilah yang disebut Memori Bandwidth Tinggi, atau HBM.

Jika bagian ini sangat menarik minat Anda dan Anda ingin mengamankan gaji tinggi yang tak tergantikan sebagai arsitek atau pengembang level rendah di era AI yang akan datang, saya sangat mendorong Anda untuk menaklukkan Computer Architecture: A Quantitative Approach. Buku ini ditulis oleh dua peraih Penghargaan Turing, dan hampir setiap insinyur perangkat keras di Silicon Valley memiliki salinannya. Buku ini menggunakan banyak sekali data nyata dan rumus untuk memberi tahu Anda mengapa chip harus dirancang dengan arsitektur cache tertentu dan di mana tepatnya hambatan dalam paralelisme multi-inti berada. Meskipun sangat kering untuk dibaca, dan beberapa bab sangat sulit, ini adalah jalan yang diperlukan untuk menjembatani kesenjangan kognitif dalam pemahaman level rendah.

Kembali ke pertanyaan awal Anda. Mengapa Anda masih merasa bingung setelah mempelajari semua istilah itu? Karena pengajaran tradisional memutuskan hubungan vital antara entitas fisik dan abstraksi logis.

Ketika Anda memperlakukan CPU sebagai kotak hitam ajaib, istilah-istilah itu terasa seperti definisi yang tidak dapat dipahami. Tetapi jika Anda mengikuti hukum fisika ke atas:

  • Karena tegangan tinggi dan rendah dapat membentuk gerbang logika, kita mendapatkan unit aritmatika yang dapat melakukan perhitungan.
  • Karena sirkuit umpan balik dapat mengunci keadaan tegangan, kita mendapatkan register yang dapat menyimpan data.
  • Karena kita perlu mengontrol aliran sinyal listrik secara berirama, kita mendapatkan osilator kristal dan unit kontrol.
  • Karena sistem ini terlalu kompleks bagi manusia untuk memasukkan level tegangan secara langsung, kita menemukan set instruksi, membungkus 0 dan 1 ke dalam bahasa assembly, dan akhirnya ke dalam C dan Python.

Sebagai seorang praktisi yang telah melalui kerasnya industri ini, saya dapat mengatakan kepada Anda dengan sangat bertanggung jawab: di era ini, framework frontend datang dan pergi, arsitektur microservice backend berjaya selama beberapa tahun, dan bahkan arsitektur model AI besar pun beriterasi dengan kecepatan yang memusingkan. Banyak teknik pengembangan aplikasi tingkat tinggi yang Anda pelajari hari ini mungkin sudah usang tahun depan. Bahkan, model besar sendiri sudah dapat melakukan banyak tugas pengkodean dasar lebih baik daripada programmer rata-rata.

Tetapi satu hal yang tidak pernah berubah adalah seperangkat prinsip operasi fundamental komputer yang berakar pada fisika semikonduktor ini. Tidak peduli bagaimana perangkat lunak diabstraksikan, tidak peduli betapa canggihnya algoritma, semuanya pada akhirnya bermuara pada fluktuasi tegangan pada sepotong silikon. Semakin canggih optimasi kinerja, semakin mutakhir penjadwalan komputasi, semakin banyak insinyur membutuhkan kemampuan untuk melihat melalui semua lapisan abstraksi perangkat lunak dan secara langsung memahami keadaan operasional perangkat keras yang mendasarinya.

Jangan berpikir pengetahuan level rendah ini jauh dari Anda. Ketika Anda menemukan sepotong kode yang sangat boros kinerja, dan karena Anda memahami mekanisme jalur cache di level terbawah, Anda menyesuaikan susunan array di memori untuk secara dramatis meningkatkan tingkat hit cache CPU – membuat kode berjalan sepuluh kali lebih cepat – pada saat itu, Anda akan merasakan rasa kontrol yang luar biasa yang datang dari penguasaan prinsip-prinsip dasar.