Linux内核有自己的SSE/AVX上下文吗?
我的意思是,从一个内核模块的角度来看,我是否可以使用SSE/AVX指令而不必担心可能也使用它的用户空间应用程序?或者我需要使用一些锁定或手动保存上下文?
Linux内核有自己的SSE/AVX上下文吗?
我的意思是,从一个内核模块的角度来看,我是否可以使用SSE/AVX指令而不必担心可能也使用它的用户空间应用程序?或者我需要使用一些锁定或手动保存上下文?
Linux内核默认不保存FPU或向量寄存器,以提高上下文切换的速度。但在某些情况下可以利用它们。
在http://agner.org/optimize/calling_conventions.pdf的第6.3节中,非常好地描述了Windows和Linux内核模式下使用向量寄存器的方法。以下是一个重要的引用:
需要使用向量寄存器的设备驱动程序必须先调用函数kernel_fpu_begin()来保存这些寄存器,并在返回或休眠之前通过调用kernel_fpu_end()来恢复寄存器。
还有更多内容,比如在中断上下文中根本无法使用它们,因此建议阅读整个章节。
kernel_fpu_begin()
保存这些寄存器,并在返回或休眠之前通过调用kernel_fpu_end()
恢复这些寄存器。”还有更多内容,比如在中断上下文中根本不能使用它们。简短回答:是的,你可以使用。长答案:但有限制。请阅读文档! - Peter