gpt4 book ai didi

gcc - 使用GCC编译用于Linux设备驱动程序的Intel AVX内置指令

转载 作者:行者123 更新时间:2023-12-03 21:59:44 28 4
gpt4 key购买 nike

我在corei7的ubuntu上运行gcc版本4.8.2。

从Google搜索中找到有关AVX内在函数的信息,但是我不确定这组内在函数是否可以用于Linux设备驱动程序并进行编译。

如果可以的话,这里的任何人都可以告诉我,makefile的正确设置是什么,以及要使用gcc编译此avx的c源文件中应包含哪些头文件?

谢谢。

最佳答案

使用这些标题

包括<asm/i387.h> / *用于kernel_fpu_begin()和kernel_fpu_end()* /

包括


使用这个标志

-march=corei7-avx

您应该通过使用CPUID指令确保CPU支持AVX。 https://elixir.bootlin.com/linux/latest/source/lib/raid6/x86.hhhttps://elixir.bootlin.com/linux/latest/source/arch/x86/include/asm/cpufeature.h的示例
https://elixir.bootlin.com/linux/latest/source/lib/raid6/avx2.c是使用AVX的设备驱动程序的一个示例。请注意,他们选择使用内联汇编程序而不是内部函数,我看不出内部函数在用于内核的代码中不起作用的原因。
您将需要在使用前保存AVX寄存器,并在完成后还原它们。参见 Agner Fog's Calling Conventions document,引用相关段落:

Linux下的设备驱动程序
Linux系统使用浮点寄存器和向量的惰性保存
寄存器。这意味着这些寄存器不会保存和恢复
在每个任务开关上。相反,它们会在第一个保存/恢复
任务切换后访问。
如果不超过一个线程使用这些方法,此方法可以节省时间
寄存器。内核模式不支持惰性保存方案。任何
尝试不当使用这些寄存器的设备驱动程序将
导致可能会使系统崩溃的异常。一个装置
需要使用向量寄存器的驱动程序必须首先保存这些
通过调用函数kernel_fpu_begin()进行注册并还原
通过在返回之前调用kernel_fpu_end()来注册寄存器,或者
睡眠。这些功能还可以防止抢先中断
设备驱动程序,否则可能会破坏寄存器。
kernel_fpu_begin()保存所有浮点寄存器和向量寄存器(如果可用)。

您会发现 Intel Intrinsics Guide必不可少。
有关gcc标志的更多信息,请参见 Intel Core i7 AVX GCC Compiler Tuning Results

关于gcc - 使用GCC编译用于Linux设备驱动程序的Intel AVX内置指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29240450/

28 4 0
文章推荐: c# - 将 C# Type 转换为 type 数组的类型
文章推荐: jquery - Bootstrap 4.3.1 弹出窗口不显示弹出窗口内容内的表格
文章推荐: jquery - 如何使用 jQuery 添加和删除
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com