Trong EvoX — nền tảng tính toán hiện đại — đơn vị thực thi nhỏ nhất của toán tử tiến hóa không còn là “cá thể” nữa, mà là toàn bộtensor quần thể: các toán tử đột biến, lai ghép, chọn lọc chỉ cần một lần gọi là có thể bao phủ toàn bộ cá thể; trên cơ sở đó,biên dịch đồ thị tính toánsắp xếp chuỗi toán tử thành một kế hoạch thực thi có thể tối ưu hóa, nâng cao hiệu quả thực thi trong khi vẫn giữ nguyên ngữ nghĩa thuật toán.
Song song hóa toán tử: Tiến hóa theo lô với đơn vị là tensor
- Toán tử cấp tensor: đột biến, lai ghép, chọn lọc có thể tác động trực tiếp lên tensor quần thể có kích thước [N, D] (N là quy mô quần thể, D là số chiều biến quyết định), một lần gọi toán tử bao phủ toàn bộ N cá thể.
- Loại bỏ vòng lặp từng cá thể: không cần viết
for ind in population: ind = mutate(ind)— kiểu vòng lặp tuần tự Python/CPU như vậy nữa, từ đó giảm chi phí lập lịch hàm và gọi framework thường xuyên. - Đánh đổi chiều lô để lấy thông lượng: sau khi chiều cá thể đóng vai trò chiều lô, toán tử thực thi song song quy mô lớn trên thiết bị, thông lượng tiến hóa theo lô tăng theo quy mô quần thể.
Biên dịch đồ thị tính toán: Từ chuỗi toán tử đến kế hoạch thực thi
Sắp xếp quan hệ phụ thuộc toán tử “đột biến → lai ghép → chọn lọc” thành mộtđồ thị tính toán, trình biên dịch có thể tối ưu hóa toàn cục trên toàn bộ đồ thị, chứ không chỉ gọi từng toán tử với các triển khai có sẵn:
- Hợp nhất toán tử: gộp nhiều phép toán theo từng phần tử (element-wise) thành một kernel duy nhất, giảm việc sinh ra tensor trung gian và đọc ghi lặp đi lặp lại.
- Sinh kernel và lập lịch: sinh kernel hiệu quả cao cho đồ thị con đã hợp nhất, hoàn tất cả thế hệ tiến hóa với số lần khởi chạy kernel ít hơn.
- Tái sử dụng bộ nhớ: quy hoạch trước vùng đệm cho kết quả trung gian, giảm chi phí phát sinh từ cấp phát bộ nhớ hiển thị và vận chuyển dữ liệu.
Hiệu quả thay đổi, ngữ nghĩa không đổi
Cần phân biệt“tính thế nào”và“tính cái gì”. Song song hóa toán tử và tối ưu biên dịch chỉ thay đổi cách thực thi — số lượng kernel, quy mô tensor trung gian, chiến lược bộ nhớ và lập lịch — mà không thay đổi ý nghĩa logic của bản thân các phép đột biến, lai ghép, chọn lọc. Tầng thuật toán vẫn kết hợp các toán tử theo ngữ nghĩa tiến hóa, do đó với cùng hạt giống ngẫu nhiên, quỹ đạo tiến hóa và kết quả trước và sau tối ưu hóa phải nhất quán. Tóm gọn trong một câu: tensor hóa giải quyết “tính theo lô có nhanh hay không”, biên dịch đồ thị tính toán giải quyết “lập lịch kernel có tối ưu hay không”, còn “tính cái gì” thì không đổi.
