Linux内核是否具有自己的SSE/AVX上下文?

14

Linux内核有自己的SSE/AVX上下文吗?

我的意思是,从一个内核模块的角度来看,我是否可以使用SSE/AVX指令而不必担心可能也使用它的用户空间应用程序?或者我需要使用一些锁定或手动保存上下文?


1
为什么会有关闭投票呢?这似乎是一个有效且有用的问题。 - Paul R
可能是重复问题:https://dev59.com/-1fUa4cB1Zd3GeqPL9_a。特别是请查看该问题答案中链接的资源:http://www.agner.org/optimize/calling_conventions.pdf的第6.3节。 - Peter
各位,我想知道是否可以从LKM中使用AVX指令。那些链接中没有一个告诉我这一点。而且我也不需要调用约定。 - Ilya Matveychikov
1
你没有读文档吗?它说:“需要使用向量寄存器的设备驱动程序必须通过调用函数kernel_fpu_begin()保存这些寄存器,并在返回或休眠之前通过调用kernel_fpu_end()恢复这些寄存器。”还有更多内容,比如在中断上下文中根本不能使用它们。简短回答:是的,你可以使用。长答案:但有限制。请阅读文档! - Peter
@Peter 那将是一个完全可以接受的答案。 - CL.
@CL 谢谢,我刚刚把评论稍微扩展成了一个答案。 - Peter
1个回答

15

Linux内核默认不保存FPU或向量寄存器,以提高上下文切换的速度。但在某些情况下可以利用它们。

http://agner.org/optimize/calling_conventions.pdf的第6.3节中,非常好地描述了Windows和Linux内核模式下使用向量寄存器的方法。以下是一个重要的引用:

需要使用向量寄存器的设备驱动程序必须先调用函数kernel_fpu_begin()来保存这些寄存器,并在返回或休眠之前通过调用kernel_fpu_end()来恢复寄存器。

还有更多内容,比如在中断上下文中根本无法使用它们,因此建议阅读整个章节。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接