Bài viết trình bày tổng kết kết quả nghiên cứu song song hóa giải thuật di truyền trên một và nhiều bộ đồng xử lý Intel Xeon Phi. Phương pháp của chúng tôi sử dụng: mô hình kết hợp MPI và OpenMP; và Nghiên cứu này sẽ trình bày các tiếp cận song song giải thuật di truyền trên một và nhiều bộ đồng xử lý Intel Xeon Phi theo các phương pháp gồm: mô hình lập trình Intel Xeon Phi dạng Offload và Native; và mô hình kết hợp MPI và OpenMP. Giải thuật di truyền đề xuất để tìm lịch tối ưu cho bài toán lập lịch của các máy ảo lên các máy vật lý với mục tiêu tối ưu năng lượng tiêu thụ.
Tạp chí Phát triển Khoa học Cơng nghệ – Kĩ thuật Công nghệ, 2(4):277-287 Bài nghiên cứu Open Access Full Text Article Các tiếp cận song song giải thuật di truyền kiến trúc MIC đồng xử lý Intel Xeon Phi Nguyễn Quang Hùng* , Trần Ngọc Anh Tú, Thoại Nam TÓM TẮT Use your smartphone to scan this QR code and download this article Khoa Khoa học Kỹ thuật Máy tính, Trường Đại học Bách khoa, ĐHQG-HCM, Việt Nam Liên hệ Nguyễn Quang Hùng, Khoa Khoa học Kỹ thuật Máy tính, Trường Đại học Bách khoa, ĐHQG-HCM, Việt Nam Email: nqhung@hcmut.edu.vn Lịch sử • Ngày nhận: 09-10-2019 • Ngày chấp nhận: 20-11-2019 • Ngày đăng: 31-12-2019 DOI : 10.32508/stdjet.v2i4.612 Bản quyền © ĐHQG Tp.HCM Đây báo công bố mở phát hành theo điều khoản the Creative Commons Attribution 4.0 International license Ngày nay, giải thuật di truyền sử dụng phổ biến nhiều ngành tin sinh học, khoa học máy tính, trí tuệ nhân tạo, tài chính… Giải thuật di truyền áp dụng nhằm tạo lời giải chất lượng cao cho toán tối ưu phức tạp ngành Đã có nhiều nghiên cứu dựa kiến trúc phần cứng đề nghị với mục đích tăng tốc độ thực thi giải thuật di truyền nhanh tốt Một số nghiên cứu đề xuất giải thuật di truyền song song hệ thống có xử lý đa nhân (multicore CPU) và/hoặc có xử lý đồ họa (Graphics Processing Unit GPU) Tuy nhiên, giải pháp đề xuất giải thuật di truyền chạy hệ thống có sử dụng đồng xử lý (co-processor) Intel Xeon Phi (Intel Xeon Phi có kiến trúc Many Intergrated Core (MIC)) Vì lý đó, chúng tơi đề xuất phát triển giải pháp thực giải thuật di truyền kiến trúc MIC Intel Xeon Phi Nghiên cứu trình bày tiếp cận song song giải thuật di truyền nhiều đồng xử lý Intel Xeon Phi theo phương pháp gồm: (i) mô hình lập trình Intel Xeon Phi dạng Offload Native; (ii) mơ hình kết hợp MPI OpenMP Giải thuật di truyền đề xuất để tìm lịch tối ưu cho toán lập lịch máy ảo lên máy vật lý với mục tiêu tối ưu lượng tiêu thụ Các kết đánh giá mô cho thấy tính khả thi việc thực giải thuật di truyền phân bố nhiều Intel Xeon Phi Giải thuật di truyền hay phân bố nhiều Intel Xeon Phi cho kết thời gian thực thi giải thuật nhanh thực thi giải thuật khả tìm lời giải tốt sử dụng nhiều Intel Xeon Phi Kết nghiên cứu áp dụng cho meta-heuristic khác tìm kiếm TABU, Ant Colony Optimization Từ khoá: Xử lý song song, Genetic algorithm, Xeon Phi, MIC, Meta-heuristic GIỚI THIỆU Trong năm gần đây, phát triển mạnh mẽ lĩnh vực Tính Tốn Hiệu Năng Cao (HighPerformance Compting - HPC) với xuất siêu máy tính cấu hình mạnh có tốc độ tính tốn cao Hầu hết siêu máy tính tận dụng sức mạnh xử lý trung tâm (CPU) đa nhân (multicore), thiết bị gia tốc (accelerator) chẳng hạn xử lý Đồ họa (Graphics Processing Unit - GPU) đồng xử lý (co-processor) Intel Xeon Phi Hầu hết nhà nghiên cứu lập trình viên thực thi ứng dụng họ hệ thống dùng CPU đa nhân và/hoặc trang bị thêm GPU Hiện tại, có ứng dụng chạy hệ thống trang bị phần cứng đồng xử lý Intel Xeon Phi có kiến trúc Many Intergrated Core (MIC) Các hệ thống siêu máy tính hàng đầu trang bị đồng xử lý Intel Xeon Phi nhiều: Tiane-2 (MilkyWay-2), Thunder, cascade, SuperMUC… Hệ khơng có nhiều ứng dụng chạy hệ thống siêu máy tính Tiane-2 (MilkyWay-2), Thunder, cascade, SuperMUC nói chung; đặc biệt SuperNode-XP - hệ thống tính tốn hiệu cao gồm 24 nút tính tốn mạnh trang bị đồng xử lý Intel Xeon Phi trường Đại học Bách khoa, ĐHQG-HCM nói riêng hệ thống SuperNode-XP sử dụng đồng xử lý Intel Xeon Phi Điều dẫn đến việc khó để tận dụng hồn tồn sức mạnh tính tốn siêu máy tính Do vậy, động cho nghiên cứu nhằm thực đánh giá hiệu meta-heuristic (ví dụ: giải thuật di truyền, giải thuật tìm kiếm TABU, Ant Colony Optimization, …) hệ thống tính tốn hiệu cao có trang bị đồng xử lý Intel Xeon Phi cần thiết cấp bách Giải thuật di truyền (Genetic Algorithm - GA) giải thuật có khối lượng tính tốn lớn song song hóa đạt hiệu suất cao Với mục tiêu tìm thấy lời giải tốt giảm thời gian thực thi giải thuật di truyền, đồng xử lý Intel Xeon Phi GPU thường sử dụng để đạt mục đích Bài báo trình bày tổng kết kết nghiên cứu song song hóa giải thuật di truyền nhiều đồng xử lý Intel Xeon Phi Phương pháp chúng tơi sử dụng: (i) mơ hình kết hợp MPI OpenMP; Trích dẫn báo này: Quang Hùng N, Anh Tú T N, Nam T Các tiếp cận song song giải thuật di truyền kiến trúc MIC đồng xử lý Intel Xeon Phi Sci Tech Dev J - Eng Tech.; 2(4):277-287 277 Tạp chí Phát triển Khoa học Cơng nghệ – Kĩ thuật Công nghệ, 2(4):277-287 (ii) hai mô hình OpenMP dạng native offload để song song hóa giải thuật di truyền (GA) lên nút tính tốn hiệu cao (HPC) có sử dụng hay nhiều đồng xử lý Intel Xeon Phi Dựa vào công việc trước giải vấn đề phân cơng nhiệm vụ q trình MPI thread OpenMP Intel Xeon Phi Thực thử nghiệm hệ thống 50-TFlops SupernodeXP, cụm nút tính tốn hiệu cao (mỗi nút gồm CPU đa nhân hai (x2) đồng xử lý Intel Xeon Phi Knights Corner (KNC) với 2x61 lõi = 122 lõi) Kết mô giải thuật cho thấy giải thuật di truyền đề xuất thực thi Intel Xeon Phi (122 lõi) giảm thời gian thực đáng kể so với GA cho kết tìm lời giải nhanh so với dùng đồng xử lý Intel Xeon Phi (61 lõi) Khác với nghiên cứu trước công bố thực giải thuật di truyền theo mơ hình Offload Intel Xeon Phi, báo trình bày thực giải thuật di truyền mơ hình Native mơ hình phân bố nhiều KNC Kết so sánh ba mơ hình Offload, Native phân bố đánh giá tập liệu Phần lại báo tổ chức sau Trong phần Kiến thức sở nghiên cứu liên quan, chúng tơi thảo luận cơng trình liên quan đến nghiên cứu này, giới thiệu số kiến thức kiến trúc MIC, đồng xử lý Intel Xeon Phi, lập trình Intel Xeon Phi Chi tiết triển khai giải thuật di truyền Intel Xeon Phi theo mơ hình song song khác trình bày phần Phương pháp đề xuất Trong phần Kết nghiên cứu, chúng tơi trình bày kết đánh giá mô cho giải thuật di truyền KNC với mơ hình song song khác Tiếp theo phần Thảo luận phần Kết luận mục cuối KIẾN THỨC CƠ SỞ VÀ CÁC NGHIÊN CỨU LIÊN QUAN vùng nhớ dành riêng cho core Ngồi ra, cịn có vùng nhớ chung từ 6GB đến 16GB kết nối thông qua bus dạng ring (Hình 1), băng thơng nhớ đạt khoảng 350 GB/s Bên cạnh kiến trúc NUMA (non-uniform memory access) KNC điều đáng quan tâm, đảm bảo tính cục liệu ứng dụng thời gian truy cập nhớ cores phụ thuộc vào khoảng cách chúng Tốc độ core dao động khoảng 1.0 đến 1.5 GHz (CPU có tần số cao từ GHz đến GHz) KNC KNC có khoảng 61 cores, KNL (Knights Landing), Intel Xeon Phi hệ thứ hai có khoảng 72 cores Trong core, người lập trình kích hoạt lên tới hardware threads, khoảng 244 threads card Xeon Phi Ngoài tồn vector units (512-bit vector registers) giúp gia tăng đáng kể tốc độ thực thi chương trình KNC cho phép ta thực phép tính SIMD 16 số độ xác đơn số độ xác kép KNC kết nối thông qua cổng PCIe tốc độ cao điều phối CPU Với tất đặc điểm kỹ thuật đề cập bên nhớ, core, vector units KNC, hiệu suất cao mặt lý thuyết (theoretical peak performance) đạt khoảng 1200 GFLOPS (giga floating point operation per second) độ xác kép 2400 GFLOPS độ xác đơn Một node tính tốn trang bị, lắp đặt nhiều card KNC tạo nên nút tính tốn có hiệu suất cao Hình 1: Kiến trúc KNC Kiến trúc Many Integrated Core (MIC) Intel Xeon Phi Từ phương diện người lập trình, am hiểu kiến trúc MIC điều cần thiết để khai thác tối đa hiệu suất Intel Xeon Phi Trong báo này, kết thực nghiệm đo đạc đánh giá hiệu thực hệ thống có lắp đặt Intel Xeon Phi Knights Corner (KNC) KNC có chứa 61 lõi (CPU core) điều khiển nhớ ( Memory Controllers ), chúng kết nối với thông qua bus dạng ring gọi Core Ring Interconnect (CRI) (Hình 1) KNC có nhớ cache hai mức (twolevel cache) Cache level có 32KB, level có 512KB 278 Lập trình Intel Xeon Phi Việc lập trình thiết bị đồng xử lý (coprocessor) Intel Xeon Phi đánh giá dễ so với lập trình GPU NVIDIA thơng qua CUDA (Compute Unified Device Architecture) phần code chạy CPU Intel Xeon Phi gần giống hồn tồn Trong nút tính tốn, có hai mơ hình lập trình sử dụng phổ biến là: native offload (Hình 2) Các ứng dụng offload khởi chạy host CPU, sau giao tiếp để thực Tạp chí Phát triển Khoa học Công nghệ – Kĩ thuật Công nghệ, 2(4):277-287 trình tính tốn coprocessor Trong ứng dụng native chạy Xeon Phi cách trực tiếp mà không cần phải thông qua CPU gán vào 15 cores Còn chế độ scatter, threads đặt xa có thể, 60 threads phân bố vào 60 cores Giải thuật di truyền Hình 2: Mơ hình lập trình Intel Xeon Phi OpenMP OpenMP (Open Multi-Processing) chọn sử dụng để song song hoá chương trình, thay framework thư viện khác Intel Cilk or TBB tính đơn giản dễ sử dụng OpenMP khung phần mềm hướng tính tốn dành cho mơ hình lập trình nhớ chung (shared memory) OpenMP có nhiều thị (directives) sử dụng để song song hố code theo nhiều hướng khác Tuy nhiên, cần nắm rõ vài thị hoàn toàn phát huy hết tiềm cores, vector register Intel Xeon Phi như: #pragma omp parallel , #pragma omp simd , #pragma omp for Sự phân bố threads vào cores Intel Xeon Phi : Để tận dụng khả tính toán Intel Xeon Phi, tất threads phải sử dụng Tuy nhiên, threads di chuyển (migrate) cores, điều phụ thuộc vào định định thời hệ điều hành Điều dẫn tới suy giảm đáng kể mặt hiệu suất, nguyên nhân threads sau di chuyển (migration) phải lấy data từ cache core cũ sang core Trong kỹ thuật tối ưu cho Intel Xeon Phi, có kỹ thuật gọi thread affinity Kỹ thuật giúp ta hạn chế di chuyển thread cách cấu hình biến mơi trường KMP_AFFINITY vào mode như: scatter, compact, mode khác Trong scatter compact hai mode thường hay sử dụng Để hiểu rõ thread affinity mode compact and scatter, tham khảo ví dụ sau Giả sử có 60 threads cần gán vào hệ thống có 60 cores, core chạy threads lúc Ở chế độ compact threads đặt gần có thể, threads đánh số từ đến 59 Giải thuật di truyền (GA) sử dụng để tìm lời giải tối ưu tồn cục cho nhiều ứng dụng kỹ thuật khoa học trước Giải thuật di truyền sử dụng để giải vấn đề khác khoa học kỹ thuật Theo nghiên cứu Arenas cộng , có nhiều nghiên cứu thử nghiệm giải thuật di truyền cho nhiều toán khác có sử dụng hay nhiều thiết bị GPU Nghiên cứu Einkemmer cố gắng tìm thiết kế tối ưu cho cánh máy bay Tuy nhiên, vấn đề tối ưu hóa phi tuyến thuật tốn tối ưu hóa truyền thống khơng hiệu Các tác giả cho giải thuật song song hóa tốt hưởng lợi đáng kể từ phần cứng GPU Intel Xeon Phi Một số nghiên cứu 9–11 gần sử dụng giải thuật di truyền cho toán lập lịch cơng việc, tốn lập lịch máy ảo 12 mơi trường điện tốn đám mây Nghiên cứu Pinel cộng 10 đề xuất giải pháp giải thuật di truyền song song (Parallel Cellular Genetic Algorithm) GPU để giải toán lập lịch lớn công việc độc lập Nghiên cứu khác thực giải thuật di truyền GPU cho toán phân bổ máy ảo lên máy vật lý hướng mục tiêu tối thiểu lượng tiêu thụ máy vật lý, tác giả đạt chương trình thực thi nhanh lời giải tốt sử dụng GPU so với CPU Bài nghiên cứu trình bày kết tổng kết nghiên cứu thực giải thuật di truyền cho đồng xử lý Intel Xeon Phi theo mơ hình Offload giải thuật di truyền phân bố nhiều đồng xử lý Intel Xeon Phi sử dụng MPI + OpenMP Một nghiên cứu gần 13 phát triển thư viện pyMICDL tương tự NumPy 14 , pyMIC-DL thư viện cho Học sâu (Deep learning), đồng xử lý Intel Xeon Phi KNC Đánh giá cho thấy thực thi chương trình Học Sâu pyMIC-DL có hiệu cao (tính theo GFLOPS) so với dùng thư viện NumPy xử lý đa lõi (Multicore CPU) PHƯƠNG PHÁP ĐỀ XUẤT Chúng tơi trình bày ba (03) giải thuật di truyền song song theo mơ hình Intel Xeon Phi Native, Offload Distributed đồng xử lý Intel Xeon Phi Giải thuật GAMIC (Offload): GAMIC (Offload) giải thuật di truyền theo mơ hình Intel Xeon Phi Offload Giải thuật trình bày mã giả cho giải thuật di truyền theo mô hình Intel Xeon Phi Offloading, ký 279 Tạp chí Phát triển Khoa học Công nghệ – Kĩ thuật Công nghệ, 2(4):277-287 hiệu: GAMIC (Offload) Giải thuật GAMIC (Offload) đề xuất thực thi: khởi tạo nhiễm sắc thể, đánh giá thể lực, trao đổi chéo, đột biến chọn lọc chạy (1) đồng xử lý Intel Xeon Phi (KNC) Bộ nhớ KNC phân bổ liệu lần tái sử dụng nhiều lần để giảm độ trể, giảm tải (lưu liệu) Hơn nữa, để giảm thời gian truy cập nhớ kết ghi trở lại nhớ host q trình tính tốn kết thúc (kết trung gian không lưu trữ ghi lại vào nhớ host) Giải thuật : Giải thuật GAMIC (Offload) Input: N – number of generations, D - dataset of virtual machines and physical machines, M – number of KNC threads Output: None 1: Initialize some populations of chromosomes with random values in the search space 2: exe_time = omp_get_wtime() 3: #pragma offload target(mic) free_if(0) { 4: for some N generations // Call Crossover Hàm 5: crossover(NSToffspring); // Call Evaluation Hàm 6: evaluation(NSToffspring, fitness_offspring, startList, endList); // Call Selection Hàm 7: selection(NSToffspring, fitness_offspring); // Call Mutation Hàm 8: mutation(NSToffspring); // Call Evaluation Hàm 9: evaluation(NSToffspring, fitness_offspring, startList, endList); 10: selection(NSToffspring, fitness_offspring); 11: end for } 12: Memory Deallocation on KNC 13: texe = omp_get_wtime() – exe_time 14: Write the best fitness value, texe to output file Giải thuật : Giải thuật GAMIC (Native) Input: N – number of generations, D - dataset of virtual machines and physical machines, M – number of KNC threads Output: None 1: Initialize some populations of chromosomes with random values in the search space 2: exe_time = omp_get_wtime() 3: #pragma omp parallel for simd 4: for some N generations // Call Crossover Hàm 5: crossover(NSToffspring); // Call Evaluation Hàm 6: evaluation(NSToffspring, fitness_offspring, startList, endList); 280 // Call Selection Hàm 7: selection(NSToffspring, fitness_offspring); // Call Mutation Hàm 8: mutation(NSToffspring); // Call Evaluation Hàm 9: evaluation(NSToffspring, fitness_offspring, startList, endList); 10: selection(NSToffspring, fitness_offspring); 11: end for 13: Memory Deallocation on KNC 14: texe = omp_get_wtime() – exe_time 15: Write the best fitness value, texe to output file Giải thuật GAMIC (Native): Giải thuật GAMIC (Native) giải thuật di truyền thiết kế thực theo mơ hình Intel Xeon Phi Native Mã giả giải thuật GAMIC (Native) trình bày Giải thuật GAMIC (Native) tương tự GAMIC (Offload) khác tất hàm di truyền (Crossover, Evaluation, Selection, Mutation) việc song song hóa vịng lặp thực OpenMP # pragma omp parallel for simd tồn chương trình GAMIC (Native) (kể liệu cho việc tính tốn) chạy (01) đồng xử lý Intel Xeon Phi Giải thuật GAMIC (Distributed): Giải thuật GAMIC_distributed giải thuật di truyền thiết kế thực theo mơ hình phân bố đồng xử lý Intel Xeon Phi (KNCs) Chúng tơi trình bày mã giả cho giải thuật di truyền phân tán (GAMIC_distributed) đề xuất lên đồng xử lý Intel Xeon Phi (KNC), đồng xử lý Intel Xeon Phi giao tiếp với qua mạng tốc độ cao InfiniBand tốc độ cao 48 Gb/s, Giải thuật GAMIC_distributed gọi thủ tục GA_Evolution() hàm di truyền khác (Crossover, Evaluation, Selection, Mutation) Các hàm gồm khởi tạo nhiễm sắc thể, đánh giá fitness, lai chéo, đột biến lựa chọn thực KNC Dữ liệu tải lên nhớ KNC ghi lần sử dụng lại nhiều lần để giảm độ trễ giảm tải (còn giữ lại liệu) Hơn nữa, để tránh thời gian chuyển liệu nhớ (ngồi host), kết tải trở lại nhớ thủ tục tính tốn KNC kết thúc; kết trung gian không lưu trữ ghi lên nhớ máy vật lý Trên KNC, song song liệu (data parallelism) thực tất tác vụ đánh giá (evaluation), lai chéo (crossover), đột biến (mutation), lựa chọn (selection) cách sử dụng thị OpenMP Tạo số ngẫu nhiên chức GA, hàm rand() khơng thể thực thi song song, điều khiến chương trình chậm, chí chậm giải thuật di truyền (SGA) Giải thuật di truyền (SGA) giải thuật di truyền Tạp chí Phát triển Khoa học Công nghệ – Kĩ thuật Công nghệ, 2(4):277-287 tương tự GAMIC (Offload) thực thi lõi (1 CPU core hay MIC core) Hàm rand() không reentrant thread-safe , sử dụng trạng thái ẩn sửa đổi lần gọi hàm rand() 15 Chúng cố gắng giải vấn đề cách sử dụng lrand48() 16 , mặt khác, phiên GPU sử dụng CUDA thư viện curand.h để giải Để tối ưu hóa mã, giải thuật GAMIC_distributed sử dụng thị OpenMP pragma để thực nhằm tận dụng lợi kiến trúc MIC Khi chúng tơi lập trình với Intel Xeon Phi, để tối đa hóa hiệu suất, đặc biệt KNC, chúng tơi dùng kỹ thuật lệnh song song SIMD chẳng hạn lệnh vector hóa (sử dụng # pragma omp simd ), để tận dụng lợi ghi vector 512-bit, đa luồng (sử dụng # pragma omp parallel # pragma omp for ), để sử dụng tối đa 61 lõi, luồng lõi cuối nhớ, để tối đa hiệu suất chương trình KNC Chúng tơi trình bày mã giả hàm GA_Evolution hàm evaluation, crossover, mutation, selection bên Chúng thêm số thị đề cập sử dụng hàm Giải thuật : Giải thuật GAMIC (Distributed) Input: N – number of generations, D - dataset of virtual machines and physical machines, M – number of KNC threads Output: None 1: Initialize some populations of chromosomes with random values in the search space 2: Call MPI Init() 3: Call MPI Comm rank(MPI COMM WORLD, &rank) 4: Call MPI Comm size(MPI COMM WORLD, &nproc) 5: exe_time = omp_get_wtime(); for (some test) 6: Call GA_Evolution(generation) 7: Call MPI_Gather(&best_sol, 1, MPI FLOAT, solutions, 1, MPI FLOAT, MASTER, MPI COMM WORLD) 8: if (rank == MASTER) then 9: Choose the best solutions among nodes and write to file 10: end if 11: texe = omp_get_wtime() – exe_time; 12: end for 13: Call MPI_Finallize() 14: Write the best fitness, texe to output file Hàm 1: void GA_Evolution(int N) Input: N – number of generations, D - dataset of virtual machines and physical machines, M – number of KNC threads, P – number of MPI processes Output: None 1: Initialize some clones using # pragma omp parallel for simd 2: for (int i =0 ; i¡sizePop*ntasks ; i++) 3: NSToffspring[i] = mangNST[i]; 4: end for 5: Call MPI_Init() 6: Using # pragma omp parallel for simd to create list of events (starting, ending) of tasks 7: Call evaluation for parents 8: Cloning the fitness array fitnesses of offspring using (# pragma omp parallel for simd ) 9: for (g = 0; g < N; g++) { 10: crossover(NSToffspring); 11: evaluation(NSToffspring, fitness_offspring, startList, endList); 12: selection(NSToffspring, fitness_offspring); 13: mutation(NSToffspring); 14: evaluation(NSToffspring, fitness_offspring, startList, endList); 15: selection(NSToffspring, fitness_offspring); 16: } 17: Write the best fitness value to file Hàm : void evaluation (int *nst, float* fitness, int* eventStartList, int* eventEndList) Input: nst – array of chromosomes, fitness – array of fitnesses, eventStartList – pointer for VM’s start event list, eventEndList - pointer for VM’s end event list Output: None 1: #pragma omp parallel for 2: for (i = 0; i