Thủ thuật
Samsung trình diễn giải pháp bộ nhớ LPDDR5X-PIM tại Hot Chips 2026
(giờ Việt Nam)
Tóm tắt AI
Samsung giới thiệu công nghệ PIM tích hợp trực tiếp vào LPDDR5X, đạt băng thông 614 GB/s, vượt xa mức 76.8 GB/s của DRAM truyền thống nhờ tận dụng 16 bank bộ nhớ.
Bản dịch AI

Tính toán trong bộ nhớ (in-memory compute) đã là một đề xuất hấp dẫn trong nhiều năm vì việc tính toán ngay bên trong chip nhớ có thể tận dụng băng thông nội bộ cao hơn của nó. Ngoài ra, tính toán trong bộ nhớ còn tránh được độ trễ lớn trên đường truyền giữa DRAM và các nhân tính toán truyền thống. Tại sự kiện Hot Chips 2026, Samsung đã thảo luận về việc tiếp tục theo đuổi tính toán trong bộ nhớ với dự án PIM (Processing-in-Memory) của họ. Họ đang triển khai các đơn vị MAC bên trong các chip LPDDR5X, đồng thời vẫn duy trì khả năng giao tiếp của chip với bộ điều khiển bộ nhớ tiêu chuẩn.

Các chip DRAM được chia thành các ngân hàng (bank) bên trong, mỗi ngân hàng có logic đọc và ghi riêng. Trong quá trình truy cập DRAM thông thường, bộ điều khiển bộ nhớ chọn một ngân hàng, kích hoạt một hàng trong đó, sau đó truy cập dữ liệu thông qua các lệnh chọn cột (column access strobe - CAS). Băng thông bị giới hạn bởi giao diện DRAM bên ngoài của chip. Ngay cả khi bộ điều khiển bộ nhớ có thể kích hoạt tất cả các ngân hàng cùng lúc, nó cũng không thể đạt được toàn bộ băng thông khả dụng trên tất cả các ngân hàng đó.

LPDDR5X-PIM của Samsung giống như một chip LPDDR5X-9600 thông thường với 16 ngân hàng, nhưng đặt một khối PIM (Processing-in-Memory) tại mỗi ngân hàng. Các khối PIM này truy cập vào ngân hàng DRAM đi kèm mà không bị giới hạn bởi bus bên ngoài của chip. Cùng nhau, chúng có thể tận dụng băng thông nội bộ của chip trên tất cả 16 ngân hàng, đạt mức 614 GB/s. Để so sánh, các truy cập DRAM thông thường chỉ có thể đạt tới hai ngân hàng song song và tối đa ở mức 76,8 GB/s.

Các khối PIM bao gồm một cây MAC với các tệp thanh ghi và logic điều khiển xung quanh. Một tệp thanh ghi lệnh 1024-bit chứa tối đa 64 lệnh 16-bit. Một tệp thanh ghi nguồn 4 kbit dành cho các vector kích hoạt (activation vectors) và cung cấp một toán hạng nguồn cho mảng MAC. Samsung kỳ vọng phần mềm sẽ tải trọng số mô hình (model weights) vào DRAM, nhờ đó khối DRAM đi kèm sẽ cung cấp toán hạng thứ hai. Trọng số mô hình có thể được điều chỉnh tỷ lệ (scale) trước khi tính toán MAC, với các hệ số tỷ lệ lấy từ thanh ghi tỷ lệ 2 kbit.

Mảng MAC của khối PIM hỗ trợ nhiều định dạng độ chính xác thấp. Các con số từ bài thuyết trình của Samsung cho thấy mảng MAC của mỗi khối PIM có thể duy trì bốn phép tính MAC INT8 hoặc FP8 mỗi xung nhịp dữ liệu, hoặc tám phép tính mỗi chu kỳ nếu không tính tốc độ dữ liệu kép (double data rate). Thông lượng tăng gấp đôi đối với trọng số đầu vào 4-bit, đưa thông lượng tính toán toàn gói lên 2,4 TOPS.

Đây không phải là con số quá cao, nhưng một hệ thống triển khai với nhiều chip LPDDR5X sẽ có thông lượng tổng hợp cao hơn. Ví dụ, tám chip LPDDR5X cùng nhau sẽ đạt 9,6 INT8 TOPS, gần tương đương với NPU trong Meteor Lake của Intel. Đó cũng sẽ là một thiết lập đắt đỏ, vì tám chip LPDDR5X 16 GB sẽ tương đương với 128 GB bộ nhớ hệ thống.
Một điểm nổi bật của LPDDR5X-PIM là nó vẫn nằm trong giao thức LPDDR5X tiêu chuẩn trong khi vẫn bộc lộ các khả năng tính toán không thuộc tiêu chuẩn bộ nhớ. Samsung đạt được điều này bằng cách dành riêng các địa chỉ hàng đặc biệt, hoạt động giống như các địa chỉ MMIO. Mỗi kênh có một cặp hàng được xác định trước để điều khiển chế độ. Kích hoạt một trong các hàng đó sẽ đặt chip vào chế độ đơn ngân hàng (single-bank), trong khi hàng kia đặt chip vào chế độ đa ngân hàng (multi-bank). Chế độ đơn ngân hàng là chế độ thông thường, trong khi chế độ đa ngân hàng áp dụng các lệnh trên tất cả 16 ngân hàng để khai thác băng thông nội bộ của chip.
Các hàng đặc biệt theo từng ngân hàng thay đổi cách các lệnh đọc và ghi hoạt động. Kích hoạt một trong các hàng đặc biệt này khiến các lệnh đọc và ghi truy cập vào các thanh ghi PIM thay vì nội dung ngân hàng DRAM thông thường (chế độ PIM Registers Activated). Samsung hình dung một trường hợp sử dụng ML trong đó phần mềm tải trọng số mô hình vào DRAM khi chip đang ở chế độ đơn ngân hàng bình thường. Sau đó, phần mềm chuyển sang chế độ đa ngân hàng và vào chế độ PIM Registers Activated. Điều này cho phép mã ghi các giá trị kích hoạt vào thanh ghi nguồn PIM, thiết lập hệ số tỷ lệ trong thanh ghi tỷ lệ PIM và chỉ định một thao tác được điền vào các thanh ghi lệnh PIM.
Vì chip đang ở chế độ đa ngân hàng, mỗi lần ghi thanh ghi PIM sẽ được phát quảng bá trên tất cả 16 ngân hàng. Do đó, tính toán PIM hoạt động giống như một bộ xử lý SIMD rất hạn chế, nơi thao tác, hệ số tỷ lệ và một toán hạng nguồn là giống nhau trên tất cả các ngân hàng. Samsung có cho phép ghi các thanh ghi PIM ở chế độ đơn ngân hàng, nhưng chức năng đó chỉ dành cho mục đích gỡ lỗi. Mỗi gói DRAM là 256 bit (BL=16). Việc điền vào mỗi thanh ghi nguồn mất 16 lệnh ghi. Thực hiện điều đó từng ngân hàng một trên mỗi ngân hàng trong số 16 ngân hàng sẽ có nghĩa là 256 lệnh ghi, biến băng thông ghi từ máy chủ sang thanh ghi PIM thành yếu tố hạn chế. Samsung thực sự cho phép truy cập thanh ghi PIM ở chế độ đơn ngân hàng, nhưng đó là tính năng dành cho gỡ lỗi.
Sau khi chuẩn bị các thanh ghi PIM, phần mềm chuyển trở lại chế độ đa ngân hàng và đưa ra các lệnh đọc. Thay vì đọc nội dung DRAM, các lệnh đọc này khởi tạo các phép tính và nhận kết quả được tích lũy vào các tệp thanh ghi vector (VRF) của PIM. Sau đó, các lệnh ghi yêu cầu các khối PIM ghi nội dung VRF trở lại các ngân hàng DRAM.
PIM phải xử lý việc sắp xếp lại thứ tự mà một bộ điều khiển bộ nhớ thông thường có thể thực hiện. Khi mã thiết lập PIM bằng cách kích hoạt ngân hàng, PIM thường thiết lập các tệp thanh ghi lệnh của nó để các lệnh truy cập tuần tự vào từng phần tử thanh ghi nguồn. Ví dụ, lệnh đầu tiên sẽ tham chiếu đến phần tử thanh ghi nguồn đầu tiên, lệnh thứ hai sẽ tham chiếu đến phần tử thanh ghi nguồn thứ hai, v.v. Tuy nhiên, điều đó sẽ thất bại nếu bộ điều khiển bộ nhớ sắp xếp lại các truy cập. Samsung giải quyết vấn đề này bằng Chế độ căn chỉnh địa chỉ (Address Align Mode - AAM), giúp mỗi lệnh suy ra chỉ mục thanh ghi nguồn của nó từ địa chỉ cột đang được truy cập.
Khi máy chủ hoàn tất việc sử dụng tính toán trong bộ nhớ và muốn đọc kết quả, nó sẽ chuyển chip DRAM trở lại chế độ đơn ngân hàng. Sau đó, các lệnh đọc và ghi DRAM thông thường sẽ bắt đầu truy cập nội dung DRAM như bình thường.
Samsung đã đạt được hiệu suất tăng vọt đáng kể khi tận dụng LPDDR5X-PIM so với việc sử dụng LPDDR5X tiêu chuẩn. Khả năng hoạt động của chip với bộ điều khiển bộ nhớ tiêu chuẩn rất ấn tượng, và Samsung đã rất sáng tạo trong cách tiếp cận vấn đề.
Việc tái sử dụng các lệnh DRAM tiêu chuẩn sẽ đơn giản hóa phần cứng, nhưng các thách thức về phần mềm lại rất lớn. Vì các chế độ PIM làm thay đổi ý nghĩa của các lệnh truy cập DRAM, phần mềm không thể sử dụng PIM và thực hiện các truy cập bộ nhớ thông thường cùng một lúc. Điều đó áp dụng ngay cả giữa các luồng (threads), vì bộ điều khiển bộ nhớ và chip DRAM không biết truy cập đó dành cho luồng nào. Nếu một luồng không phải PIM đọc từ bộ nhớ trong khi một luồng khác đang sử dụng PIM, luồng đầu tiên có thể gây ra tính toán ngoài ý muốn và nhận kết quả không chính xác vào các VRF của PIM. Một lệnh ghi từ luồng không phải PIM có thể khiến các khối PIM ghi dữ liệu VRF trở lại sai địa chỉ.
Samsung giải quyết vấn đề này bằng cách để máy chủ cô lập một vùng PIM trong bộ nhớ. Tôi không thể nghĩ ra cách nào dễ dàng để thực hiện việc này trong một hệ thống điển hình mà không ảnh hưởng đến băng thông bộ nhớ và hiệu suất PIM. Phần cứng thường xen kẽ (interleave) các địa chỉ trên các kênh, cho phép các kiểu truy cập phổ biến tận dụng băng thông trên các kênh đó một cách tự nhiên. PIM sử dụng các hàng theo từng kênh để kiểm soát việc thay đổi chế độ đơn/đa ngân hàng, vì vậy việc loại bỏ xen kẽ và chỉ định các kênh bộ nhớ là "chỉ dành cho PIM" sẽ là cách hợp lý duy nhất để tạo ra một vùng PIM. Khi đó, các ứng dụng không phải PIM sẽ không thể tận dụng băng thông từ các kênh dành riêng cho PIM. Mã PIM sẽ mất đi băng thông và khả năng tính toán từ các kênh không phải PIM. Vấn đề sau có thể là một vấn đề đáng kể vì thông lượng tính toán trên mỗi chip không cao lắm.
Các vấn đề đa nhiệm có thể tồn tại ngay cả sau khi cô lập vùng PIM. Nếu một ứng dụng muốn sử dụng PIM và tận dụng đa luồng, nó sẽ phải bảo vệ các truy cập vùng PIM bằng các khóa (locks) để ngăn chặn các trường hợp một luồng cố gắng thực hiện tính toán PIM trong khi luồng khác cố gắng truy cập bộ nhớ thông thường. Mọi thứ thậm chí còn tồi tệ hơn với một hệ điều hành đa nhiệm hiện đại, nơi nhiều tiến trình có thể cố gắng sử dụng PIM mà không biết về nhau. Tôi không chắc có cách nào tốt để xử lý điều đó ngoài việc bắt hệ điều hành chạy các phân đoạn mã tính toán PIM với tất cả các luồng khác bị chặn và ngắt (interrupts) bị vô hiệu hóa. Việc xử lý ngắt hoặc chuyển đổi ngữ cảnh với PIM dù sao cũng là một cơn ác mộng đối với hệ điều hành. Việc ưu tiên (preempt) một luồng PIM có nghĩa là đưa kênh bộ nhớ ra khỏi chế độ PIM và lưu trạng thái PIM. Hệ điều hành sẽ phải đọc ra tệp thanh ghi lệnh, nguồn, tỷ lệ và vector trên mỗi ngân hàng và lưu nó ở đâu đó. Chỉ cho phép một luồng chạy duy nhất mà không chuyển đổi tác vụ sẽ làm giảm hiệu suất đa luồng và có thể dẫn đến các vấn đề về khả năng phản hồi của hệ thống nếu mã dành quá nhiều thời gian trong các phần tính toán PIM.
Tính toán PIM phá vỡ các kỳ vọng của hệ thống con bộ nhớ về hành vi của DRAM vì DRAM có thể tạo ra các giá trị bộ nhớ mà hệ thống phân cấp bộ nhớ đệm (cache) không bao giờ biết đến. Bộ nhớ đệm cũng có thể phá vỡ hành vi của PIM bằng cách hấp thụ các truy cập nhằm kích hoạt các thao tác PIM. Do đó, Samsung khuyến nghị ánh xạ bộ nhớ PIM là không thể lưu vào bộ nhớ đệm (uncacheable). Điều đó có vấn đề vì các CPU và GPU hiện đại dựa rất nhiều vào bộ nhớ đệm để giảm thiểu độ trễ DRAM. Hiệu suất trên bộ nhớ không thể lưu vào bộ nhớ đệm sẽ cực kỳ chậm vì các nhân CPU hoặc GPU sẽ dành nhiều thời gian hơn để chờ đợi bộ nhớ.
Bỏ qua bộ nhớ đệm không phải là vấn đề duy nhất. Các lệnh đọc PIM hoạt động giống như các truy cập MMIO vì chúng gây ra các tính toán ảnh hưởng đến các giá trị VRF của PIM, thay vì chỉ truy xuất dữ liệu. CPU cũng giảm thiểu độ trễ bộ nhớ bằng cách khởi tạo các lệnh tải trước khi chúng biết dữ liệu tải đó thực sự sẽ cần thiết. Dự đoán nhánh (branch prediction) cho phép CPU đưa ra các lệnh trước khi nhân biết chắc chắn rằng các lệnh đó sẽ được thực thi. Các bộ nạp trước (prefetchers) quan sát các kiểu truy cập bộ nhớ và cố gắng tải dữ liệu vào bộ nhớ đệm trước khi các lệnh yêu cầu dữ liệu đó. Nếu CPU tải dữ liệu mà sau đó hóa ra không cần thiết, điều đó không sao vì các lệnh tải thường sẽ không gây ra hành vi chương trình không chính xác. Thật không may, điều đó không đúng với PIM, nơi các lệnh đọc kích hoạt các tính toán làm thay đổi nội dung VRF của PIM.
Làm việc với vùng PIM có khả năng sẽ có nghĩa là làm cho các truy cập bộ nhớ không mang tính suy đoán (non-speculative) cũng như không thể lưu vào bộ nhớ đệm. Chạy CPU mà không có bộ nhớ đệm, nạp trước hoặc thực thi ngoài thứ tự (out-of-order execution) sẽ làm tê liệt hiệu suất.
Ngoài những khó khăn về chế độ PIM, tính toán trong bộ nhớ đặt ra những thách thức cấp cao cho phần mềm. Mỗi khối PIM chỉ có quyền truy cập nhanh vào ngân hàng DRAM gắn liền cục bộ của nó. Tất cả dữ liệu đầu vào khác phải được đưa vào thông qua giao diện bên ngoài tương đối hạn chế của chip DRAM. Các khối PIM không thể trao đổi dữ liệu trực tiếp với nhau, vì vậy máy chủ phải di chuyển dữ liệu bằng các lệnh đọc và ghi DRAM thông thường nếu một khối PIM cần sử dụng kết quả do khối khác tạo ra.
LPDDR5X-PIM của Samsung về lý thuyết có thể đi vào bất kỳ máy chủ, máy tính để bàn, máy tính xách tay hoặc thậm chí thiết bị di động nào nhờ khả năng hoạt động với các bộ điều khiển bộ nhớ tiêu chuẩn. Tuy nhiên, điều đó không có nghĩa là nó sẽ dễ dàng sử dụng với các mô hình phần cứng và phần mềm điển hình. Việc chuyển đổi chế độ PIM gây khó khăn cho các hệ điều hành đa nhiệm. Việc sửa đổi nội dung DRAM "dưới nắp ca-pô" và đính kèm các tác dụng phụ vào các lệnh đọc sẽ phá vỡ bộ nhớ đệm CPU, nạp trước và thực thi ngoài thứ tự.
Tôi không nghĩ có cách nào dễ dàng để sử dụng tính toán trong bộ nhớ mà không có những thay đổi trong toàn bộ hệ thống con bộ nhớ. Ví dụ, một cái gì đó như sau sẽ giúp việc áp dụng phần mềm dễ dàng hơn:
Mở rộng giao diện DRAM để thêm một tập hợp các lệnh tính toán, tránh sự phức tạp của việc chuyển đổi chế độ.
Để bộ điều khiển bộ nhớ hoạt động như một nhân CPU ngang hàng từ góc độ nhất quán bộ nhớ đệm (cache coherency). Trước khi sử dụng các lệnh tính toán trong bộ nhớ, bộ điều khiển bộ nhớ đưa ra các yêu cầu đọc để sở hữu (RFO) cho tất cả các dòng bộ nhớ đệm bị ảnh hưởng. Điều đó cho phép bộ điều khiển bộ nhớ lấy bất kỳ dữ liệu đã sửa đổi nào và ghi lại vào DRAM trước khi bắt đầu tính toán trong bộ nhớ, đảm bảo rằng kết quả tính toán trong bộ nhớ phản ánh các lần ghi mới nhất từ phía CPU. Sau đó, bộ điều khiển bộ nhớ giữ quyền sở hữu các dòng bộ nhớ đệm bị ảnh hưởng cho đến khi các thao tác tính toán trong bộ nhớ hoàn tất, cho phép các nhân CPU quan sát kết quả tính toán trong bộ nhớ mà không cần phải vô hiệu hóa hoặc bỏ qua bộ nhớ đệm.
Thêm một tập hợp các lệnh CPU mới như “rep macb” thực hiện các thao tác nhân-tích lũy trên một khối bộ nhớ với các hệ số nhân/tỷ lệ cố định và các đặc tính số học không xác định. CPU có thể chọn sử dụng tính toán trong bộ nhớ (nếu DRAM hỗ trợ) hoặc tạo ra một chuỗi các thao tác nội bộ (nếu hoạt động trên một tập dữ liệu nhỏ đã có trong bộ nhớ đệm).
Với những thay đổi phần cứng đó, phần mềm sẽ có thể sử dụng tính toán trong bộ nhớ từ một hệ điều hành đa nhiệm mà không cần dành riêng bộ nhớ hoặc mất tính song song ở cấp độ luồng do các khóa và đồng bộ hóa liên quan đến PIM. Một lệnh CPU minh bạch tránh được vấn đề vận chuyển các tệp nhị phân dành riêng cho phần cứng và cho phép mã tương thích tiến về phía trước, tự động tận dụng các khả năng phần cứng mới bao gồm các triển khai tính toán trong bộ nhớ khác nhau. Nó cũng cho phép phần cứng sử dụng kiến thức cụ thể về triển khai và dữ liệu thời gian thực (như tra cứu bộ nhớ đệm không lấp đầy khi trượt) để đưa ra quyết định tốt nhất về nơi thực hiện tính toán. Tôi không thích giải pháp thay thế phần mềm là dành riêng các vùng bộ nhớ, đánh dấu chúng là không thể lưu vào bộ nhớ đệm và chặn các luồng. Có quá nhiều sự đánh đổi xung quanh hiệu suất, dung lượng bộ nhớ và khả năng phản hồi.
Bài viết được AI dịch và tổng hợp tự động từ Hacker News Nổi bật (buzzing.cc bản dịch tiếng Trung). Liên kết bài gốc ở phía trên. Dữ liệu đồng bộ qua API công khai được ghi nguồn tại AI HOT (canonical) ↗. AIHOT.vn luôn dẫn nguồn đầy đủ — nếu bạn thấy điểm cần chỉnh sửa, hãy gửi ý kiến tại trang phản hồi.