如何确定SSE预取指令大小?

2024-01-11

我正在使用包含 SSE 预取指令的内联汇编的代码。预处理器常量确定是否使用 32、64 或 128 字节预取的指令。该应用程序在多种平台上使用,到目前为止,我必须在每种情况下调查对于给定 CPU 来说哪一个是最佳选择。据我所知,这是缓存行大小。这些信息可以自动获取吗?它似乎没有明确存在于 /proc/cpuinfo 中。


我认为你的问题与此相关question https://stackoverflow.com/questions/794632/programmatically-get-the-cache-line-size or this https://stackoverflow.com/questions/150294/how-to-programmatically-get-the-cpu-cache-page-size-in-c一。我认为很明显 - 除非您可以依赖操作系统或库函数 - 您将需要使用 CPUID 指令,但问题就变成了您正在寻找什么信息。 - 当然,AMD 和 Intel 的实现不需要达成一致。这page http://softpixel.com/~cwright/programming/simd/cpuid.php建议在 Intel 上使用 Cpuid.1.EBX[15:8](即 BH)进行查找,在 AMD 上使用函数 80000005h。另外,在Intel上,CPUID.2...似乎包含相关信息,但解析出所需信息看起来确实很痛苦。

我认为,据我所知,AMD 和 Intel CPUID 指令都支持CPUID.1.EBX[15:8],它返回 CLFLUSH 指令使用的 QUADWORD 中的一个缓存行的大小(并非所有处理器上都存在,所以我不知道您是否总能在那里找到一些东西)。因此,执行 CPUID.1 后,您必须将 BH 乘以 8 才能获得缓存行大小(以字节为单位)。这取决于我的隐含假设(请问谁能说它是否真的有效?),即对于 CFLUSH 和 PREFETCHh 指令,一个缓存行大小的定义始终相同。

另外,英特尔的manuals http://www.intel.com/Assets/PDF/manual/253667.pdf指出 PREFETCHh 只是一个提示,但是,如果它预取任何内容,它将始终是一个最小 32 字节.

编辑1: 对于优化使用 PREFETCHh 的另一个有用资源(即使没有直接回答您的问题)是英特尔的优化手册here http://www.intel.com/Assets/PDF/manual/248966.pdf.

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

如何确定SSE预取指令大小? 的相关文章

  • 在 Linux 上以编程方式获取准确的 CPU 缓存层次结构信息

    我试图获得 Linux 上当前 CPU 的数据缓存层次结构的准确描述 不仅是各个 L1 L2 L3 可能还有 L4 数据缓存的大小 还包括它们在不同系统之间分割或共享的方式核心 例如 在我的 CPU AMD Ryzen Threadripp
  • 如何将数据直接写入显存?

    程序员有什么办法可以直接将数据写入显存吗 我知道操作系统对此非常严格 但是某些类型的应用程序 例如视频播放器或电脑游戏 如何将其数据直接写入视频内存 我知道有很多知名的库 例如 OpenGL 但它们毕竟只是普通的库 它们和我和你写的程序没有
  • L2 逐出时从 L1 缓存逐出缓存

    我有一个关于内存系统遵循的策略的基本问题 考虑具有私有 L1 和 L2 缓存的核心 在二级缓存之后 我们有一个总线 一致性流量在该总线上运行 现在 如果地址 X 的缓存线从二级缓存中逐出 是否有必要从一级缓存中逐出该地址 驱逐的原因可能是它
  • Skylake 中干净缓存行的写回?

    我观察到 Skylake SP 在真实硬件上对干净的缓存行进行写回 Leeor 对这篇文章的回答对于 Intel Core i3 i7 数据从缓存集中逐出后的去向 https stackoverflow com questions 1941
  • 高效的 4x4 矩阵乘法(C 与汇编)

    我正在寻找一种更快 更棘手的方法来用 C 语言将两个 4x4 矩阵相乘 我目前的研究重点是具有 SIMD 扩展的 x86 64 汇编 到目前为止 我已经创建了一个比简单的 C 实现快大约 6 倍的函数 这超出了我对性能改进的预期 不幸的是
  • 为什么64位cpu不存在高端内存?

    当我试图了解 32 位 cpu 和 Linux 的高内存问题时 为什么没有高内存问题 https en wikipedia org wiki High memory对于64位CPU 特别是 虚拟内存分为内核空间和用户空间的划分是如何改变的
  • “机器硬件”和“硬件平台”的区别

    我的 Linux 机器报告 uname a 输出如下 root tom i386 uname a Linux tom 2 6 9 89 ELsmp 1 SMP Mon Apr 20 10 34 33 EDT 2009 i686 i686 i
  • 可以直接使用程序集访问缓存吗?

    就效率而言 缓存是一个核心问题 我知道缓存通常会自动发生 但是 我想自己控制缓存的使用 因为我认为我可以比一些不知道确切程序的启发式方法做得更好 因此 我需要汇编指令来直接移入或移出高速缓存单元 like movL1 address con
  • 查看x86架构中的cpu缓存内容

    如何查看或转储基于 x86 的架构的 cpu 缓存内容 每次进行缓存刷新时 我如何才能看到刷新了什么 在哪里 你不能 真的 CPU 缓存被设计为对于 CPU 上运行的代码是透明的 它具有加快代码执行速度的效果 但 CPU 管理有关缓存的所有
  • 手臂“版本”之间的差异? (仅限 ARMv7)

    基本上我想知道ARMv7l和ARMv7之间的区别hl 我有一个带有armv7l的arm处理器 并且有很多armv7的rpmhl 我完全不知道我必须搜索什么才能获得相关信息 这个 后缀 叫什么 还有其他类型吗 他们的做法有何不同 我假设它指示
  • 有没有好的 x86 双精度小矩阵 SIMD 库?

    我正在寻找一个专注于图形小型 4x4 矩阵运算的 SIMD 库 那里有很多单精度 但我需要支持单精度和双精度 我看过 Intel 的 IPP MX 库 但我更喜欢带有源代码的库 我对这些特定操作的 SSE3 实现非常感兴趣 垫4 垫4 Ma
  • 链接预取能否用于缓存 JSON API 响应以供以后的 XHR 请求使用?

    给定一个 JSON API 端点 api config 我们正在尝试使用在 HTML 文档的头部 Chrome 在点击 HTML 中的链接标签时会按预期下载数据 但大约一秒钟后通过我们的脚本中的 XHR 再次请求数据 服务器配置为允许缓存
  • C++ 错误:“_mm_sin_ps”未在此范围内声明

    我正在尝试对将函数应用于数组的不同方法进行基准测试 why is mm sin ps在我的范围内不知道但是 mm sqrt ps is 我怎样才能让它知道 并且编译没有错误 include
  • 使用 SSE/AVX 获取 __m256d 中存储的值的总和

    有没有办法获得存储在 m256d 变量中的值的总和 我有这个代码 acc mm256 add pd acc mm256 mul pd row vec acc in this point contains 2 0 8 0 18 0 32 0
  • 优化数组压缩

    假设我有一个数组k 1 2 0 0 5 4 0 我可以按如下方式计算掩码m k gt 0 1 1 0 0 1 1 0 仅使用掩码 m 和以下操作 左移 右移 And Or 加 减 乘 我可以将 k 压缩为以下形式 1 2 5 4 以下是我目
  • 预取双类成员需要转换为 char*?

    我有一个正在使用的课程 mm prefetch 预先请求包含 double 类型的类成员的缓存行 class MyClass double getDouble return dbl other members double dbl othe
  • 适用于 AVX 和 SSE 的 Visual Studio 的 cpu 调度程序

    我使用两台计算机工作 一种不支持 AVX 另一种支持 AVX 让我的代码在运行时找到我的CPU支持的指令集并选择合适的代码路径会很方便 我按照 Agner Fog 的建议制作了一个 CPU 调度程序 http www agner org o
  • 软件预取手动指令合理的场景

    我读过有关 x86 和 x86 64 Intel 的内容gcc提供特殊的预取指令 include
  • 没有 FPU 的处理器中的浮点计算

    是否可以在没有浮点单元的嵌入式处理器中执行浮点运算 是的 您只需要在软件中完成即可 你的编译器可能会提供支持 http gcc gnu org onlinedocs gccint Soft float library routines ht
  • 我们如何计算这段代码片段中缓存的读取/未命中次数?

    鉴于我目前正在学习的这本教科书中的代码片段 Randal E Bryant David R O Hallaron 计算机系统 程序员的视角 第 3 版 2016 年 Pearson 全球版 因此本书的练习可能是错误的 for i 31 i

随机推荐

  • RealmList序列化问题(Realm/Gson/Intent)

    我在项目中使用了 Retrofit Gson 和 Realm 我有这门课Example需要是Serializable 如果没有 Realm 我会这样写 public class Example implements Serializable
  • HttpWebRequest 底层连接已关闭

    我在用HttpWebRequest to POST通过网络服务的字节数组图片 图片大小类似于byte 4096 Code HttpWebRequest webRequest HttpWebRequest WebRequest Create
  • 从 JNI 调用函数指针

    我已经在 cpp 中用原型实现了一个函数 MyFunction int size int 回调 UINT16 arg1 UINT16 arg2 第二个参数是一个函数指针 必须在java中实现 我怎样才能实现该功能 另外我如何在 JNI 中调
  • 关于使用 Async 和 Await C# 进行异步编程的问题[重复]

    这个问题在这里已经有答案了 我正在学习如何使用 Async 和 Await C 所以我得到了一个链接http msdn microsoft com en us library vstudio hh191443 aspx BKMK WhatH
  • 将 Rcpp 函数扩展到任何类型的输入向量

    我有以下函数 它执行一个简单的循环NumericVector并返回int类型值 Rcpp cppFunction int calc streak NumericVector x int i1 int i2 int cur streak 1
  • 在 matplotlib 中向 3d 箭袋图添加颜色

    我想要在 3d 箭袋图中具有与颜色图相对应的颜色 绘图的 2d 版本有一个可选数组 用于将颜色映射到箭头 如何在 3d 版本中创建相同的效果 3D 箭袋图是 1 4 中的一个全新功能 它 及其文档 可能仍然有点粗糙 在这种情况下 我们可以尝
  • 将字符串列表转换为排序的映射字符串长度作为键

    我有一个List
  • 动画汉堡导航

    我正在为我的网站创建一个完整的页面导航阴影 以便它在所有设备上都相同 目前我有两个按钮 一个用于当阴影在视野中时 一个用于当阴影不在视野中时 我想知道是否让一个按钮始终存在以便可以动画化会更好 我的目标是像squeeze动画片here ht
  • 固定大小缓冲区不能直接从“this”对象使用

    我使用结构来表示纯数据 其中一个字段是固定大小的缓冲区 如下所示 StructLayout LayoutKind Sequential Pack 2 unsafe struct ImageDosHeader private fixed us
  • 如何解决部署到heroku时rails中的更新捆绑器警告?

    出现以下警告该如何解决 我将 ruby 版本更新为 2 3 1 将 Rails 版本更新为 4 2 6 当我将应用程序推送到 heroku 时 我收到此警告 remote Cleaning up the bundler cache remo
  • 在 php 数据表中添加属性以用于 google 图表自定义 html 工具提示

    我正在尝试通过将自定义 html 工具提示添加到数据表中来在我的 google 图表中创建自定义 html 工具提示 现在我的数据表正在 PHP 中创建 如下所示 datatable array cols gt array array ty
  • 如何获取事务内SELECT语句的结果?

    我无法通过 PostgreSQL 文档 网络甚至 StackOverflow 获得有关这个简单问题的信息 我一定不明白这里的一些重要内容 我正在做一个简单的SELECT UPDATEPostgreSQL 中的事务 START TRANSAC
  • 处理时间序列中的缺失值

    我正在处理时间序列数据 我需要有连续的时间戳 但在捕获时很少有数据时间戳点被遗漏 如下所示 DF ID Time Stamp A B C 1 02 02 2018 07 45 00 123 567 434 2 02 02 2018 07 4
  • OK Google 搜索操作会导致 VoiceInteraction() 始终返回 false

    In the 语音交互 API 的 Google CodeLabs 示例 http io2015codelabs appspot com codelabs voice interaction 活动是使用以下意图过滤器定义的 请参阅步骤 6
  • Perl 中 BEGIN 块的作用是什么?

    我知道 BEGIN 块是在 Perl 程序主体之前编译和执行的 如果您不确定 请尝试运行命令 perl cw ms dist perl5 bin perl5 8 use strict use warnings BEGIN print Hel
  • Microsoft Graph:使用测试版获取用户日历事件

    我正在尝试使用 Microsoft Graph beta 版本获取用户日历事件 我可以通过此请求获取日历信息 https graph microsoft com beta users user calendars calendarid 然后
  • 如何使用 XDocument 保留所有 XML 格式?

    我正在尝试读取 XML 配置文件 进行一些调整 查找并删除或添加元素 并再次保存它 我希望此编辑尽可能不具有侵入性 因为文件将受到源代码控制 并且我不希望无关紧要的更改导致合并冲突等 这大致是我所得到的 XDocument configDo
  • 设置wpf图像的图像源

    我知道有一些类似的问题 但它们对我没有帮助 有以下代码可以在代码后面显示图像 BitmapImage logo new BitmapImage logo BeginInit logo UriSource new Uri pack appli
  • PHP/Mysql 搜索 - 区分大小写

    我使用以下 PHP 和 MySql 从表中获取行 search word GET search word search word new mysql escape string search word search word fix str
  • 如何确定SSE预取指令大小?

    我正在使用包含 SSE 预取指令的内联汇编的代码 预处理器常量确定是否使用 32 64 或 128 字节预取的指令 该应用程序在多种平台上使用 到目前为止 我必须在每种情况下调查对于给定 CPU 来说哪一个是最佳选择 据我所知 这是缓存行大