Я нуждаюсь в высокопроизводительном слиянии и наступил: Эффективная реализация сортировки по многоядерной архитектуре процессора SIMD от Jatin Chhugani et al.Может ли несколько процессов скрывать латентность инструкций SSE?
Их цель - получить максимальную отдачу от 1 процессора, одна часть их решения - использовать битоновую сортировочную сеть на уровне SIMD. Чтобы скрыть латентность операций min/max и shuffle, они выполняют 4 сортировочные сети одновременно (хотя, я думаю, они подразумевают чередование). Это приводит к заявленному увеличению производительности на 3,25 раза.
Моя проблема несколько смягчена, у меня есть несколько пар массивов, которые необходимо обрабатывать (читать независимо), поэтому я могу просто запустить несколько процессов и, таким образом, легко получить более высокую пропускную способность.
Хотя, если я переписываю количество процессов на доступные ядра, это также скрывает латентность? но на более высоком уровне? Или мы наступаем здесь в сфере гиперпотоков, и я никогда не пройду предел двух процессов, разделяющих одни и те же функциональные блоки в ядре процессора?
Я мог бы, конечно, попробовать, но изменение существующего кода довольно сложно, и я хотел бы сначала услышать теории.
Непонятно, в чем ваш вопрос. Что касается гипертекста, это метод повышения эффективности ILP одного ядра. Если вы не оптимизируете свой код, то гиперпоточность может улучшить ILP. Но если вы оптимизируете так, чтобы вы получали как можно больше ILP, то гипер-стук будет ухудшать производительность. На практике большинство кодов не оптимизировано для получения максимальной ILP, поэтому во многих случаях помогает гипертекстовая обработка. –