Ngữ nghĩa độ trễ của các thanh ghi đọc trên x86 ASM


1

Mỗi A. Sương mù bảng hướng dẫn , một cây cầu Ivy có độ trễ 3 chu kỳ trên một lệnh MOV.

Vì vậy, sau đây sẽ mất 3 chu kỳ để chuyển RAX vào địa chỉ trong RCX:

  mov               [rcx], rax

Câu hỏi của tôi là, điều này có nghĩa là RAX, đang được đọc, không thể được sửa đổi cho 2 đồng hồ tiếp theo? Cụ thể, điều sau đây sẽ gây ra sự chậm trễ thực thi:

  mov               [rcx], rax
  inc               rax

Câu trả lời:


1

Tóm lại, vâng. Điều đó sẽ khiến bộ xử lý bị đình trệ trong khi nó chờ lệnh đó hoàn thành và dữ liệu sẽ có sẵn trước khi có thể chạy lệnh tiếp theo. Không có cách nào để dễ dàng dự đoán dữ liệu nào sẽ đến và vì vậy inc hướng dẫn đơn giản là không thể chạy cho đến khi mov hoàn tất.

Đó có thể không phải là một vấn đề lớn mặc dù bộ xử lý có thể có khả năng lên lịch các hướng dẫn không phụ thuộc vào kết quả của điều đó mov hướng dẫn để giữ cho lõi hoạt động.

Điều này được gọi là Thực hiện không theo thứ tự và nó có thể giúp giảm thiểu chi phí của các quầy xử lý khi chờ các hướng dẫn dài như những hướng dẫn này.


Làm rõ thêm ...

Tôi nên đọc ví dụ của bạn tốt hơn, tôi không tin rằng mov [rcx], rax hướng dẫn sẽ gây ra một gian hàng trên inc rax hướng dẫn, nhưng sẽ gây ra bất cứ điều gì phụ thuộc vào rcx để gian hàng

Trang bạn đã liên kết liệt kê thông lượng qua lại, theo đó có thể ban hành một hướng dẫn khác thuộc loại đó. Cụ thể tôi sẽ giả sử trong khoảng thời gian đó bất kì hướng dẫn với các phụ thuộc tương tự có thể được ban hành.

Vì vậy, tôi cho rằng thanh ghi RAX là một trong hai đổi tên khi lệnh được gửi để thực thi hoặc được mã hóa trong u-op cho lệnh. Lệnh tiếp theo có thể hoạt động trên thanh ghi đó miễn là nó không phụ thuộc vào kết quả của thao tác trước đó được lưu trữ trong mà đăng ký.

Vì vậy, trong câu hỏi của bạn ví dụ những gì tôi tin Nên xảy ra là CPU thực sự có hai lệnh mà phụ thuộc duy nhất là giá trị hiện tại của thanh ghi RAX và giá trị trong nó chỉ được sửa đổi bởi lệnh thứ hai. Hướng dẫn đầu tiên nên được gửi đi và thực hiện gần như ngay lập tức có thể bắt đầu vào lần thứ hai ( inc ) chỉ dẫn.


Tôi cho rằng trong {Movq xmm1, [r10 + rax * 8]} RAX cũng sẽ được gắn trong 3 chu kỳ, hoặc điều này sẽ khác vì RAX sẽ được sử dụng trong chu kỳ 1 để xác định địa chỉ và 2 chu kỳ tiếp theo tìm nạp & amp; cửa hàng?
IamIC

2
@IanC Tôi nghĩ tôi thấy bạn đang đi đâu. Liệu RAX có bị trói hay không (và do đó giữ vững inc ) cho toàn bộ thời gian là không thể biết được nếu không có một số kiến ​​thức kiến ​​trúc khá cụ thể mà tôi không có. Bộ điều phối có thể dễ dàng mã hóa giá trị được lưu trữ trong RAX trong u-op cho movq hướng dẫn và do đó giải phóng đăng ký cho (gần) sử dụng ngay lập tức bởi inc. Trang này cũng liệt kê reciprocal throughput theo đó một hướng dẫn khác thuộc loại đó có thể được ban hành và tôi sẽ giả sử trong cùng thời gian đó một hướng dẫn có phụ thuộc tương tự có thể được ban hành.
Mokubai

Đó chắc chắn là một câu hỏi khó. Mối quan hệ giữa độ trễ và thông lượng qua lại rất phức tạp. Tại thời điểm này, tôi muốn nói thử nghiệm là cách duy nhất để thực sự biết. Nhưng kiểm tra một cái gì đó mức độ thấp này có khả năng là không thành công.
IamIC

@IanC như bạn nói nó không chính xác để tìm hiểu, có rất nhiều tính năng rất tiên tiến khi chơi sẽ xác định xem lệnh có chặn thực thi thêm hay không và trong bao lâu. Tôi đã chỉnh sửa câu trả lời của mình để phản ánh những gì tôi tin là kết quả hợp lý nhất, nhưng ví dụ duy nhất tôi có thể tìm thấy về vấn đề này liên quan đến các thao tác trên các thanh ghi có tên khác nhau, không phải hai hướng dẫn chỉ dựa vào trạng thái hiện tại của thanh ghi.
Mokubai
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.