问题标签 [prefetch]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2889 浏览

c - 学习在 Intel/AMD 64 位上用 C 语言预取缓冲区的最佳资源

我有兴趣掌握与预取相关的功能,例如

_mm_prefetch(...)

所以当我执行遍历数组的操作时,内存带宽被充分利用了。学习这方面的最佳资源是什么?

我在英特尔 linux 平台上使用 GCC 4 系列在 C 中完成这项工作。

0 投票
1 回答
196 浏览

subsonic - 亚音速预载对象和子对象

我正在寻找以亚音速加载带有子图的对象列表。我知道如何使用 linq to sql 和 dataloadoptions

我有这张图

产品-位置-价格

新的 Select().From().Where(Product.Columns.Id).IsEqualTo(productId).ExecuteSingle();

我想让我的产品对象预加载位置和价格,这样它们就不会延迟加载导致很多查询。

谢谢

0 投票
4 回答
16601 浏览

linux - 如何以编程方式禁用硬件预取?

我想以编程方式禁用硬件预取。

使用硬件实现的预取器优化英特尔® 酷睿™ 微架构上的应用程序性能以及 如何在 32 位英特尔® 架构上选择硬件和软件预取,我需要更新 MSR 以禁用硬件预取。

这是一个相关的片段:

“DPL Prefetch 和 L2 Streaming Prefetch 设置也可以通过编写用于更改IA32_MISC_ENABLE 寄存器中的位的设备驱动程序实用程序以编程方式更改 -MSR 0x1A0此类实用程序提供启用或禁用预取机制的能力,而无需任何服务器停机时间。

下表显示了为了控制和 L2 流预取IA32_MISC_ENABLE MSR而必须更改的位:DPL

我尝试使用http://etallen.com/msr.html但这不起作用。我也尝试过直接使用wrmsrinasm/msr.h但那是段错误。我尝试在内核模块中执行此操作......并杀死了机器。

顺便说一句 - 我使用的是内核 2.6.18-92.el5,它已MSR链接到内核中:

0 投票
1 回答
1167 浏览

prefetch - 在 Windows XP 中预取信息失败并中止我的应用程序的启动

我在 Windows XP SP3 机器上编译我的应用程序。当它编译时,我尝试启动它,Windows 回复我:

无法启动程序“xx”。此应用程序无法启动,因为应用程序配置不正确。检查清单文件是否存在可能的错误。重新安装应用程序可能会解决此问题。有关详细信息,请参阅应用程序事件日志。

尝试复制 DLL 文件没有帮助(如果需要,请参阅我之前的问题)。

我已经从 sysinternals 启动了进程监视器。
我试着在这里总结报告,虽然它不是很长。
该过程开始,然后是它的第一个线程。以下是调用:
我的 exe 文件的 QueryNameInformationFile() =>成功
加载我的 exe 文件的图像() =>成功
加载 ntdll.dll 的图像() =>成功
QueryNameInformationFile() 如果我的 exe 文件 =>成功
CreateFile()尝试在 C:\WINDOWS\Prefetch\blahbla.pf => NAME NOT FOUND
中创建它, 然后线程和进程退出。

我添加了对该文件夹具有完全控制权的用户 (C:\WINDOWS\prefetch),但没有帮助。如何让它发挥作用?我觉得如果我完成这一步,我的应用程序将按预期工作。

编辑:我添加有关错误的 procmon 详细信息:

18:13:40,4305346 xxx.exe 3172 CreateFile C:\WINDOWS\Prefetch\XXX.EXE-1FA9609A.pf NAME NOT FOUND 所需访问:通用读取,处置:打开,选项:同步 IO 非警报,属性:n /a,ShareMode:无,AllocationSize:n/a

0 投票
1 回答
2198 浏览

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

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

0 投票
1 回答
1037 浏览

java - Hibernate:如何急切地获取未关联的实体?

Java Persistence with Hibernate 展示了许多如何急切获取关联实体的示例,例如:

  • 将@org.hibernate.annotations.BatchSize 添加到关联的类
  • 将@org.hibernate.annotations.Fetch 添加到引用关联类的字段中
  • 在 HQL 查询等中使用“fetch”关键字...

但是,在我的情况下,我正在处理一个运行缓慢的过程,该过程负责建立与感兴趣的实体类的关联。这意味着 - 在执行时 - 我不能查询一个实体并要求它急切地获取另一个实体的所有关联实例,因为不存在这样的关联。

换句话说,这个过程看起来像这样:

相关的 DAO (NodeManager) 和慢查询实体 (Node) 如下所示:

最后,由缓慢运行的进程创建的实体:

我的问题是:如何修改 Hibernate 配置和/或代码以一次急切地获取多个 Node 实例?

后续问题将是:

  • Hibernate 的 2 级缓存是否适合于此,如果适合 - 我该如何配置它?
  • 如果没有,这里是否可以使用其他一些 Hibernate 功能?

目前大约有 100,000 个节点,所以我不愿意采取蛮力的方法来查询每个节点并将其缓存在应用程序的某个地方,因为这不会扩展到更多的节点并且看起来会重复应用程序和 Hibernate 内部(会话、二级缓存等)之间的数据。

0 投票
2 回答
4046 浏览

android - Android:加载数据然后通知活动?还记录了一个失败的方法!

我只是尝试了一种愚蠢的方法,它使我的应用程序崩溃了......基本上我有一个包含三个选项卡(包含三个活动)的活动。每个选项卡都从从网上下载的 xml 文件中获取其输入。一切都很好,但是当我启动我的应用程序时,它已经下载了 xml 文件,并且有一个“等待”时间。

我设法通过添加启动画面来解决这个问题。它看起来很漂亮,但问题是当我单击第二个选项卡时,它仍然必须从网上获取列表,所以现在看起来很丑......它在显示列表之前等待。所以我所做的是设计一个只下载 xml 文件的 AsyncTask。在我的主要活动中,我最初生成了两个任务并将 URL 和 Intent 作为参数发送。在选项卡内开始的活动中,我使用了 wait()。在 AsyncTask 内部,下载完成后,我使用 notify() 通知 Intent。这崩溃了!当然,我没想到它会起作用,只是想尝试一下 :) 编写它以便我可以得到关于失败原因的反馈或防止其他人在此上浪费时间......

现在,我相信很多人都面临标签内“等待”时间的问题。我该如何解决这个问题?我正在考虑调暗屏幕然后显示一系列祝酒词或在选项卡内显示进度指示器或预取 xml 文件...我不知道如何实现这些...任何想法?

0 投票
3 回答
1509 浏览

javascript - 使用 JavaScript,如何在我的网站上预取另一个网页?

我有 Large.html,这是一个网页,上面有很多图像和 javascript,需要很长时间才能加载。

从其他页面(a.html、b.html)如何使用 JavaScript 预取 Large.html(以及页面上的所有元素),以便我可以将页面缓存在用户浏览器中以帮助加快页面加载.

我需要使用隐藏的 IFRAME 吗?

0 投票
3 回答
1028 浏览

linq-to-sql - 使用 Linq-to-SQL、IOC 和存储库模式预取数据

使用 Linq-to-SQL 我想预取一些数据。

1)常见的解决方案是处理DataLoadOptions,但在我的架构中它不起作用,因为:

  • 必须在第一个查询之前设置选项
  • 我正在使用 IOC,所以我不直接实例化 DataContext(我无法在实例化时执行代码)
  • 我的 DataContext 在 Web 请求期间是持久的

2)我看到了另一种可能性,基于在方法中加载数据及其子项,然后只返回数据(所以子项已经加载)在这里看一个例子

尽管如此,在我的架构中,它不能不起作用:

  • 我的查询被级联出我的存储库,并且可以被许多将添加子句的服务使用
  • 我使用接口,linq-to-sql 对象的具体实例不会离开存储库(是的,您可以使用接口和添加子句)
  • 我的存储库是通用的

是的,这个架构很复杂,但是很酷,因为我可以玩乐高之类的代码;)

我的问题是:预取数据的其他可能性是什么?

0 投票
1 回答
910 浏览

performance - 现代 CPU 缓存是否经过优化以处理恒定步幅?跨线程?

假设我有一个大数组,并且有多个线程从数组中读取。每个线程通过跳跃一个常数来迭代数组,但从不同的偏移量开始。因此线程 1 可能从元素 0 开始,然后读取元素 32、64、96 等。但是线程 2 从元素 1 开始,并读取元素 33、65、97 等(请记住,“元素”可能构成不仅仅是一个字节或单词)我知道通常空间局部性对于获得最佳缓存性能是可取的,但我也读到现代 CPU 具有硬件预取器,可以在访问中寻找模式,而对我来说,跨步似乎是明显的图案。

  • 那么这个缓存在现代盒子上是否友好?
  • 如果我将步幅增加到大于缓存行的值怎么办?
  • 答案是否受到使用多个线程的影响(因此尽管访问相同的内存,它们可能运行在具有不同缓存的不同内核上)?