Tôi đang xem một số mã hơi bối rối đã cố gắng trừu tượng hóa nền tảng của các lệnh tìm nạp trước. Dường như nó dựa trên ngữ nghĩa powerpc ban đầu, với Read và Write các biến thể tìm nạp trước bằng cách sử dụng dcbt và dcbtst tương ứng (cả hai đều truyền TH = 0 trong opcode dòng tùy chọn mới).Tìm kiếm các hướng tương đương tốt nhất của các hướng dẫn tìm nạp trước cho ia32, ia64, amd64 và powerpc
Trên nền tảng ia64 chúng tôi đã có để đọc:
__lfetch(__lfhint_nt1, pTouch)
wherease để ghi:
__lfetch_excl(__lfhint_nt1, pTouch)
này (đọc vs viết tìm nạp trước) xuất hiện để phù hợp với ngữ nghĩa powerpc khá tốt (với ngoại lệ là ia64 cho phép gợi ý tạm thời).
Hơi tò mò mã ia32/amd64 trong câu hỏi được sử dụng
prefetchnta
Không
prefetchnt1
như nó sẽ nếu mã mà là để phù hợp với việc triển khai ia64 (#ifdef biến thể của một trong mã của chúng tôi cho (vẫn còn sống) hpipf cổng của chúng tôi và bây giờ của chúng tôi đã chết cửa sổ và linux ia64 cổng).
Vì chúng ta đang xây dựng với trình biên dịch intel tôi sẽ có thể nhiều ia32/nền tảng amd64 của chúng tôi phù hợp bằng cách chuyển sang builtins xmmintrin.h:
_mm_prefetch((char *)pTouch, _MM_HINT_NTA)
_mm_prefetch((char *)pTouch, _MM_HINT_T1)
... cung cấp tôi có thể tìm ra những gì gợi ý tạm thời nên được sử dụng.
Câu hỏi:
Có đọc vs hướng dẫn ghi ia32/amd64 prefetch? Tôi không thấy bất kỳ tham chiếu nào trong bộ tham chiếu.
Một trong các biến thể thời gian nt1, nt2, nta có được ưa thích hơn để đọc trước khi viết trước không?
Bất kỳ ý tưởng nào nếu có lý do chính đáng để sử dụng gợi ý thời gian NTA trên ia32/amd64, nhưng T1 trên ia64?
ARM, PowerPC và một số hệ thống khác cần trợ giúp của lập trình viên trong việc tìm nạp trước dữ liệu. Thật khó để đánh bại logic tìm nạp trước của Intel trên các CPU x86. Bạn sẽ thường làm mọi thứ tồi tệ hơn bằng cách cố gắng thực hiện nó theo cách thủ công. – BitBank