2014-11-19 3 views
0

Я нуждаюсь в высокопроизводительном слиянии и наступил: Эффективная реализация сортировки по многоядерной архитектуре процессора SIMD от Jatin Chhugani et al.Может ли несколько процессов скрывать латентность инструкций SSE?

Их цель - получить максимальную отдачу от 1 процессора, одна часть их решения - использовать битоновую сортировочную сеть на уровне SIMD. Чтобы скрыть латентность операций min/max и shuffle, они выполняют 4 сортировочные сети одновременно (хотя, я думаю, они подразумевают чередование). Это приводит к заявленному увеличению производительности на 3,25 раза.

Моя проблема несколько смягчена, у меня есть несколько пар массивов, которые необходимо обрабатывать (читать независимо), поэтому я могу просто запустить несколько процессов и, таким образом, легко получить более высокую пропускную способность.

Хотя, если я переписываю количество процессов на доступные ядра, это также скрывает латентность? но на более высоком уровне? Или мы наступаем здесь в сфере гиперпотоков, и я никогда не пройду предел двух процессов, разделяющих одни и те же функциональные блоки в ядре процессора?

Я мог бы, конечно, попробовать, но изменение существующего кода довольно сложно, и я хотел бы сначала услышать теории.

+2

Непонятно, в чем ваш вопрос. Что касается гипертекста, это метод повышения эффективности ILP одного ядра. Если вы не оптимизируете свой код, то гиперпоточность может улучшить ILP. Но если вы оптимизируете так, чтобы вы получали как можно больше ILP, то гипер-стук будет ухудшать производительность. На практике большинство кодов не оптимизировано для получения максимальной ILP, поэтому во многих случаях помогает гипертекстовая обработка. –

ответ

2

Нет, резьба не является эффективным решением для пузырьков трубопровода. Гранулярность не подходит: Контекстное переключение занимает сотни циклов, тогда как тип стойла, вызванный наивной реализацией битной сортировки, составляет 2-4 цикла.

С учетом сказанного, неясно, какой ваш прецедент или где будет узкое место, поэтому многопроцессорность может помочь. Есть только один способ выяснить.

+0

Хорошо, ясно. Кроме того, я признаю, что я не являюсь аппаратным гуру, но позволяет ли гиперпоточность разрешать два запущенных процесса в пределах необходимой гранулярности? (зная, что он не решает мою проблему, потому что мне понадобится гиперпоточность с поддержкой 4-х контекстных движков) – hbogert

+1

Возможно, в зависимости от того, насколько агрессивным является планировщик команд. Но если сделать это не очень осторожно, любые выигрыши из сокращенных киосков будут затмеваны из-за переполнения кэша. – Sneftel

2

Я сделал несколько экспериментов с этим, и преимущество HT кажется маргинальным - с одной стороны, вы видите небольшие улучшения от скрытой латентности, но, с другой стороны, вы удваиваете давление на использование кеша и FSB (и удвоить конфликт памяти). В некоторых случаях я видел небольшой выигрыш, в других - небольшое снижение производительности - все зависит от шаблона доступа к памяти и объема кеша, но из того, что я видел, HT не очень помогает в целом.

Сказав, что могут быть случаи для кода, который не особенно хорошо оптимизирован в отношении шаблонов доступа к памяти, где HT может что-то купить, но если вы не оптимизировали использование кеша/В любом случае, иерархия памяти, скорее всего, преждевременна.

Смежные вопросы