据我所知,Fermi GPU支持预取L1或L2缓存.但是,在CUDA参考手册中我找不到任何关于它的东西.
Dues CUDA允许我的内核代码预取特定数据到特定级别的缓存?
<!—Firefox Prefetching -->
<link rel="prefetch" href="http://www.example.com/page2.html">
<!—Chrome Prefetching -->
<link rel="prerender" href="http://www.example.com/page2.html">
Run Code Online (Sandbox Code Playgroud)
如果我在页面上使用Javascript进行预呈现/预取(例如Google Analytics JS),那么prerender/prefetch会在页面上执行Javascript吗?或者它是否会延迟任何JS的执行,直到用户实际请求页面为止?
我一直在使用Chrome的预呈现功能
<link rel="prerender" href="/path" />
Run Code Online (Sandbox Code Playgroud)
但是在lates更新之后,当我尝试使用调试时[chrome://net-internals/#prerender].它表明预渲染因中止而中止"Cookie Conflict".
我试图调试以确保在页面加载后是否有一些ajax调用正在更改cookie,但是没有找到.预渲染仍然中止.它曾经与以前的chrome版本一起工作得很好.
我一直在阅读谷歌的幻灯片,以进行所谓的预优化.(对于那些感兴趣的人或那些不知道我在说什么的人,这张幻灯片总结了它.)
在HTML5中,我们可以预取和预呈现link元素中的页面.这是一个概述.我们可以使用rel值dns-prefetch,subresource,prefetch和prerender.
第一个令人困惑的事情是,显然只有prefetch在规范的HTML5(和5.1),但没有其他人的.(然而!)第二,浏览器支持对于(dns-)是好的,prefetch但对其他人来说非常糟糕.特别是Firefox缺乏支持prerender令人讨厌.
第三,我问自己的问题是:浏览器读取行后是否会发生预取(或任何其他方法)(然后阻止当前页面加载),或者等待加载在当前页面完全加载之前的后台资源?
如果它以阻塞方式同步加载,有没有办法异步或在页面加载后执行此操作?我想这样的JS解决方案,但我不确定它会异步运行.
var pre = document.createElement("link");
pre.setAttribute("rel", "prerender prefetch");
pre.setAttribute("href", "next-page.php");
document.head.appendChild(pre);
Run Code Online (Sandbox Code Playgroud)
如果适用,请回答这两个问题!
由于CPU,GPU,内存和网络资源的额外争用,下一次导航可能需要的资源提取可能会对当前导航上下文的性能产生负面影响.为解决此问题,用户代理应实现逻辑以减少和消除此类争用:
- 下一导航所需的资源提取应具有较低的相对优先级,并且不应阻止或干扰当前导航上下文所需的资源提取.
- 启动下一导航所需的资源获取的最佳时间取决于协商的传输协议,用户当前连接配置文件,可用设备资源和其他上下文特定变量.留下用户代理以确定启动提取的最佳时间 - 例如,用户代理可以决定等待直到所有其他下载完成,或者如果协商的协议支持必要的原语,则可以选择具有低优先级的流水线请求.或者,由于资源约束,用户偏好或其他因素,用户代理可以选择退出启动提取.
请注意用户代理可以执行此操作的程度.我真的担心这将导致不同浏览器的不同实现,这将导致再次分歧.
问题仍然存在.我不清楚是否通过使用prefetch或其他方式同步加载外部资源(因此,当放入头部时,在加载内容之前),或者异步(具有较低优先级).我猜测后者,虽然我不明白这是怎么可能的,因为link规范中没有任何内容可以允许异步加载链接元素的内容.
我正在学习 TensorFlow 的图像分割教程。其中有以下几行:
train_dataset = train.cache().shuffle(BUFFER_SIZE).batch(BATCH_SIZE).repeat()
train_dataset = train_dataset.prefetch(buffer_size=tf.data.experimental.AUTOTUNE)
Run Code Online (Sandbox Code Playgroud)
cache()作用?官方文档相当晦涩且自引用:缓存此数据集中的元素。
prefetch()作用?官方文档又相当晦涩难懂:创建一个从该数据集中预取元素的数据集。
我试图在Firefox 3.6上测试预取.我正在使用:
<link rel="prefetch" href="hst_galaxy.jpg"/>
Run Code Online (Sandbox Code Playgroud)
我在Firebug的Net面板中没有看到任何请求.当我查看Apache 2日志时,我只看到了页面请求,之后没有任何内容.我也没有看到预期的X-moz: prefetch标题.我还使用Wireshark检查了数据包,并且没有发送预取头.我还使用了LiveHttpHeaders(FF扩展),并且不再发送预取头.
我查看了我的about:config选项,并启用了"network.prefetch-next".
我的测试设置在Mac OS 10.5.8上.我正在使用Apache的本地安装,并从sites目录中的测试HTML文件运行它.我尝试了3种不同的域名选项:
localhost.com和randomurl.com是我在/ etc/hosts文件中配置的域.可以访问测试页面.
我访问过此页面,表示X-Moz已检测到标题.http://browserspy.dk/prefetch.php
在Firefox中,它说是的.在Chrome/Safari中它说不,这是预期的.同样,我无法检测到X-Moz使用Wireshark或LiveHttpHeaders发送的标头.在查看该页面的来源时,我确实看到了正确的<link rel="prefetch">元素.
我真的不确定我错过了什么.我已经非常彻底地测试了这个,如果我没有从Firefox中检测到任何内容并且在Apache中没有记录任何内容,我就不会看到它是如何工作的.
有没有人可以分享一些启示?
我正在通过C代码在CUDA(Fermi GPU)中进行数据预取.Cuda参考手册讨论了ptx级代码的预取而不是C级代码.
任何人都可以通过cuda代码(cu文件)与我联系一些有关预取的文件.任何帮助,将不胜感激.
比如说,我有一个产品实例。产品实例链接到第 4 级子类别。如果我只想获取根类别和第 4 级子类别,下面的查询足以以最少的数据库查询获取数据:
Product.objects.filter(active=True).prefetch_related('category__root',
'category')
Run Code Online (Sandbox Code Playgroud)
如果我必须联系该产品类别的父级并get_ancestors()为此使用方法,则会发生近三倍的模式数据库查询。
如果我使用get_ancestors()方法编写如下查询,则数据库查询保持低位。
Product.objects.filter(active=True).prefetch_related(
'category__root',
'category',
'category__parent',
'category__parent__parent',
'category__parent__parent__parent',
'category__parent__parent__parent__parent')
Run Code Online (Sandbox Code Playgroud)
但是当深度级别未知时,此查询无效。有没有办法在上面的查询中动态预取父母?
Intel 硬件预取器 Intel 网站显示有四种硬件预取器。由第 3 位控制的预取器是 L1 步幅预取器。我正在运行一个测试代码来测试 stride 预取器的触发条件是什么。我按照以下步骤运行代码(将 MSR0x1a4 设置为 0x7,这意味着仅启用基于 L1 IP 的 strider 预取器):
repeat following for 10000 times:
flush
training phase: access line 0 3 6 9
sleep for near 1000 cycles
measure phase: measure line 12
Run Code Online (Sandbox Code Playgroud)
我希望看到第 12 行被预取到缓存中。但是我只能看到缓存中的第 0 3 6 9 行被命中。即使我更改了步幅或访问模式的长度,也无法观察到步幅预取活动。所以我想知道是否有人在英特尔处理器中看到过预取活动,或者有一些我没有注意到的特殊触发条件?
对这个案例有兴趣的可以试一下测试代码。运行sudo ./run.sh就可以了。我的机器上的结果显示,第 12 行的访问时间大多大于 180 个周期。我认为时间测量代码没有问题,因为如果我将测量的行从缓存行 12 更改为缓存行 6(只需在 test.c,第 103 行更改),那么访问时间主要是 25 个周期。
我对 Intel CPU 的总体理解是,对连续物理地址的需求加载会触发 L2 硬件流预取器,该预取器可以提前预取到页面边界。
我想触发这个机制而不污染L1。我的想法是使用 L2 软件预取连续的物理地址。有谁知道这是否会触发相同的机制?
prefetch ×10
prerender ×3
caching ×2
cuda ×2
html5 ×2
x86 ×2
cpu-cache ×1
dataset ×1
django ×1
firefox ×1
firefox3.6 ×1
gecko ×1
gpgpu ×1
http-headers ×1
intel ×1
javascript ×1
mptt ×1
optimization ×1
performance ×1
preloading ×1
ptx ×1
tensorflow ×1