小编Kay*_*Kay的帖子

Write-Combining Buffer位于何处?86

Write-Combine缓冲区是如何物理连接的?我已经看到了说明许多变体的方框图:

  • 在L1和内存控制器之间
  • 在CPU的存储缓冲区和内存控制器之间
  • 在CPU的AGU和/或存储单元之间

它是依赖于微架构的吗?

x86 intel cpu-architecture cpu-cache amd-processor

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

iOS上的vsync:它是如何工作的

我正在试图弄清楚vsync如何在iOS上运行CADisplayLink.我想在这里回答的问题是:

  • 如果我错过CPU端的框架,iOS上会发生什么?

我设置了一些测试:

  • CADisplayLink在iPhone上使用间隔为1 = ~60Hz 的计时器
  • 使用[CADisplayLink timestamp]和两者分析计时器调用之间的时间mach_absolute_time()

测试1:基础测试:在这里,我只跟踪了10000个样本:

timestamp-----
max: 16.762583
min: 16.627625
mean: 16.675080
variance: 0.000333

mach----------
max: 22.606042
min: 10.815958
mean: 16.675694
variance: 0.602793

diff----------
max: 5.941417
min: 0.000750
mean: -0.000615
variance: 0.607476
Run Code Online (Sandbox Code Playgroud)

测试2:由于CPU等待时间短而导致帧丢失:这里,在帧X上,我只是坐在自旋锁中进行Y次迭代.相对于第X帧的记录帧时间:

Y = 200000
-1: 16.72   17.85   (-1.13)
0:  16.66   15.37   (1.29)
1:  33.32   43.74   (-10.42) (*)
2:  16.74   4.34    (12.40) (*)
3:  16.61   16.70   (-0.10)
4:  16.71   16.65   (0.06)  

Y = 100000
-1: 16.66 …
Run Code Online (Sandbox Code Playgroud)

graphics opengl-es ios

5
推荐指数
0
解决办法
976
查看次数

最后位置定义中的单位

我正在阅读每个计算机科学家应该知道的关于浮点的知识

ulp的概念看起来很简单。然而,在一个早期的例子中,作者提出了一个声明(在Guard Digits部分)

也就是说,比较计算的值时:(0.02×10)与真值(0.17)计算的(10.1 - 9.93) ,该错误是30ulps

根据论文前面提出的公式,错误应该是:

|0.02 - 0.017| * 100 = 0.3ulps,这对我来说很有意义。

显然,我在这里遗漏了一些相当重要的东西。

floating-point

5
推荐指数
2
解决办法
1706
查看次数

现代图形管道有多少帧?

假设管道已满:GPU等待vsync,GPU /驱动程序命令缓冲全部,因此用户程序被阻止.

(现代)管道中有多少帧数据?

例如:(4)

  1. GPU前端缓冲区中的帧
  2. GPU后备缓冲区中的帧
  3. GPU命令缓冲区中的帧
  4. CPU驱动程序命令缓冲区中的帧

opengl directx graphics metal vulkan

3
推荐指数
1
解决办法
420
查看次数

Intel 64 和 IA-32 上的 MESI 有何意义

  • MESI 的要点是保留共享内存系统的概念。
  • 然而,对于存储缓冲区,事情就变得复杂了:
  • 一旦数据到达 MESI 实现的缓存,下游内存就会保持一致。
  • 然而,在此之前,每个核心可能对内存位置 X 中的内容存在分歧,具体取决于每个核心的本地存储缓冲区中的内容。
  • 因此,从每个核心的角度来看,内存的状态似乎是不同的——它是不连贯的。
  • 那么,为什么我们要“部分地”强制执行与 MESI 的一致性呢?

编辑:在进一步缩小真正让我困惑的内容之后,进行了实质性编辑。我试图保持问题的一般概念不变,以保留收到的优秀答案的相关性。

concurrency x86 caching cpu-architecture mesi

3
推荐指数
1
解决办法
978
查看次数

具有多个特定于页面大小的 TLB 的地址转换

对于 Intel 64 和 IA-32 处理器,对于独立的数据和代码,可能同时存在 4KB TLB 和大页面(2MB、1GB)TLB(LTLB)。在这种情况下,地址转换如何工作?

  1. 知道不会发生双重命中,硬件是否能够简单地并行访问两者?
  2. 在 LTLB 中,条目将如何组织?我想,当条目最初是从页面结构条目填充时,LTLB 条目可能包含有关如何继续点击该条目的信息?

任何人都有对当前微体系结构的参考?

cpu-architecture tlb

2
推荐指数
1
解决办法
476
查看次数

Skylake 和较新的环形巴士

在 Intel Skylake 及更新版本中,每个核心的内存子系统可以直接参与环形总线流量吗?这个框图(以及随附的信息)似乎表明了这一点。

如果是这样,子系统的哪一部分被连接?

  • L2?
  • 行填充缓冲区以方便 NT 存储?

x86 intel cpu-architecture cpu-cache

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

C++对齐和数组

  • 我有一些T我明确指定为x -aligned的类型
  • x >sizeof(T)
  • x >任何实现基本对齐
  • (例如:x是页面或缓存对齐)

假设我现在有:T arr[y],其中arrX -aligned(无论是通过被分配在堆栈上,或者在数据,或由X -aligned堆分配)

然后至少有一些arr[1],...,arr[y-1]不是x对齐的.

正确?(事实上​​,如果不随扩展对齐规范改变,它必须是正确的sizeof(T))

注1:这是一样的问题是如何的阵列在C++对准相比包含一个类型?.这个问题询问阵列本身的对齐方式,而不是内部各个元素的对齐方式.

注2:这个问题:alignas会影响sizeof的值吗?基本上就是我要问的 - 但是对于扩展对齐.

注3:https://stackoverflow.com/a/4638295/7226419 这个问题是一个权威的答案(sizeof(T)包括满足对齐要求所需的任何填充,以使所有T的数组T正确对齐.

c c++

0
推荐指数
1
解决办法
804
查看次数