#multithreading #performance #intel #simd
#многопоточность #Производительность #intel #simd
Вопрос:
Мне было интересно выполнить проект по распознаванию лиц (чтобы использовать набор инструкций SIMD). Но в течение первого семестра текущего года я кое-что узнал о потоках, и мне было интересно, смогу ли я их объединить.
Когда мне следует избегать комбинирования инструкций многопоточности и SIMD? Когда стоит это делать?
Комментарии:
1. С несколькими ядрами это того стоит.
2. Да, я забыл упомянуть об этом. Вы правы
Ответ №1:
Сохранение регистров x87 / MMX / XMM / YMM может занять довольно много времени и вызвать значительную перегрузку кэша. Обычно сохранение и восстановление состояния FP выполняется ленивым способом: при переключении контекста ядро запоминает текущий поток как «владельца» состояния FP и устанавливает флаг TS в CR0 и — это приведет к блокировке ядра всякий раз, когда поток пытается выполнить FP insn. Состояние FP старого потока и состояние FP текущего выполняющегося потока сохраняются и восстанавливаются, соответственно, в это время.
Теперь, если в течение длительных периодов времени (несколько или много переключений контекста) ни один другой поток, кроме вашего, не использует FP insns — отложенная политика не приведет к сохранению / восстановлению состояния FP вообще, и вы не получите снижения производительности.
Поскольку мы, очевидно, говорим о многопроцессорной системе, потоки, которые выполняют ваш алгоритм параллельно, не будут конфликтовать друг с другом, потому что они должны выполняться на своем собственном CPU / core / HT и иметь частный набор регистров.
tl; dr
Вас не должны беспокоить накладные расходы на сохранение и восстановление регистров FP.
Ответ №2:
Как вы думаете, почему возникла бы проблема? Регистры SIMD будут заменены, как и любые другие регистры процессора, когда происходит смена потока.
Комментарии:
1. Я предположил, что для сохранения регистров XMMS потребовалось много времени. Или были проблемы с кэшем
Ответ №3:
С многопоточностью и SIMD нет никаких новых проблем, о которых стоило бы беспокоиться. Пока вы выполняете SIMD правильно и эффективно, вам не о чем беспокоиться.
Это означает, что SIMD имеет свои собственные проблемы с реализацией, как и многопоточность. Но их объединение не сделает ни то, ни другое более сложным.