如何预取不常用的代码?

2023-11-26

我想将一些代码预取到指令缓存中。代码路径很少使用,但我需要它位于指令缓存中,或者至少在 L2 中(在极少数情况下)。我对这些罕见的情况有一些提前通知。 _mm_prefetch 对代码有用吗?有没有办法将这些不常用的代码放入缓存中?对于这个问题,我不关心可移植性,所以即使 asm 也可以。


答案取决于您的 CPU 架构。

也就是说,如果您使用 gcc 或 clang,则可以使用__builtin_prefetch指令尝试生成预取指令。在 Pentium 3 和更高版本的 x86 类型架构上,这将生成PREFETCHh指令,请求加载到数据缓存层次结构中。由于这些架构具有统一的 L2 和更高级别的缓存,因此可能会有所帮助。

该函数如下所示:

__builtin_prefetch(const void *address, int locality);

The locality参数应在 0...3 范围内。假设locality直接映射到h的一部分PREFETCHh指令,您想要传递 1 或 2,这要求将数据加载到 L2 和更高级别的缓存中。看英特尔® 64 和 IA-32 架构软件开发人员手册 第 2B 卷:指令集参考,M-Z (PDF)第 4-277 页。 (在这里查找其他卷.)

如果您使用的另一个编译器没有__builtin_prefetch,看看是否有_mm_prefetch功能。您可能需要包含头文件才能获取该函数。例如,在 OS X 上,该函数以及常量locality参数,声明于xmmintrin.h.

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

如何预取不常用的代码? 的相关文章

  • EF Core Group By 翻译支持条件总和

    听说 EF Core 2 1 将支持翻译小组 我感到非常兴奋 我下载了预览版并开始测试它 但发现我在很多地方仍然没有得到翻译分组 在下面的代码片段中 对 TotalFlagCases 的查询将阻止翻译分组工作 无论如何 我可以重写这个以便我
  • 如何使用 C# 中的参数将用户重定向到 paypal

    如果我有像下面这样的简单表格 我可以用它来将用户重定向到 PayPal 以完成付款
  • 没有强命名的代码签名是否会让您的应用程序容易被滥用?

    尝试了解authenticode代码签名和强命名 我是否正确地认为 如果我对引用一些 dll 非强命名 的 exe 进行代码签名 恶意用户就可以替换我的 DLL 并以看似由我签名但正在运行的方式分发应用程序他们的代码 假设这是真的 那么您似
  • 按成员序列化

    我已经实现了template
  • 嵌套接口:将 IDictionary> 转换为 IDictionary>?

    我认为投射一个相当简单IDictionary
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • 用于登录 .NET 的堆栈跟踪

    我编写了一个 logger exceptionfactory 模块 它使用 System Diagnostics StackTrace 从调用方法及其声明类型中获取属性 但我注意到 如果我在 Visual Studio 之外以发布模式运行代
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • 创建链表而不将节点声明为指针

    我已经在谷歌和一些教科书上搜索了很长一段时间 我似乎无法理解为什么在构建链表时 节点需要是指针 例如 如果我有一个节点定义为 typedef struct Node int value struct Node next Node 为什么为了
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe
  • 如何序列化/反序列化自定义数据集

    我有一个 winforms 应用程序 它使用强类型的自定义数据集来保存数据进行处理 它由数据库中的数据填充 我有一个用户控件 它接受任何自定义数据集并在数据网格中显示内容 这用于测试和调试 为了使控件可重用 我将自定义数据集视为普通的 Sy
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • 为什么编译时浮点计算可能不会得到与运行时计算相同的结果?

    In the speaker mentioned Compile time floating point calculations might not have the same results as runtime calculation
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • 混合 ExecutionContext.SuppressFlow 和任务时 AsyncLocal.Value 出现意外值

    在应用程序中 由于 AsyncLocal 的错误 意外值 我遇到了奇怪的行为 尽管我抑制了执行上下文的流程 但 AsyncLocal Value 属性有时不会在新生成的任务的执行范围内重置 下面我创建了一个最小的可重现示例来演示该问题 pr
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
  • 对来自流读取器的过滤数据执行小计

    编辑问题未得到解答 我有一个基于 1 个标准的过滤输出 前 3 个数字是 110 210 或 310 给出 3 个不同的组 从流阅读器控制台 问题已编辑 因为第一个答案是我给出的具体示例的字面解决方案 我使用的实际字符串长度为 450 个

随机推荐

  • gem install therubyracer -v 0.11.4 在 OS X 10.10 上失败

    按照此处的步骤操作osx mavericks 上的 gem install therubyracer v 0 10 2 未安装 我能够正常安装 therubyracer v 0 10 2 和 0 12 0 但不能安装 0 11 4 gem
  • 如何在 Android 中同时录制 2 个麦克风?

    我试图同时记录来自 2 个内置麦克风 底部 顶部 的音频信号 我可以使用拾取底部麦克风信号 MediaRecorder AudioSource MIC 和顶部麦克风信号使用 MediaRecorder AudioSource CAMCORD
  • 如何在运行时更改 Play 2 Framework DB 配置?

    我们正在使用 Play 2 1 1 及其内置 JPA 集成 JPA em ETC 我们如何动态更改 db pass 属性 Play application configuration 似乎 从 Play 2 1 开始是不可变的 或者我们至少
  • 如何在 Windows 上从源 tarball 安装 R 包?

    The 预测包 for R已经更新到版本2 12 但目前 CRAN 上仅提供 2 11 的 Windows 二进制文件 如何安装 R 包来源在 Windows 上 我知道这是一个老问题 但它在我的谷歌搜索中首先出现在同一问题上 尽管我知道答
  • 使用ajax分页加载页面后重新初始化其他javascript函数

    抱歉 这里完全是新手 如何加载其他插件 并在加载 ajax 生成的页面后让其他单独的脚本运行 这是我当前的代码 jQuery document ready function var mainContent load content site
  • HIbernate 映射异常:PropertyNotFoundException:找不到设置器

    我有两个 POJO STOCK 和 STOCK DETAILS 一对多关系 我还有一个接口 IAUDITLOG 有两种方法 我需要用两个 POJO 来实现这个接口 并且想在这些方法中编写一些实现 但是 当我使用子类 STOCKDETAILS
  • 将php数组插入mysql

    我有一个数组 product array 当我使用 print r product array 时 数组显示如下 Array 0 gt Array ID gt P00100 NAME gt Edina PRICE gt 20 00 1 gt
  • SQLAlchemy 联合括号问题

    我需要生成类似于以下内容的查询 select from where and order by limit union all select from where and order by limit order by 使用 SQLAlche
  • 无法在 webRTC 上下文中从 Android webView(chrome 框架)访问相机

    应用程序基于 webRTC 与 websocket Android Studio 2 3 2 最新版本 我已经使用 https 协议 自动播放 android 版本 7 0 最低 gt android 5 0 应用程序适用于所有支持的浏览器
  • symfony2 - 从数据库添加选择

    我希望使用自定义查询中的值填充 symfony2 中的选择框 我已经尝试尽可能地简化 控制器 class PageController extends Controller public function indexAction field
  • 如何检查滚动当前在 WPF DataGrid 中是否可见?

    如何检查 WPF DataGrid 当前是否显示滚动 垂直或水平 Horizo ntalScrollBarVisibility 和 VerticalScrollBarVisibility 用于设置行为 并将它们设置为 Auto Scroll
  • 流量管理器 + azure 网站:如何配置自定义 dns ssl

    我有一个自定义 DNS 条目通过 CNAME 记录映射到我的流量管理器设置 我还有指向我的 azure 网站端点的流量管理器 并且我有一个与我的网站上上传的自定义 DNS 相匹配的通配符证书 我在使用 ssl 时遇到问题 该文档不清楚如何在
  • 对 WinMain@16(代码块)的未定义引用

    当我编译 secrypt cpp 程序时 我的编译器显示错误 undefined reference to WinMain 16 我的代码如下 加密 h ifndef SECRYPT H define SECRYPT H void jReg
  • Java GUI显示网页并返回HTML

    我需要如下的工作流程 load xyz com in the browser window the browser is live meaning users can interact with it browser load http w
  • 在带有泛型参数的泛型方法中使用 Spring RestTemplate

    要将泛型类型与 Spring RestTemplate 一起使用 我们需要使用ParameterizedTypeReference 无法获取通用 ResponseEntity 其中 T 是通用类 SomeClass 假设我有一些课 publ
  • 为什么 git 将某些 cpp 文件视为二进制文件?

    这是输出git log 5a831fdb34f05edd62321d1193a96b8f96486d69 HEAD HEAD origin work work LIB xxx cpp Bin 592994 gt 593572 bytes L
  • 让 Jenkins 通过 Mercurial 提交构建项目

    有没有办法在单个存储库中指定挂钩 现在我们已经在 etc mercurial hgrc 文件中指定了钩子 但每次它都会构建两次 并且它会为每个存储库中的每次提交构建 所以我们想为每个存储库指定一个构建 这就是我们实现钩子的方式 hooks
  • 在 Android 密钥库中安全存储密钥

    我正在制作一个与服务器通信的 Android 应用程序 我在服务器上使用基于令牌的身份验证 并将信息从服务器传递到客户端 我使用非对称加密 整个过程是这样的 生成的公钥和私钥事先已经存在 公钥用于加密信息 然后从服务器传递到客户端 App使
  • Android——有没有办法将吐司旋转90度?

    想不出更多的信息可以提供 有办法吗 As hackbod也就是说 您必须有一个自定义视图来显示 toast 我为您找到了一些可以为您旋转标签的类 VerticalLabelView and CustomTextView 我选择使用后者 并让
  • 如何预取不常用的代码?

    我想将一些代码预取到指令缓存中 代码路径很少使用 但我需要它位于指令缓存中 或者至少在 L2 中 在极少数情况下 我对这些罕见的情况有一些提前通知 mm prefetch 对代码有用吗 有没有办法将这些不常用的代码放入缓存中 对于这个问题