2 điểm bởi GN⁺ 2024-06-09 | Chưa có bình luận nào. | Chia sẻ qua WhatsApp

Phát hiện trình giả lập PS2: khi 1*X không bằng X

Vấn đề trong phép toán số thực dấu phẩy động của PS2

  • Khi dùng các lệnh nhân (MUL, MULi, v.v.) trên VU (Vector Unit) của PS2, kết quả khi nhân với 1 có thể không giống với giá trị ban đầu.
  • Đây cũng là điều đã được nhắc tới trong tài liệu hướng dẫn dành cho nhà phát triển VU, rằng có thể xảy ra lỗi tính toán 1 bit.
  • Lý do chính xác vẫn chưa được biết, nhưng những ai triển khai số thực dấu phẩy động của PS2 bằng phần mềm sẽ phải xử lý vấn đề này.

Phát hiện trình giả lập bằng cách tận dụng vấn đề này

  • Bước đầu tiên là tìm ra con số gây ra hiện tượng này.
  • Trong 250 số đầu tiên tăng theo bước 0.5, 129.5 là con số gây ra vấn đề.
  • Đoạn mã dưới đây cho thấy cách kiểm tra xem kết quả của phép nhân 129.5 với 1 có khác với giá trị ban đầu hay không.
int isVUMulErrorPresent() {
  float in[4] __aligned(16) = {129.5f, 0.0f, 0.0f, 0.0f};
  float out[4] __aligned(16) = {0.0f, 0.0f, 0.0f, 0.0f};
  asm __volatile__(
    "QMTC2 %1, $vf1\n"     // đặt 129.5f vào VF1
    "VADDw $vf2, $vf0, $vf0w\n" // VF2 = vf0[w] = 1
    "VMUL $vf1, $vf2, $vf1\n"  // VF1 = 1 * 129.5f
    "QMFC2 %0, $vf1\n"     // nạp kết quả vào EE
    : "=r"(out[0])
    : "r"(in[0]));
  return in[0] != out[0];
}
  • Đoạn mã này phát hiện liệu trình giả lập có xử lý đúng vấn đề này hay không bằng cách nhân 1 với 129.5 rồi kiểm tra kết quả.
  • Hiện tại chưa có trình giả lập nào mô phỏng chính xác hành vi này.

Ý kiến của GN⁺

  • Giới hạn của trình giả lập PS2: Bài viết này cho thấy một trường hợp cụ thể mà trình giả lập PS2 không hoạt động giống hệt phần cứng thật. Đây có thể là thông tin quan trọng với các nhà phát triển trình giả lập.
  • Độ phức tạp của phép toán dấu phẩy động: Phép toán dấu phẩy động có thể được hiện thực khác nhau trên từng phần cứng. Đây là yếu tố quan trọng mà các nhà phát triển phần mềm cần cân nhắc khi kiểm thử mã trên nhiều nền tảng.
  • Ứng dụng như một công cụ gỡ lỗi: Phương pháp phát hiện này có thể được dùng như một công cụ gỡ lỗi để kiểm tra độ chính xác của trình giả lập. Điều này có thể góp phần nâng cao chất lượng trình giả lập.
  • So sánh với các trình giả lập khác: Bài viết đề cập rằng không trình giả lập nào trong số PCSX2, Play!, DobieStation, hps2x64 mô phỏng chính xác vấn đề này. Đây có thể là tài liệu tham khảo quan trọng khi lựa chọn trình giả lập.
  • Khả năng cải thiện trong tương lai: Nếu nghiên cứu và phát triển để giải quyết vấn đề này tiếp tục được thúc đẩy, có thể sẽ xuất hiện những trình giả lập chính xác hơn. Điều này có thể tác động tích cực đến việc bảo tồn game và khả năng tiếp cận.

Chưa có bình luận nào.

Chưa có bình luận nào.