Может выглядеть примерно так: ARM и NEON могут работать параллельно?, но это не так, у меня есть другая проблема (может быть проблема с моим пониманием):
В стеке протоколов, пока мы вычисляем контрольную сумму, которая выполняется в GPP, я передаю эту задачу NEON как часть функции:
Вот функция контрольной суммы, которую я написал как часть NEON, размещенная в Stack Overflow: Реализация кода контрольной суммы для Neon в Intrinsics
Теперь предположим, что из Linux вызывается эта функция,
ip_csum(){
…
…
csum = do_csum(); //function call from arm
…
…
}
do_csum(){
…
…
//NEON optimised code
…
…
returns the final checksum to ip_csum/linux/ARM
}
в этом случае... что происходит с ARM, когда NEON выполняет вычисления? ARM бездействует? или он переходит с другими операциями?
как вы можете видеть, вызывается do_csum, и мы ждем этого результата (или так он выглядит)..
ПРИМЕЧАНИЕ:
- Говоря о коре-а8
- do_csum, как вы можете видеть из ссылки, закодирован с помощью встроенных функций.
- компиляция с использованием цепочки инструментов gnu
- Будет хорошо, если вы также возьмете многопоточность или любую другую концепцию, связанную или появившуюся на картинке, когда происходят эти интероперации.
Вопросы:
- ARM простаивает, пока NEON выполняет свою работу? (в данном конкретном случае)
- Или он откладывает этот текущий код, связанный с ip_csum, и приступает к другому процессу/потоку, пока NEON не будет выполнен? (я почти не понимаю, что здесь происходит)
- если он сидит без дела, как мы можем заставить ARM работать над чем-то еще, пока NEON не будет сделан?