4 Mô phỏng và đánh giá hiệu quả của bộ điều khiển tần số điện áp
4.1.2 Phần mềm mô phỏng VNOC2.0
Phần mềm VNOC 2.0 được tác giả Cristinel Ababei (Đại học Marquette - Ý) phát triển để mô phỏng các hoạt động của mạng trên chip [1]. Phần mềm được phát triển bằng ngôn ngữ C++ và cho phép người dùng thay đổi mã nguồn để tuỳ biến phù hợp với mục đích sử dụng của mình. Bên cạnh việc hỗ trợ mô phỏng các hoạt động thông thường của một mạng trên chip, VNOC 2.0 còn được tích hợp hai mô hình ORION 2 và ORION 3 cho phép ước lượng năng lượng tiêu thụ của mạng trên chip đó trong quá trình mô phỏng. Vì vậy, người dùng có thể áp dụng các thuật toán về điều khiển tần số - điện áp dựa trên phương pháp DVFS trên NoC và nhận được các kết quả mô phỏng về năng lượng mà hệ thống đã tiêu thụ. Có thể nói, đây là một trong những phần mềm hiếm hoi cho phép người thiết kế có thể mô phỏng những thuật toán DVFS trên các mạng trên chip ở mức hệ thống nhằm có thể kiểm tra những thuật toán này tại thời điểm bắt đầu một thiết kế.
Một số ưu điểm của VNOC 2.0 so với những công cụ mô phỏng mạng trên chip khác là:
• Được phát triển bằng C++, dễ dàng sửa đổi và tích hợp thêm các thuật toán điều khiển DVFS. Hỗ trợ sẵn các hàm điều khiển điện áp, tần số của các bộ định tuyến trong mạng.
• Hỗ trợ mô phỏng nhiều mô hình truyền thông trên mạng trên chip như: uniform, transpose, hotspot, và selfsimilar.
• Được tích hợp mô hình mô phỏng ORION 2 và ORION 3, hỗ trợ mô phỏng tính toán năng lượng tiêu thụ cho NoC.
VNOC 2.0 được tác giả phát triển trên nền tảng hệ điều hành Linux Ubuntu 12.04 LTS (64bit). Để chạy được VNOC 2.0, người dùng cần cài thêm một số gói cần thiết thông qua terminal. Nếu biên dịch thành công, file thực thi vnoc sẽ được tạo ra. Ta có thể chạy lệnh vnoc để xem hướng dẫn về các tham số của phần mềm. Các tham số cần thiết để chạy một quá trình mô phỏng trong VNOC 2.0 được mô tả như sau:
• trace_file: tên của trace file (sử dụng trong trường hợp mô phỏng truyền thông thực)
• traffic: kiểu mô hình truyền thông (kiểu mô hình truyền thông phải thuộc một trong nhưng dạng sau: UNIFORM, HOTSPOT, TRANSPOSE1, TRANSPOSE2, SELFSIMILAR, TRACEFILE).
– HOTSPOT: truyền thông theo mô hình chỉ phát ở một số nút mạng.
– TRANSPOSE1, TRANSPOSE2: truyền thông theo mô hình chuyển vị.
– SELFSIMILAR: truyền thông theo mô hình tự ánh xạ.
– TRACEFILE: truyền thông theo kịch bản có sẵn (lấy từ tập tin ghi lại một quá trình truyền thông trên mạng thật).
• hotspots: danh sách của nút hotspot trong mạng nếu ta mô phỏng với kiểu HOTSPOT.
• hotspot_percentage: xác suất các gói gửi qua nút hotspot.
• injection_rate: tỷ lệ gói tin gửi vào mạng.
• ary_size: kích thước mạng.
• packet_size: kích thước gói tin.
• flit_size: kích thước của flit
• inp_buf: kích thước bộ đệm input-port.
• out_buf: kích thước bộ đệm output-port.
• routing: dạng thuật toán định tuyến (phải thuộc dạng: XY or TXY - Torus XY)
• vc_n: số lượng kênh ảo.
• link_bw: băng thông của các liên kết (link)
• cycles: số chu kì xung cần chạy mô phỏng.
• warmup: số lượng xung cần chạy “Warmup”.
• hist_window: khung thời gian lấy mẫu cho một dự đoán.
• do_dvfs: có áp dụng điều khiển DVFS hoặc không.
• dvfs_mode: chế độ điều khiển DVFS (phải thuộc hai dạng: SYNC or ASYNC)
• use_link_pred: có sử dụng dự đoán về mức độ sử dụng liên kết (Link Utilization) hay không.
Để có thể sử dụng VNOC 2.0 mô phỏng và đánh giá hiệu năng của bộ điều khiển tần số - điện áp, mã nguồn của VNOC 2.0 cần phải thay đổi lại để phù hợp với bộ VFC đã được thiết kế. Thuật toán phân phối DVFS của chương trình sẽ được thay bởi thuật toán dựa trên lô-gíc mờ. Chương trình VNOC 2.0 hỗ trợ sẵn thuật toán phân phối DVFS dựa trên dữ liệu của tải mạng trong quá khứ để dự đoán sự thay đổi của tải. Thuật toán này hoạt động với hai phương thức là đồng bộ (tham số SYNC) và bất đồng bộ (tham số ASYNC). Trong luận án này, đoạn chương trình ASYNC đã được thay bằng đoạn chương trình thực hiện thuật toán FUZZY. Vì vậy, tham số để sử dụng bộ FUZZY như là khối điều khiển DVFS khi mô phỏng sẽ là dvfs_mode: ASYNC.
VNOC 2.0 cũng cung cấp hai thông số cho người sử dụng có thể dùng để dự đoán mức độ hoạt động của mạng đó là: mức độ sử dụng bộ đệm trên mỗi cổng (BU: Buffer Utilization) và mức độ sử dụng liên kết trên mỗi cổng (LU: Link Utilization). Trong đó thông số LU được xác định chính là số lượng flit truyền qua liên kết đó trong một khung thời gian lấy mẫu (được gọi là: history window – hist_window). Giá trị của LU sẽ nhận được thông qua hàm: counter_flits_sent_during_hw(int i). Để triển khai thuật toán lô-gíc mờ, thông số LU và giá trị biến thiên của nó qua một khung thời gian (hist_window) sẽ được sử dụng để làm đầu vào cho khối lô-gíc mờ của bộ điều khiển tần số - điện áp (VFC). Việc sử dụng tham số nào để đánh giá tải mạng sẽ phụ thuộc tham số use_link_pred. Nếu tham số này có giá trị ‘0’ thì thông số BU sẽ được sử dụng, và nếu nó có giá trị là ‘1’ thì thông số LU sẽ được sử dụng. Vì sử dụng thông số LU là đầu vào của khối điều khiển tần số - điện áp nên chương trình mô phỏng phải thiết lập với tham số use_link_pred = 1. Đoạn pseudo code mô tả quá trình thay thế thuật toán phân phối DVFS bằng khối lô-gíc mờ được thể hiện như ở dưới đây.
i f ( u s e _ l i n k _ p r e d ( ) = t r u e ) { f o r ( i = 1 ; i < 4 ; i ++) { i f ( _LU_predicted_out_i [ i ] < _LU_predicted_out_i [ i + 1 ] ) { _LU_predicted_max = i n t ( _LU_predicted_out_i [ i + 1 ] ) ; _LU_predicted_der_max = i n t ( _LU_predicted_out_i_der [ i + 1 ] ) ; } e l s e { _LU_predicted_max = i n t ( _LU_predicted_out_i [ i ] ) ; _LU_predicted_der_max = i n t ( _LU_predicted_out_i_der [ i ] ) ; } } f l p _ o u t = f l p ( _LU_predicted_max , _LU_predicted_der_max ) ;