- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我知道如果没有缓存数据,访问主内存会有很高的延迟。这个问题是关于吞吐量的。
在普通台式 PC 上永远不受主内存限制的功能所需的复杂性是多少?
我了解到现代 RAM 的带宽为 25-30GB/s(DDR3 RAM,双 channel 模式)。据我所知,使用现代 SIMD 指令集,现代英特尔处理器的单个内核每条指令最多可以存储 32 字节。它最多可以运行 4*10^9 条指令。如此有效,它可以输出大约 120GB/s。给定一个具有 8 个线程的处理器,作为最坏情况的估计,最大输出量约为 960GB/s。
处理器最多可以输出大约 36 倍于可写入 RAM 的数据。是否可以安全地假设任何运行非加载/存储操作的函数每次 SIMD 存储或加载超过 36 个周期(或每个常规 8 字节存储或加载超过 9 个周期)永远不会受到主内存的限制?由于某些原因,这个估计值是否可以显着降低或太低?
鉴于我有:
X = (x_1, x_2, ..., x_n) // dataset, large enough to make good use of caches
a(x), b(x), c(x, y), d(x) := c(a(x), b(x)) // functions that operate on elements
A(x) := (a(x_1), a(x_2), ..., a(x_n)) // functions that operate on data sets
我正在寻找实现时更好(或不更差)的指南
D(X)
作为
C(A(X), B(X))
鉴于第一个实现对缓存和寄存器施加了更多压力,而第二个实现具有更多加载/存储操作。
(当然,你可以告诉我基准测试,我对此很满意。但有时,我只是想做出有根据的猜测,并且只在以后出现问题或瓶颈时才重新审视这些东西。)
最佳答案
我认为这在很大程度上取决于代码是否以 CPU 可以预取下一个数据项到缓存中的方式编写。如果它预取了错误的数据,那么无论您花费多少时间处理当前数据,您仍然会受到内存限制。
如果你有多个线程写入同一个地址(它们的数据将在不同的缓存行上)那么即使它已经被正确预取,如果另一个线程已经写入该地址那么它必须被转储并重新 -再次从主存中读取。
总而言之,我认为不可能在这个级别上对这类事情进行推理,这将取决于您所拥有的确切场景。
关于c++ - 不受主存储器约束的函数所需的复杂性是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42409592/
C语言sscanf()函数:从字符串中读取指定格式的数据 头文件: ?
最近,我有一个关于工作预评估的问题,即使查询了每个功能的工作原理,我也不知道如何解决。这是一个伪代码。 下面是一个名为foo()的函数,该函数将被传递一个值并返回一个值。如果将以下值传递给foo函数,
CStr 函数 返回表达式,该表达式已被转换为 String 子类型的 Variant。 CStr(expression) expression 参数是任意有效的表达式。 说明 通常,可以
CSng 函数 返回表达式,该表达式已被转换为 Single 子类型的 Variant。 CSng(expression) expression 参数是任意有效的表达式。 说明 通常,可
CreateObject 函数 创建并返回对 Automation 对象的引用。 CreateObject(servername.typename [, location]) 参数 serv
Cos 函数 返回某个角的余弦值。 Cos(number) number 参数可以是任何将某个角表示为弧度的有效数值表达式。 说明 Cos 函数取某个角并返回直角三角形两边的比值。此比值是
CLng 函数 返回表达式,此表达式已被转换为 Long 子类型的 Variant。 CLng(expression) expression 参数是任意有效的表达式。 说明 通常,您可以使
CInt 函数 返回表达式,此表达式已被转换为 Integer 子类型的 Variant。 CInt(expression) expression 参数是任意有效的表达式。 说明 通常,可
Chr 函数 返回与指定的 ANSI 字符代码相对应的字符。 Chr(charcode) charcode 参数是可以标识字符的数字。 说明 从 0 到 31 的数字表示标准的不可打印的
CDbl 函数 返回表达式,此表达式已被转换为 Double 子类型的 Variant。 CDbl(expression) expression 参数是任意有效的表达式。 说明 通常,您可
CDate 函数 返回表达式,此表达式已被转换为 Date 子类型的 Variant。 CDate(date) date 参数是任意有效的日期表达式。 说明 IsDate 函数用于判断 d
CCur 函数 返回表达式,此表达式已被转换为 Currency 子类型的 Variant。 CCur(expression) expression 参数是任意有效的表达式。 说明 通常,
CByte 函数 返回表达式,此表达式已被转换为 Byte 子类型的 Variant。 CByte(expression) expression 参数是任意有效的表达式。 说明 通常,可以
CBool 函数 返回表达式,此表达式已转换为 Boolean 子类型的 Variant。 CBool(expression) expression 是任意有效的表达式。 说明 如果 ex
Atn 函数 返回数值的反正切值。 Atn(number) number 参数可以是任意有效的数值表达式。 说明 Atn 函数计算直角三角形两个边的比值 (number) 并返回对应角的弧
Asc 函数 返回与字符串的第一个字母对应的 ANSI 字符代码。 Asc(string) string 参数是任意有效的字符串表达式。如果 string 参数未包含字符,则将发生运行时错误。
Array 函数 返回包含数组的 Variant。 Array(arglist) arglist 参数是赋给包含在 Variant 中的数组元素的值的列表(用逗号分隔)。如果没有指定此参数,则
Abs 函数 返回数字的绝对值。 Abs(number) number 参数可以是任意有效的数值表达式。如果 number 包含 Null,则返回 Null;如果是未初始化变量,则返回 0。
FormatPercent 函数 返回表达式,此表达式已被格式化为尾随有 % 符号的百分比(乘以 100 )。 FormatPercent(expression[,NumDigitsAfterD
FormatNumber 函数 返回表达式,此表达式已被格式化为数值。 FormatNumber( expression [,NumDigitsAfterDecimal [,Inc
我是一名优秀的程序员,十分优秀!