2013-01-24 40 views
5

Có ai biết ERG trên bộ xử lý A5, A5X, A6 và A6X của Apple không?Exclusives Reservation Granule (ERG) trên bộ xử lý của Apple

Chúng tôi đã gặp lỗi tối nghĩa với hướng dẫn LDREX/STREX và hành vi khác nhau giữa A5 và A6. Lời giải thích duy nhất tôi có là họ có ERG khác nhau, nhưng không thể tìm thấy bất cứ điều gì về điều đó. Tôi cũng không thể tìm được cách để lấy giá trị này, lệnh MRC dường như bị cấm trong chế độ người dùng trên iOS.

Cảm ơn bạn!

+0

Trong khi câu hỏi đúng, tôi hơi hấp dẫn vì sao bạn cần biết mục đích gỡ lỗi? Kích thước của ERG không có gì khác hơn là tác động hiệu suất. Bạn có thể giải thích hành vi bạn đang thấy là gì không, và những gì bạn đang mong đợi để xem thay thế? – unixsmurf

+0

Chúng tôi gặp phải một lỗi khi trình biên dịch tạo ra một mã mà nhấn ERG khi đọc một biến độc quyền truy cập - do đó nhập một vòng lặp vô tận như STREX luôn thất bại. Lỗi này chỉ xảy ra trên các thiết bị A6X. –

+0

Ok. Nhưng mà không thấy mã bị ảnh hưởng, tôi không thể bình luận về việc bạn có thể là một lỗi phần cứng thực sự hay không, hoặc liệu bạn có là một lỗi phần mềm (tinh tế) mà bạn có thể làm việc hay không. một lần nữa trên các bộ vi xử lý khác. ERG _does_not_ ảnh hưởng đến phần mềm kiến ​​trúc chính xác trên phần cứng kiến ​​trúc đúng theo bất kỳ cách nào khác ngoài hiệu suất. – unixsmurf

Trả lời

2

Trên OMAP 4460 (ARM Cortex-A9, giống như Apple A5/A5X) ERG là 32 byte (tương tự như kích thước đường bộ nhớ cache).

Tôi không biết rằng các giá trị đó nằm trên A6/A6X (và không có cách nào để tìm ra mà không tải trình điều khiển của riêng bạn, mà bạn không thể làm trên thiết bị Apple), nhưng khách hàng của tôi là kích thước đường bộ nhớ cache tăng lên 64 byte và ERG cũng vậy.

Hoặc, bạn có thể tối ưu hóa thuật toán cho tối đa kiến ​​trúc 512 từ (2K byte).

+0

Thử nghiệm của chúng tôi cũng cho thấy rằng nó cũng là 64 byte. Điều kỳ lạ là đối với A5, thử nghiệm luôn hoạt động như thể nó hoạt động mà không có ERG. –

-1

Kích thước ERG là quan trọng cân nhắc khi sử dụng ldrex/strex.

Khi một ldrex được ban hành, nếu truy cập bộ nhớ xảy ra trong ERG trong đó ldrex đã đọc xảy ra, thì strex sẽ thất bại. Không có gì lạ khi có cấu trúc chứa mục tiêu ldrex/strex và một số dữ liệu bổ sung, trong đó dữ liệu bổ sung được truy cập giữa cặp ldrex/strex (ví dụ, để lưu trữ giá trị được tải bởi ldex).

Nếu mục tiêu ldrex/strex không có đủ đệm trong cấu trúc (nghĩa là kích thước ERG được chọn quá nhỏ), việc truy cập vào các thành viên khác của cấu trúc sẽ khiến cho LUX luôn thất bại.

Trò chơi kết thúc, tắt đèn.

Về ldrex/strex, ARM triển khai "màn hình cục bộ" và "màn hình toàn cầu". Trên các hệ thống chỉ có một màn hình cục bộ, cách duy nhất một ldrex/strex có thể thất bại là nếu hai ldrex được phát hành trên cùng một địa chỉ trước khi một strex đã được ban hành - chỉ các hệ thống có màn hình toàn cầu mới nhận thấy lưu lượng bus trong ERG của mục tiêu ldrex/strex.

Hệ thống ARM khác nhau rất nhiều và tôi nghi ngờ có các hệ thống chỉ có màn hình cục bộ và do đó không thực sự hỗ trợ ldrex/strex.

+1

Điều này không thực sự trả lời câu hỏi. –