Я работаю с кодом, который содержит встроенную сборку для инструкций предварительной выборки SSE. Константа препроцессора определяет, используются ли инструкции для 32-, 64- или 128-байтовых предварительных выборок. Приложение используется на самых разных платформах, и до сих пор мне приходилось исследовать в каждом случае, который является лучшим вариантом для данного CPU. Я понимаю, что это размер строки кэша. Доступна ли эта информация автоматически? Кажется, он явно не присутствует в/proc/cpuinfo.Как определить размер инструкции предварительной выборки SSE?
ответ
Я думаю, что ваш вопрос связан с этим question или this один. Я думаю, что ясно, что - если вы не можете полагаться на ОС или библиотечную функцию - вы захотите использовать инструкцию CPUID, но тогда вопрос станет именно той информацией, которую вы ищете. - И, конечно же, реализация AMD и Intel не должна соглашаться. Этот page предлагает использовать Cpuid.1.EBX [15: 8] (т. Е. BH) для поиска на Intel и функции 80000005h на AMD. Кроме того, на Intel, CPUID.2 ... кажется, содержит соответствующую информацию, но это выглядит как настоящая боль, чтобы разобрать нужную информацию.
Я думаю, от того, что я прочитал, как AMD и Intel инструкции CPUID будет поддерживать CPUID.1.EBX [15: 8], которая возвращает размер одной строки кэша в четверных словах, которые используются в CLFLUSH инструкция (которая отсутствует на всех процессорах, поэтому я не знаю, найдёте ли вы что-нибудь там). Итак, после выполнения CPUID.1 вам нужно будет умножить BH на 8, чтобы получить размер строки кеша в байтах. Это зависит от моего неявного предположения (пожалуйста, можете ли кто-нибудь сказать, действительно ли оно действительно?), Что определение размера одной строки кеша всегда одинаково для команд CLFLUSH и PREFETCHh.
Кроме того, Intel, manuals утверждает, что PREFETCHh только намек, но что, если он что-нибудь предварительную выборку, она всегда будет минимум 32 байт.
EDIT1: Еще один полезный ресурс (даже если он напрямую не отвечает на ваш вопрос) для оптимизированного использования PREFETCHh - это руководство по оптимизации Intel here.
- 1. Поведение инструкции предварительной выборки
- 2. Расстояние предварительной выборки и степень предварительной выборки
- 3. Как использовать логические инструкции SSE
- 4. Бенчмаркинг Инструкции SSE
- 5. SSE Инструкции: Byte + Short
- 6. Где инструкции SSE превосходят обычные инструкции
- 7. Магистраль: сборка для предварительной выборки
- 8. Функциональность предварительной выборки начальной загрузки
- 9. Логика предварительной выборки в Rx
- 10. Последовательность столбцов предварительной выборки SQLAlchemy
- 11. нахождение инструкции neon, соответствующей инструкции sse
- 12. Инструкции SSE в функции ASM
- 13. Как отключить функцию предварительной выборки Safari?
- 14. равны нулю инструкции в SSE
- 15. сочетающие OpenMP и SSE инструкции
- 16. Инструкции по предварительной выборке на ARM
- 17. данные предварительной выборки на L1 и L2
- 18. Как определить оптимальный размер выборки для запроса выбора
- 19. Выбор изображений из кеша после предварительной выборки
- 20. AngularJS - данные предварительной выборки без блокировки
- 21. Выравнивание, общий размер и SSE
- 22. Задание MongoDB для предварительной выборки памяти
- 23. Сценарий предварительной выборки кеша - архитектура мощности
- 24. Ресурсы предварительной выборки для асинхронных маршрутов
- 25. J2ME: Ошибка предварительной выборки -5. MediaException
- 26. Опция предварительной выборки Typeahead.js не работает
- 27. Предпочтение предварительной выборки не работает в django?
- 28. Создает ли страницы предварительной выборки UIWebView?
- 29. Конфигурация общей памяти для предварительной выборки
- 30. Каковы наилучшие методы предварительной выборки в backbone.js?