标签: prefetch

如何关闭Safari的预取功能?

Safari有一个"功能",可以在您输入网址时预先加载页面.

现在对于大多数用户来说,这确实是一项功能,可以加快页面加载速度.但是对于Web开发人员来说,它可能会带来麻烦 - 特别是当它自动加载您之前使用但目前无意运行的脚本(如导入程序或后台脚本)时.

这种情况发生在Safari 8.x下,但旧版本也可能出现这种情况.

此外,请注意,此功能不同于"DNS预取",这是我遇到的唯一相关解释 - 我已禁用DNS预取,但未解决此问题...

safari prefetch

4
推荐指数
1
解决办法
3383
查看次数

读取或写入的预取之间的区别

GCC文档讲读和预取写预取之间的差异.有什么技术差异?

c gcc prefetch

4
推荐指数
1
解决办法
1000
查看次数

获取 Django 中所有唯一的 prefetch_related 对象

在models.py中:

from django.db import models
...
class Product(models.Model):
   ...
   recommended = models.ManyToManyField('self', blank=True)
   ...
Run Code Online (Sandbox Code Playgroud)

如果我有一个 Product 查询集,我怎样才能获得所有独特的推荐对象?
例如:产品«A»有3个推荐产品:«B»、«C»和«D»,产品«B»有2个推荐产品:«C»和«E»,在查询集«products»中,我们有«A»和 «B» 产品,在本例中:

# get_products() returns QuerySet of «A» and «B» products
products = get_products().prefetch_related('recommended')
recommended = [item for p in products for item in p.recommended.all()]
Run Code Online (Sandbox Code Playgroud)

我们会得到 [«B», «C», «D», «C», «E»] 的列表,但是如何只得到 [«B», «C», «D», «E»]?

PS当然我们可以在«for»循环中过滤对象,但也许有更有效和公平的方法?...

更新 #1(对 Mark Galloway 的回答):

products = self.request.basket.get_products().prefetch_related(
        Prefetch('recommended', queryset=models.Product.objects.distinct()))
recommended_list = [item for p in products for item in p.recommended.all()]
Run Code Online (Sandbox Code Playgroud)

返回:

[<Product: Vestibulum ante …
Run Code Online (Sandbox Code Playgroud)

python django prefetch django-queryset

4
推荐指数
1
解决办法
3432
查看次数

_builtin_prefetch() 中第二个参数的作用是什么?

此处的 GCC 文档指定了 _buitin_prefetch 的用法。

第三个论点是完美的。若为0,编译器产生prefetchtnta(%rax)指令 若为1,编译器产生prefetcht2(%rax)指令 若为2,编译器产生prefetcht1(%rax)指令 若为3(默认),编译器产生prefetcht0 (%rax) 指令。

如果我们改变第三个参数,操作码已经相应地改变了。

但是第二个参数似乎没有任何效果。

__builtin_prefetch(&x,1,2);
__builtin_prefetch(&x,0,2);
__builtin_prefetch(&x,0,1);
__builtin_prefetch(&x,0,0);
Run Code Online (Sandbox Code Playgroud)

以上是生成的示例代码:

以下是组装:

 27:    0f 18 10                prefetcht1 (%rax)
  2a:   48 8d 45 fc             lea    -0x4(%rbp),%rax
  2e:   0f 18 10                prefetcht1 (%rax)
  31:   48 8d 45 fc             lea    -0x4(%rbp),%rax
  35:   0f 18 18                prefetcht2 (%rax)
  38:   48 8d 45 fc             lea    -0x4(%rbp),%rax
  3c:   0f 18 00                prefetchnta (%rax)
Run Code Online (Sandbox Code Playgroud)

可以观察到第三个参数的操作码的变化。但即使我更改了第二个参数(指定读或写),汇编代码也保持不变。<27,2a> 和 <2e,31>。所以它不会向机器提供任何信息。那么第二个论点的目的是什么?

c x86 assembly gcc prefetch

4
推荐指数
2
解决办法
1556
查看次数

从 stomp API 设置预取限制

AMQ文档指出,建立连接时可以设置预取限制 - 有没有办法在实例化队列连接时使用stomp.py设置预取限制?

python stomp prefetch amq

4
推荐指数
1
解决办法
1553
查看次数

_mm_prefetch如何工作?

这里所述的_mm_prefetch调用将内容从RAM中的给定存储器位置预取到高速缓存行.但是缓存完全在硬件控制之下吗?基于经常访问的存储器(基于空间/时间位置),硬件将内容从存储器预取到高速缓存.我认为程序员无法控制缓存,它完全是一种硬件机制.

所以我的理解是错误的,缓存实际上可以由我们控制,对吧?

如果_mm_prefetch可以控制什么可以放在缓存中,

  1. 这是否意味着它永远不会从缓存中删除?

  2. 什么是等效的汇编级指令,它适用于缓存机制?

assembly caching sse prefetch visual-studio-2010

4
推荐指数
1
解决办法
1765
查看次数

如何正确使用预取指令?

我试图矢量化循环,计算大浮点矢量的点积.我正在并行计算它,利用CPU拥有大量XMM寄存器的事实,如下所示:

__m128* A, B;
__m128 dot0, dot1, dot2, dot3 = _mm_set_ps1(0);
for(size_t i=0; i<1048576;i+=4) {
    dot0 = _mm_add_ps( dot0, _mm_mul_ps( A[i+0], B[i+0]);
    dot1 = _mm_add_ps( dot1, _mm_mul_ps( A[i+1], B[i+1]);
    dot2 = _mm_add_ps( dot2, _mm_mul_ps( A[i+2], B[i+2]);
    dot3 = _mm_add_ps( dot3, _mm_mul_ps( A[i+3], B[i+3]);
}
... // add dots, then shuffle/hadd result.
Run Code Online (Sandbox Code Playgroud)

我听说使用预取指令可以帮助加速,因为它可以"在后台"获取更多数据,同时执行muls并添加缓存中的数据.但是我没有找到关于如何使用_mm_prefetch()的示例和解释,何时使用什么地址和什么命中.你可以帮忙吗?

x86 caching sse prefetch dot-product

4
推荐指数
1
解决办法
1612
查看次数

为什么不预测两个分支?

CPU使用分支预测来加速代码,但仅限于实际采用第一个分支.

为什么不简单地采取两个分支?也就是说,假设两个分支都将被命中,缓存两侧,并在必要时采取适当的分支.缓存不需要无效.虽然这需要编译器预先加载两个分支(更多的内存,适当的布局等),但我认为适当的优化可以简化两者,以便可以从单个预测器获得接近最优的结果.也就是说,需要更多的内存来加载两个分支(对于N个分支是指数的),大多数时候应该能够在完成执行分支之前足够快地用新代码"重新缓存"失败的分支. .

if(x)Bl else Br;

不假设采用Bl,而是假设采用Bl和Br(某种类型的并行处理或特殊交织),并且在实际确定分支之后,一个分支随后无效,然后可以释放缓存以供使用(可能是一些需要特殊技术的类型才能正确填写和使用它.

实际上,不需要预测电路,并且所有用于此的设计可以用于处理两个分支.

任何想法,如果这是可行的?

cpu cpu-architecture prefetch speculative-execution branch-prediction

4
推荐指数
1
解决办法
584
查看次数

Django - 过滤 prefetch_related 查询集

我试图通过执行以下操作来降低我的复杂性。我正在努力让所有老师都进入活跃的课堂。

teacher/models.py:

Teacher(models.Model):
    name = models.CharField(max_length=300)


classroom/models.py:

Classroom(models.Model):
    name = models.CharField(max_length=300)
    teacher = models.ForeignKey(Teacher)
    students = models.ManyToManyField(Student)
    status = models.CharField(max_length=50)

admin/views.py

teachers = Teacher.objects.prefetch_related(Prefetch('classroom_set',queryset=Classroom.objects.filter(status='Active'))


for teacher in teachers:
    classrooms = teacher.all()
    # run functions
Run Code Online (Sandbox Code Playgroud)

通过这样做,我让老师们有了教室。但它也会返回没有我不想要的活跃教室(空列表)的教师。正因为如此,我不得不用空的classroom_set来循环数千名教师。有什么办法可以删除那些classroom_set是[]的老师吗?

这是我的原始问题 - 带有外键的 Django 多个查询

谢谢

python mysql django prefetch python-2.7

4
推荐指数
1
解决办法
4876
查看次数

如何始终为特定 django 模型预取相关

我的一个模型中有许多相关对象__str__。这使得管理站点运行速度非常慢。

即使没有明确请求,是否可以以始终执行 prefetch_lated 的方式设置模型?

django django-models prefetch

4
推荐指数
1
解决办法
1711
查看次数