Имеет ли в ядре Linux собственный контекст SSE/AVX?

Есть ли в ядре Linux собственный контекст SSE/AVX?

Я имею в виду, с точки зрения модуля ядра, могу ли я использовать инструкции SSE/AVX, не беспокоясь о приложениях пользовательского пространства, которые могут его использовать? Или мне нужно использовать некоторые блокировки или вручную сохранить контекст?

Ответ 1

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

Раздел 6.3 http://agner.org/optimize/calling_conventions.pdf очень хорошо описывает использование векторных регистров в режиме ядра, как в Windows, так и в Linux. Вот одна важная цитата:

Драйвер устройства, который должен использовать векторные регистры, должен сначала сохранить эти регистры, вызывая функцию kernel_fpu_begin() и восстанавливая регистры, вызывая kernel_fpu_end() перед возвратом или спать.

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