2012-10-27 23 views
7

Một sự thay đổi có thể tạo ra một quầy đăng ký một phần (hoặc đăng ký tái tổ hợp eryops) trên ecx? Nếu có, trên kiến ​​trúc vi mô nào?Có thể thay đổi bằng cách sử dụng kết quả đăng ký CL trong một quầy đăng ký một phần không?

Tôi đã thử nghiệm điều này trên Core2 (65nm), dường như chỉ đọc cl.

_shiftbench: 
    push rbx 
    mov edx, -10000000 
    mov ecx, 5 
    _shiftloop: 
    mov bl, 5 ; replace by cl to see possible recombining 
    shl eax, cl 
    add edx, 1 
    jnz _shiftloop 
    pop rbx 
    ret 

Thay mov bl, 5 bởi mov cl, 5 đã có sự khác biệt, mà nó sẽ có nếu có đăng ký tái hợp xảy ra, như thể được chứng minh bằng cách thay thế shl eax, cl bởi add eax, ecx (trong các thử nghiệm của tôi phiên bản với add trải qua một sự suy giảm 2.8x khi ghi vào cl thay vì bl).


Kết quả thử nghiệm:

  • Merom: không có gian hàng quan sát
  • Penryn: không có gian hàng quan sát
  • Nehalem: không có gian hàng quan sát

Cập nhật: mới shrx -group thay đổi trong Haswell không cho biết gian hàng đó. Đối số đếm thay đổi không được viết như một thanh ghi 8bit, do đó có thể được mong đợi, nhưng biểu diễn văn bản thực sự không nói bất cứ điều gì về các chi tiết kiến ​​trúc vi mô đó.

+1

Không có opcode nào cho 'shl' bởi' ecx'. Tại sao bạn nghĩ có? – interjay

+1

@interjay nó là một từ đồng nghĩa, một số trình biên dịch cho phép biểu mẫu đó. – harold

+2

Nếu đó là một từ đồng nghĩa, bạn mong đợi nó có tác dụng khác như thế nào? – interjay

Trả lời

4

Hiện tại, câu hỏi có chứa câu trả lời riêng: với bộ vi xử lý hiện đại, không bao giờ có một quầy đăng ký một phần trên CL vì CL không bao giờ được kết hợp lại từ thứ gì đó nhỏ hơn .

Có, bộ xử lý biết rằng số tiền bạn đang dịch chuyển có hiệu quả trong CL, các bit 5 hoặc 6 ít quan trọng nhất của CL phải chính xác. Một cách mà nó có thể bị đình trệ trên ECX là nếu mức độ chi tiết mà tại đó nó được coi là phụ thuộc chỉ dẫn đã không đi bên dưới thanh ghi đầy đủ. Tuy nhiên, sự lo lắng này đã lỗi thời: bộ vi xử lý mới nhất của Intel có thể xem xét toàn bộ đăng ký ECX là sự phụ thuộc là Pentium 4. Xem Agner Fog's unofficial optimization manual, trang 121. Nhưng sau đó một lần nữa, với P4 nó sẽ không được gọi là quầy đăng ký một phần , chương trình chỉ có thể là nạn nhân của một sự phụ thuộc sai (nói, nếu CH đã được sửa đổi ngay trước khi sự thay đổi).

+0

Cảm ơn. Thật không may bởi bây giờ tôi đã tìm ra cả câu trả lời và đây là câu hỏi tồi tệ nhất mà tôi từng hỏi. Oh well .. – harold

+2

@harold Đừng đánh bại bản thân, bạn đã đến StackOverflow sau khi đã thực hiện một số nỗ lực để tự đánh giá câu trả lời theo kinh nghiệm, và thậm chí bạn đã kiểm tra xem các biện pháp của bạn có ý nghĩa hay không bằng cách hoán đổi trong một hướng dẫn được biết là gây ra một quầy đăng ký một phần. Câu hỏi của bạn là một bổ sung tốt đẹp cho trang web nếu chỉ cho phương pháp luận. –

Các vấn đề liên quan