用于 GNU C++ 的 SSE SSE2 和 SSE3 [关闭]

2024-06-28

有没有一个简单的教程可以帮助我快速掌握 GNU C++ 中的 SSE、SSE2 和 SSE3?如何在SSE中进行代码优化?


抱歉不知道有教程。

您最好的选择(恕我直言)是通过英特尔提供的“内在”函数来使用 SSE 来包装(通常)单个 SSE 指令。 这些可以通过一组名为 *mmintrin.h 的包含文件来获得,例如 xmmintrin.h 是原始的 SSE 指令集。

开始熟悉Intel优化的内容参考手册 https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-optimization-manual.pdf是一个好主意(有关内在函数的示例,请参阅第 4.3.1.2 节),SIMD 部分是必读内容。指令集参考手册也非常有用,因为每个指令的文档都包含它对应的“内在”函数。

Do花一些时间从内在函数检查编译器生成的汇编程序(您将学到很多东西)和分析/性能测量(您将避免浪费时间 SSE 代码而几乎没有回报)。

2011年5月31日更新:Agner Fog 的书中对内在函数和矢量化有一些非常好的介绍优化 PDF http://agner.org/optimize/ (thanks https://stackoverflow.com/questions/695222/code-optimization-bibles/695293#695293)虽然它有点分散(例如第 12 节第一 http://agner.org/optimize/optimizing_cpp.pdf和第 5 条第二个 http://agner.org/optimize/optimizing_assembly.pdf)。这些并不完全是教程材料(事实上,有一个“这些手册不适合初学者”的警告),但它们确实正确地将 SIMD(无论是通过 asm、内在函数还是编译器矢量化使用)视为更大的优化工具箱的一部分。

2012年10月4日更新: A 不错的 Linux 期刊小文章 http://www.linuxjournal.com/content/introduction-gcc-compiler-intrinsics-vector-processing这里值得一提的是 gcc 向量内在函数。比 SSE 更通用(也涵盖 PPC 和 ARM 扩展)。网上有很多很好的参考资料最后一页 http://www.linuxjournal.com/content/introduction-gcc-compiler-intrinsics-vector-processing?page=0,4,这引起了我对英特尔的关注《内在指南》 https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于 GNU C++ 的 SSE SSE2 和 SSE3 [关闭] 的相关文章

随机推荐

  • 根据现有值更改 dataGridView 中的值

    我正在重新制作我的客户拥有的应用程序 这意味着我没有创建原始应用程序 其中一个请求是简化 dataGridView 之一中显示的数据 数据是从现有数据库中提取的 问题在于 在该显示器使用的数据表中 其中一列代表某种产品的一种使用类型 并由普
  • LaTeX 使用 hyperref 包和 natbib 更改文本引用的颜色

    我正在使用natbib https www ctan org pkg natbib and hyperref https www ctan org pkg hyperref我的 LaTeX 文档中包含了一些软件包 并且希望将超引用引文周围的
  • 为什么使用 MultiByteToWideCharArray 将 std::string 转换为 std::wstring?

    我想将 std string 转换为 std wstring 我遇到过两种方法 给定一个字符串 str 我们无法使用以下代码将其转换为宽字符串 wstring Widestring std wstring str begin str end
  • 根据多列删除重复项

    我使用以下内容列出了重复项 select s MessageId t from Message s join select ToUserId FromUserId count as qty from Message group by ToU
  • 如果我们不生成窗口,为什么定时器不起作用?

    这是代码 import java awt event ActionEvent import java awt event ActionListener import javax swing JFrame import javax swing
  • 在 django admin 中将 json 文本显示为友好列表

    我有一个 JSONField http djangosnippets org snippets 1478 http djangosnippets org snippets 1478 在模型中 我试图找出向管理员用户显示数据而不是 json
  • 如何从 JobDSL 脚本中访问 Jenkins 作业参数列表?

    我想保存传递到 JobDSL 作业的参数 我知道我可以引用各个参数 但我想让代码通用 我如何访问传递给作业的参数列表 当前的代码看起来像这样 final jobParameters new File parameters jobParame
  • 部署到 Heroku 时找不到“site”模块

    我正在尝试将 django 应用程序部署到 Heroku 但我不断收到错误 ImportError no module named site 我正在使用来自的自定义构建包https github com jiaaro heroku buil
  • 如何针对 Mac OS X 10.5 进行编译

    我想编译 10 5 及更高版本的应用程序 自从我升级到 Snow Leopard 并安装了最新的 XCode 后 gcc 默认为 10 6 我试过了 isysroot Developer SDKs MacOSX10 5 sdk但这似乎不起作
  • 使用 htaccess 禁用目录浏览

    在我的服务器中我有一系列文件夹 我会拒绝对所有这些文件夹的访问 我能怎么做 我必须使用什么规则 在 htaccess 根目录中添加一行 deny from all 问题 如果您想保留自己的访问权限 allow from 192 168 1
  • PrimeFaces 3.0.M3 单元编辑器不更新值

    我读过了there https stackoverflow com questions 6365877 cell edit in primefaces is not updating the value 6487361 6487361 但我
  • div 宽度,单位:厘米(英寸)

    我需要在每个显示器中放入宽度为 25 厘米 10 英寸 的站点 div 我怎样才能做到呢 您可以简单地使用cmCSS 中的单位 mydiv width 25cm 请注意 正如其他人指出的那样 结果仍然取决于操作系统对显示器尺寸的正确读取 S
  • 剥掉所有的身体标签而不毁掉他们的孩子

    此 Ruby 代码使用Nokogiri http nokogiri org doc xpath tbody remove 删除 的子项 tbody 以及 tbody 他们自己 我只想删除所有 tbody 文档中的标签 将其子项留在原处 我怎
  • HTML输入日期,如何减少日期和图标之间的间距?

    我需要压缩输入类型日期 所以我尝试将宽度设置为 120px 问题是有一个space日期数字和输入日期图标之间 我需要减少或删除该空间 有没有办法做到这一点 我的代码 顺便说一句 我正在使用 bootstrap 4
  • 你可以在 Android 中有意打开多个文件吗?

    我正在尝试在 Android Studio 中编写一个应用程序来打开多个音乐文件并存储它们的路径 目前我所做的只是一次加载一个文件 这不会出现任何问题 例如 下面的代码显示了我的加载按钮的 onclicklister 和相关代码 本示例的一
  • Java字符串对象的创建

    我一直在阅读 Java String 对象 并且有这个问题 String x a String y b 它在Java中创建两个对象吗 这两行代码不会创建任何对象 字符串文字 例如 a 被放入字符串池 https stackoverflow
  • enableHiveSupport 在 java Spark 代码中引发错误[重复]

    这个问题在这里已经有答案了 我有一个非常简单的应用程序 尝试使用 Spark 从 src main resources 读取 orc 文件 我不断收到此错误 无法实例化具有 Hive 支持的 SparkSession 因为找不到 Hive
  • 通过绑定启用 TabItem

    我想在不同页面是 TabItem 的应用程序中使用 MVVM 为此 我使用视图模型 项目 的可观察集合并将其绑定到选项卡控件 ItemSource 对于每个视图模型 我创建了一个单独的数据模板来呈现正确的视图 如下所示
  • 如何用惰性传播实现线段树?

    我在互联网上搜索了有关线段树的实现的信息 但在惰性传播方面却一无所获 之前有一些关于堆栈溢出的问题 但它们专注于解决 SPOJ 的一些特定问题 虽然我认为这是用伪代码对线段树的最好解释 但我需要用惰性传播来实现它 我发现以下链接 除了上面的
  • 用于 GNU C++ 的 SSE SSE2 和 SSE3 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一个简单的教程可以帮助我快速掌握 GNU C 中的 SSE SSE2 和 SSE3 如何在SSE中