Trong tính toán tiến hóa,tính đa dạnglà tiền đề cho tính hiệu quả của thuật toán: chỉ khi duy trì đủ số lượng ứng viên, áp lực chọn lọc mới không đẩy quần thể vào cực trị địa phương quá sớm. Nhưng tính đa dạng đồng thời kéo theo khối lượng tính toán khổng lồ — một lần chạy thường cần đánh giá hàng chục nghìn, thậm chí hàng triệu ứng viên. Khi các ứng viên được viết dưới dạng mảng đối tượng thông thường, dùng vòng lặp từng phần tử để lần lượt đưa đi đánh giá, phần lớn thời gian tính toán bị tiêu tốn vào việc điều phối từng phần tử và luồng điều khiển của ngôn ngữ chủ, chứ không phải vào phép toán số thực sự. Đây chính lànguyên nhân gốc rễ khiến vòng lặp CPU tuần tự truyền thống kém hiệu quả khi xử lý hàng chục nghìn lượt đánh giá ứng viên.
Bước nhảy về cách biểu diễn: từ danh sách ứng viên đến đồ thị tính toán tensor hóa
Thay đổi mà EvoX mang lại không phải là tăng tốc cục bộ một toán tử nào đó, mà làsự thay đổi trong cách biểu diễn quá trình tiến hóa: chuyển từ xử lý dạng danh sách từng ứng viên sang tính toán theo lô với tensor là công dân hạng nhất. Tập hợp ứng viên không còn nằm rải rác trong mảng đối tượng, mà cùng với kết quả đánh giá và trạng thái thuật toán được tổ chức thống nhất thành tensor, cho phép chúng tham gia tính toán một cách tổng thể.
- Tensor ứng viên: viết toàn bộ thế hệ ứng viên thành tensor có kích thước [kích thước quần thể, số chiều lời giải]. Lúc này "một ứng viên" chỉ là một hàng trong tensor, không còn là một đối tượng độc lập của ngôn ngữ chủ.
- Toán tử theo lô: các thao tác như đột biến tác động trực tiếp lên toàn bộ quần thể, một lần gọi là hoàn tất cập nhật cho tất cả ứng viên, thay vì gọi vòng lặp N lần.
- Đánh giá theo lô: với dạng evaluate(tensor ứng viên) có được kết quả đánh giá của cả thế hệ trong một lần, đơn vị đo số lượng đánh giá chuyển từ "cái" sang "lô".
- Đồ thị tính toán: chọn lọc và cập nhật trạng thái không còn chỉ là logic điều khiển tuần tự, mà là các nút trong đồ thị, nhờ đó có được cơ hội tối ưu biên dịch như hợp nhất toán tử, điều phối song song.
Đối chiếu hai cách viết
Cách viết dạng danh sách gần như là: lấy từng ứng viên ra, đánh giá từng cái, so sánh từng cái và cập nhật trạng thái — mỗi bước đều phụ thuộc vào vòng lặp của ngôn ngữ chủ, khó tối ưu tổng thể. Cách viết tensor hóa thì là: tensor ứng viên → đột biến → đánh giá → chọn lọc → cập nhật trạng thái, toàn bộ chuỗi được tạo thành từ các phép toán tensor và biểu diễn thành một đồ thị tính toán, trình biên dịch có thể hợp nhất và điều phối thiết bị trên toàn đồ thị. Lưu ý: logic của thuật toán (phân phối đột biến, áp lực chọn lọc) không bị viết lại, thứ bị viết lại làcách biểu diễn.
