Vì sao RAM trong PC, điện thoại và GPU lại khác nhau?
Cùng dùng DRAM, vì sao PC dùng thanh RAM, điện thoại hàn RAM lên bo mạch, còn GPU lại đặt bộ nhớ ngay cạnh chip?
Ở những bài trước, ta đã đi vào tận bên trong một ô DRAM. Nó vẫn chỉ là:
1 transistor
+
1 tụ điện
Ô nhớ này không chỉ nằm trong thanh RAM của máy bàn. Nó còn nằm trong điện thoại, và trong những GPU dùng để chạy AI.
Nhưng mở ba thiết bị đó ra, bộ nhớ của chúng trông rất khác nhau.
Trong PC: RAM nằm trên một thanh riêng
Đây là kiểu quen thuộc nhất:
CPU
│
│ đường mạch trên bo mạch chủ
│
▼
┌────────────────────────────┐
│ ■ ■ ■ ■ ■ ■ ■ ■ │
└────────────────────────────┘
thanh RAM
Các chip DRAM được hàn lên một thanh mạch nhỏ, gọi là DIMM, rồi thanh đó cắm vào khe trên bo mạch chủ.
Cái hay của cách làm này rất dễ thấy: tháo ra được. Còn khe trống thì cắm thêm một thanh. Thanh hỏng thì thay thanh khác. Muốn nâng từ 32 GB lên 64 GB cũng không phải đổi CPU.
Nhưng chip nhớ vì thế nằm khá xa bộ xử lý. Một bit phải đi:
chip DRAM
↓
thanh RAM
↓
chân cắm
↓
đường mạch trên bo mạch chủ
↓
CPU
Đường càng dài thì truyền càng khó và càng tốn điện. DDR chấp nhận cái giá đó để đổi lấy một thứ rất hữu ích với máy bàn và máy chủ: bộ nhớ thay và mở rộng được.
Trong điện thoại, thanh RAM lại thành vấn đề
Thử đặt một thanh DIMM vào điện thoại. Nó chiếm một phần rất lớn bên trong máy.
Điện thoại còn có một ràng buộc nữa:
pin
Máy bàn cắm điện thì chấp nhận được bộ nhớ ăn thêm vài watt. Điện thoại phải tiết kiệm từng chút để pin đủ một ngày.
Nên người ta bỏ luôn thanh RAM và khe cắm, hàn chip nhớ sát bộ xử lý — thứ mà trong điện thoại gộp cả CPU, GPU và nhiều khối khác vào một con chip, gọi là SoC.
┌──────────────────────────┐
┌───────────┐
│ SoC │ ■ ■
│ CPU + GPU │ RAM
└───────────┘
└──────────────────────────┘
bo mạch điện thoại
Loại bộ nhớ này là LPDDR — Low Power DDR. Đường nối ngắn hơn, không cần thanh mạch riêng, không cần khe cắm, và nó còn hạ điện khi máy không cần chạy hết sức.
Hậu quả cũng rõ: RAM đã hàn lên máy. Mua 8 GB rồi muốn lên 16 GB thì thường là không được.
Nhưng GPU lại gặp một vấn đề khác
Một CPU có tương đối ít nhân, mỗi nhân mạnh. GPU thì ngược lại: rất nhiều khối tính làm việc cùng lúc, và khối nào cũng cần dữ liệu.
Nếu con đường từ bộ nhớ vào GPU quá hẹp thì chuyện xảy ra là:
■ đang tính
■ chờ dữ liệu
■ chờ dữ liệu
■ đang tính
■ chờ dữ liệu
■ chờ dữ liệu
GPU
Mười sáu khối tính, khối nào cũng cần dữ liệu. Thử cấp qua đường hẹp, rồi qua đường rộng.
Với đồ hoạ, AI hay mô phỏng khoa học, đây là chỗ nghẽn thật sự. Cách giải không phải là làm một đường chạy nhanh hơn, mà là làm thật nhiều đường cùng lúc.
HBM xếp chồng RAM ngay cạnh GPU
HBM là High Bandwidth Memory. Thay vì:
GPU ---------------- thanh RAM
nó trông như thế này:
┌───────────────────────────────────┐
┌──────────────┐ ┌─────┐
│ │ │ RAM │
│ GPU │ │ RAM │
│ │ │ RAM │
│ │ │ RAM │
└──────────────┘ └─────┘
└───────────────────────────────────┘
cùng một package
Chip nhớ nằm ngay cạnh GPU, trong cùng một vỏ chip. Và thay vì trải nhiều chip ra một thanh dài, nhiều lớp DRAM được xếp chồng lên nhau.
Chồng silicon lên nhau thì tín hiệu vẫn phải chạy từ lớp này xuống lớp kia. HBM khoan những đường dẫn xuyên thẳng qua các lớp, như những chiếc thang máy rất nhỏ:
RAM ─┬─┬─┬─┬─
RAM ─┼─┼─┼─┼─
RAM ─┼─┼─┼─┼─
RAM ─┴─┴─┴─┴─
│ │ │ │
Những đường xuyên dọc đó gọi là TSV.
Đặt gần thôi vẫn chưa đủ, vì LPDDR cũng đã đặt gần. Điểm thứ hai của HBM là nó nối bộ nhớ với GPU bằng rất nhiều đường song song:
DDR
GPU ═══════ RAM
HBM
GPU ═════════════════════════════ RAM
═════════════════════════════
═════════════════════════════
═════════════════════════════
Không đường nào cần chạy cực nhanh. Nhiều đường cùng làm việc thì mỗi nhịp chuyển được rất nhiều dữ liệu. Đó là chữ High Bandwidth trong tên.
Vậy sao PC không dùng HBM hết?
Nhìn lại cách nó được lắp:
┌─────────────────────────────┐
│ │
│ GPU HBM HBM │
│ │
└─────────────────────────────┘
Không có khe trống nào để người dùng mua thêm một thanh rồi cắm vào. Làm ra cái package này cũng phức tạp hơn nhiều so với cắm một thanh DIMM lên bo mạch. Còn muốn nhồi thật nhiều bộ nhớ cho một máy chủ thì DIMM vẫn tiện hơn hẳn.
HBM giải đúng một bài toán: đưa một lượng dữ liệu cực lớn tới bộ xử lý trong một khoảng không gian rất nhỏ.
Ba máy, ba chỗ đặt RAM
Thanh RAM cắm trên bo mạch, cách CPU một quãng. Bấm sang máy khác để xem nó dịch đi đâu.
Cùng một loại ô nhớ, ba chỗ đặt, ba thứ được và mất khác nhau.
Bên trong vẫn là DRAM
DDR nằm trên một thanh cắm. LPDDR hàn sát SoC. HBM xếp chồng cạnh GPU. Nhưng phóng to vào một ô nhớ thì vẫn gặp thứ quen thuộc:
transistor
+
tụ điện
Bit vẫn là một chút điện tích. Tụ vẫn rò. DRAM vẫn phải refresh. Thứ thay đổi không phải cách nhớ một bit, mà là:
RAM nằm ở đâu
↓
và nối với bộ xử lý như thế nào
Đi hết khoá, ta đã gặp rất nhiều cách giữ một bit: lỗ trên giấy, xung trong ống thuỷ ngân, vòng ferrite, mạch tự giữ, điện tích trong tụ, electron bị nhốt.
Từ một lỗ trên giấy đến HBM cạnh GPU, máy tính đã học cách nhớ như thế nào?