标签: prefetch

我们什么时候应该使用预取?

某些CPU和编译器提供预取指令.例如:GCC文档中的 __builtin_prefetch .虽然GCC的文件中有评论,但它对我来说太短了.

我想知道,在prantice中,我们应该何时使用预取?有一些例子吗?谢谢!

performance x86 arm prefetch

6
推荐指数
3
解决办法
3357
查看次数

Django prefetch_related 优化查询但仍然很慢

我在prefetch_related具有 5 m2m 字段的模型上遇到了一些严重的性能问题,并且我正在预取一些嵌套的 m2m 字段。

class TaskModelManager(models.Manager):
    def get_queryset(self):
        return super(TaskModelManager, self).get_queryset().exclude(internalStatus=2).prefetch_related("parent", "takes", "takes__flags", "assignedUser", "assignedUser__flags", "asset", "asset__flags", "status", "approvalWorkflow", "viewers", "requires", "linkedTasks", "activities")


class Task(models.Model):
    uuid = models.UUIDField(primary_key=True, default=genOptimUUID, editable=False)
    internalStatus = models.IntegerField(default=0)
    parent = models.ForeignKey("self", blank=True, null=True, related_name="childs")
    name = models.CharField(max_length=45)
    taskType = models.ForeignKey("TaskType", null=True)
    priority = models.IntegerField()
    startDate = models.DateTimeField()
    endDate = models.DateTimeField()
    status = models.ForeignKey("ProgressionStatus")
    assignedUser = models.ForeignKey("Asset", related_name="tasksAssigned")
    asset = models.ForeignKey("Asset", related_name="tasksSubject")
    viewers = models.ManyToManyField("Asset", blank=True, related_name="followedTasks")
    step = models.ForeignKey("Step", blank=True, null=True, …
Run Code Online (Sandbox Code Playgroud)

python django postgresql prefetch

6
推荐指数
1
解决办法
3560
查看次数

如何使用 Django 查询集预取@property?

我想将模型属性预取到 Django 中的查询集。有没有办法做到这一点?

以下是三个模型:

class Place(models.Model):
    name = models.CharField(max_length=200, blank=True)
    @property
    def bestpicurl(self):
        try:
            return self.placebestpic.picture.file.url
        except:
            return None

class PlaceBestPic(models.Model):
    place = models.OneToOneField(Place)
    picture = models.ForeignKey(Picture, on_delete=models.CASCADE)

class Picture(models.Model):
    file = ImageField(max_length=500, upload_to="/images/")
Run Code Online (Sandbox Code Playgroud)

我需要类似的东西:

qs = Place.objects.all().select_related('bestpicurl')
Run Code Online (Sandbox Code Playgroud)

任何线索如何做到这一点?谢谢!

python django prefetch django-select-related

6
推荐指数
1
解决办法
3217
查看次数

如何在 django 中基于父查询集创建预取查询集

这是一个场景,一个包含多个投标的项目模型。

Class Project(models.Model):
    user = models.ForeignKey()

Class Bid(models.Model):
    project = models.ForeignKey(Project, related_name='bids')
Run Code Online (Sandbox Code Playgroud)

当我们查询项目时,我们想要预取项目的投标。

Project.objects.filter(whatever condition).prefetch_related(
     Prefetch('bids', queryset=Bid.objects.all())
)
Run Code Online (Sandbox Code Playgroud)

这里我们只想获取属于过滤项目的投标,而不是所有投标,我们如何指定呢?我期待类似的事情

queryset=Bid.objects.filter(project=project?)... 
Run Code Online (Sandbox Code Playgroud)

谢谢。

django prefetch django-queryset

6
推荐指数
1
解决办法
3889
查看次数

无需在 Google Cloud 中下载即可读取非常大的 blob(流式传输?)

请帮忙!

[+] 我有什么: 每个桶里都有很多斑点。Blob 的大小各不相同,从小于千字节到大量千兆字节。

[+] 我想做的事情: 我需要能够在这些 blob 中传输数据(比如大小为 1024 的缓冲区或类似的东西),或者在 Python 中按一定大小的块读取它们。关键是我不认为我可以只执行bucket.get_blob(),因为如果blob是TeraByte那么我将无法将它保存在物理内存中。

[+] 我真正想做的事情: 解析 blob 内的信息以识别关键字

[+] 我读过的内容: 很多关于如何分块写入谷歌云,然后使用 compose 将其拼接在一起的文档(一点帮助都没有)

很多关于java的预取函数的文档(需要是python)

谷歌云API

如果有人能指出我正确的方向,我将非常感激!谢谢

python stream prefetch google-cloud-platform

6
推荐指数
1
解决办法
3036
查看次数

为什么在L1缓存中将MFENCE与存储指令块预取一起使用?

我有一个64字节大小的对象:

typedef struct _object{
  int value;
  char pad[60];
} object;
Run Code Online (Sandbox Code Playgroud)

在主要我正在初始化对象数组:

volatile object * array;
int arr_size = 1000000;
array = (object *) malloc(arr_size * sizeof(object));

for(int i=0; i < arr_size; i++){
    array[i].value = 1;
    _mm_clflush(&array[i]);
}
_mm_mfence();
Run Code Online (Sandbox Code Playgroud)

然后再次遍历每个元素。这是我正在为以下事件计数的循环:

int tmp;
for(int i=0; i < arr_size-105; i++){
    array[i].value = 2;
    //tmp = array[i].value;
     _mm_mfence();
 }
Run Code Online (Sandbox Code Playgroud)

拥有mfence在这里没有任何意义,但是我在捆绑其他东西,无意间发现,如果我有存储操作,而没有mfence,我将收到50万次RFO请求(以papi L2_RQSTS.ALL_RFO事件衡量),这意味着另外50万L1命中,在需求之前预取。但是,包含mfence会导致一百万个RFO请求,从而产生RFO_HIT,这意味着仅在L2中预取了缓存行,不再在L1缓存中预取了。

除了英特尔文档以某种方式另有说明的事实之外:“可以在执行MFENCE指令之前,之中或之后将数据推测性地带入缓存”。我检查了加载操作。如果没有mfence,我最多可获得2000 L1命中率,而如果具有mfence,则我最多可获得100万L1命中率(以papi MEM_LOAD_RETIRED.L1_HIT事件衡量)。高速缓存行在L1中预取以用于加载指令。

因此,不应该包含mfence块预取。存储和加载操作几乎都需要花费相同的时间-不需5-6毫秒,而需20毫秒。我经历了有关mfence的其他问题,但未提及预取对它的预期行为,我没有看到足够好的理由或解释,为什么它仅使用存储操作会阻止L1缓存中的预取。还是我可能缺少某些功能描述?

我正在Skylake微体系结构上进行测试,但是与Broadwell进行了核对,并获得了相同的结果。

performance x86 intel prefetch memory-barriers

6
推荐指数
1
解决办法
106
查看次数

如何使用 Vue CLI 4.3 默认禁用链接(异步模块)预取/预加载?

如何在动态路由导入中禁用rel="prefetch"?

我正在使用 @vue/cli 4.3.1 和 Webpack 4.43.0,尝试禁用预取:

在route.js中

const Registration = () => import(  /* webpackPrefetch: false */
    /* webpackChunkName: "registration" */ '../modules/Popup/Registration.vue')
Run Code Online (Sandbox Code Playgroud)

尝试在 vue.config.js 中配置,但没有帮助

chainWebpack: config => {
  config.plugins.delete('prefetch')
  config.plugins.delete('prefetch-index') // or
  config.plugins.delete('preload')
}
Run Code Online (Sandbox Code Playgroud)

但无论如何都有

<link rel="prefetch" ....>
Run Code Online (Sandbox Code Playgroud)

javascript prefetch webpack vue-cli vue-cli-4

6
推荐指数
1
解决办法
6128
查看次数

Visual Studio 2012中的_mm_prefetch在哪里?

我想使用指令_mm_prefetch.MSDN 指定它在头文件mmintrin.h中,但没有.我使用Visual Studio 2012.

c++ sse prefetch

5
推荐指数
1
解决办法
1524
查看次数

硬件预取器是否有益于此内存访问模式?

我有两个数组:AN_A随机整数和B使用N_B之间的随机整数0(N_A - 1).我在以下循环中使用数字B作为索引A:

for(i = 0; i < N_B; i++) {
    sum += A[B[i]];
}
Run Code Online (Sandbox Code Playgroud)

在Intel i7-3770(N_A= 2.56亿,N_B= 6400万)上进行试验,此循环仅需0.62秒,这相当于大约9纳秒的内存访问延迟.

由于这个延迟太小,我想知道硬件预取器是否正在发挥作用.有人可以提供解释吗?

hardware performance ram prefetch

5
推荐指数
1
解决办法
285
查看次数

如果预取了无效地址会怎样?

简单的MWE:

int* ptr = (int*)malloc(64 * sizeof(int));
_mm_prefetch((const char*)(ptr + 64), _MM_HINT_0);
Run Code Online (Sandbox Code Playgroud)
  1. 这是定义的还是未定义的行为?
  2. 这会引发信号并中止程序运行吗?

我问,因为我可以在编译器生成的代码中看到这样的预取,其中在循环预取内部完成而不检查地址(存储在rbx)中:

400e73:       49 83 c5 40             add    r13,0x40
400e77:       62 f1 f9 08 28 03       vmovapd zmm0,ZMMWORD PTR [rbx]
400e7d:       4d 3b ec                cmp    r13,r12
400e80:       62 d1 f9 08 eb 4d ff    vporq  zmm1,zmm0,ZMMWORD PTR [r13-0x40]
400e87:       90                      nop
400e88:       62 d1 78 08 29 4d ff    vmovaps ZMMWORD PTR [r13-0x40],zmm1
400e8f:       72 03                   jb     400e94 <main+0x244>
400e91:       49 89 c5                mov    r13,rax …
Run Code Online (Sandbox Code Playgroud)

c assembly caching prefetch disassembly

5
推荐指数
1
解决办法
325
查看次数