问题标签 [memory-access]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
x86 - 哪种内存访问架构具有 i9 处理器?
有哪些内存访问架构和i9 处理器(UMA、NUMA 或 CC-NUMA)?
它与以前的处理器(如i7 )有什么不同?
c - C - 直接使用地址访问内存?
几个星期以来,我一直在用一些书轻轻地学习 C。
正如您3.15
在单精度float
中看到的那样01000000 01001001 10011001 10011010
。所以让我们说ptr
点地址0x1efb40
。
以下是问题:
正如我在书中所理解的那样,前 8 位
num
数据存储在 中0x1efb40
,第二个 8 位存储在 中0x1efb41
,接下来的 8 位存储在 中0x1efb42
,最后 8 位存储在 中0x1efb43
。我对吗?如果我是对的,有什么方法可以直接使用十六进制地址值访问第二个 8 位
0x1efb41
?因此我可以将数据更改为类似的东西11111111
吗?
memory - 以不同的访问大小访问内存
我目前正在做一个项目,我在内存或寄存器中注入位翻转(0 -> 1,或 1 -> 0)。现在我必须考虑一些特殊情况。
这是我的问题:是否
存在这样的情况,在某个内存位置进行内存访问,不久之后,在同一位置进行内存访问,访问大小更小或更宽?
例子:
在第 1 行中,通过地址寄存器 A15 中的指针访问内存,其内容存储在数据寄存器 D15 中。访问大小是一个字节 (.B)。在第 2 行中,它与第 1 行中的相同,但使用访问大小字 (.W)(32 位)。
所以访问大小将是这样的:
其中 X 是十六进制。
这是可能的,编译器会做这样的事情吗?什么是一个例子呢?
我不知道这个问题是否愚蠢。对不起!:D
operating-system - 请求分页的内存访问次数
我一直在研究操作系统概念,我所指的书是 Peter B. Galvin、Greg Gagne 和 Abraham Silberschatz 的操作系统概念。
在虚拟内存一章中,本书开始讨论分页和内存访问次数,系统在给定逻辑地址的情况下读取存储在内存中特定帧中的数据。作者指出,当主内存中存在页表时,系统需要两次内存访问才能读取存储在帧中的数据。第一次访问页表以读取正确的帧号,下一次访问是从帧中读取字节/字。
几节之后,本书讨论了需求分页和页面错误。作者指出,在没有缺页的情况下,需要一次内存访问,在缺页的情况下,我们将考虑缺页服务时间(包括交换时间、换出时间、一次内存访问等)并提出有公式的读者
有效访问时间 = (1-p) x 1 个内存访问时间 + px 缺页服务时间
其中 p = 页面错误率
我无法理解为什么作者建议在没有页面错误的情况下只需要一次内存访问。应用同一作者之前介绍的标准分页方案的思路,我们应该需要一个内存访问来读取页表,另一个来从帧中读取数据。
是因为我们在谈论访问页表后的时间范围吗?那么为什么同样的计算标准不适用于标准版的分页呢?
linux - Linux Perf_Events 中的 LLC-Miss 报告
我在 shell 中运行了以下命令:
程序完成执行后,我运行了这个命令:
该报告显示了MPlayer
用户空间中代码(在和相关的共享库中)的位置以及 LLC 未命中的百分比。是否有可能确定未命中的来源?即,如果它们是指令未命中或数据未命中?
还有一个问题:当我更改LLC-misses:u
为LLC-misses:up
生成的报告将是空的。PEBS
开关添加有什么问题?
performance - 如何以非线性方式在 C++ 中保存矩阵
我必须编写 Levenshtein 距离问题的优化多线程实现。它可以使用带有矩阵的动态规划来计算,Levenshtein distance 上的维基百科页面已经足够好。
现在,我可以同时计算对角线元素。没关系。
我的问题现在与缓存有关。c++ 中的矩阵通常逐行保存在内存中,对吗?好吧,这对我不利,因为我需要前一行的 2 个元素和当前行的 1 个元素来计算我的结果,这在缓存方面太可怕了。缓存将保存当前行(或其中的一部分),然后我要求它可能不再保存前一个。然后对于另一个,我需要对角线的不同部分,所以再一次,我要求完全不同的行,缓存不会为我准备好那些。
因此,我想将我的矩阵以块或对角线的形式保存到内存中。这将导致更少的缓存未命中,并使我的实现再次更快。
你是怎样做的?我尝试在互联网上搜索,但我找不到任何能告诉我方向的东西。是否可以告诉 c++ 如何在内存中订购该类型?
编辑:你们中的一些人似乎对我的问题的性质感到困惑。我想以自定义方式将矩阵(无论我将其设为 2D 数组还是任何其他方式)保存到 MEMORY 中。通常,二维数组将逐行保存,我需要使用对角线,因此缓存会在我将处理的巨大矩阵(可能数百万行和列)上丢失很多。
cuda - NVIDIA Pascal 上的内存合并和 nvprof 结果
我正在 Pascal 上运行内存合并实验并得到意想不到的nvprof
结果。我有一个内核,可以将 4 GB 的浮点数从一个数组复制到另一个数组。nvprof
报告gld_transactions_per_request
和的混淆数字gst_transactions_per_request
。
我在 TITAN Xp 和 GeForce GTX 1080 TI 上进行了实验。结果相同。
使用 CUDA 10.1 版编译:
简介:
分析结果中有一些令人困惑的部分:
gld_transactions = 536870914
,这意味着每个全局负载事务平均应该是4GB/536870914 = 8 bytes
。这与以下一致gld_transactions_per_request = 16.000000
:每个 warp 读取 128 个字节(1 个请求),如果每个事务是 8 个字节,那么我们需要128 / 8 = 16
每个请求的事务。为什么这个值这么低?我期望完美的合并,所以类似于 4 个(甚至 1 个)事务/请求。gst_transactions = 134217728
并且gst_transactions_per_request = 4.000000
,所以存储内存更有效?- 请求和实现的全局加载/存储吞吐量 (
gld_requested_throughput
,gst_requested_throughput
,gld_throughput
,gst_throughput
) 是150.32GB/s
每个。我希望负载的吞吐量低于商店的吞吐量,因为我们每个请求有更多的事务。 gld_transactions = 536870914
但是l2_read_transactions = 134218800
。始终通过 L1/L2 高速缓存访问全局内存。为什么 L2 读取事务的数量如此之少?它不能全部缓存在 L1 中。(global_hit_rate = 0%
)
我想我读nvprof
错了结果。任何建议,将不胜感激。
这是完整的分析结果:
excel - How can I handle DLL errors in VBA?
The API declaration:
will crash Excel when provided with a non-existent function pointer for the lpPrevWndFunc
parameter.
Similarly,
isn't happy when Destination
or Source
don't exist.
I think these errors are memory access violations. I assume Windows tells the caller that it's doing something it can't1 - perhaps it sends a message to Excel and there's no handler for it? MSDN has this to say about it:
System errors during calls to Windows dynamic-link libraries (DLL) or Macintosh code resources do not raise exceptions and cannot be trapped with Visual Basic error trapping. When calling DLL functions, you should check each return value for success or failure (according to the API specifications), and in the event of a failure, check the value in the Err object's LastDLLError property. LastDLLError always returns zero on the Macintosh. (emphasis my own)
But in these instances I have no values to check for errors, I just get a crash.
1: Provided it catches the error which it might not always, if say a memory rewrite is valid but undefined. But certainly writing to restricted memory or calling fake pointers should be caught before they're executed right?
I'm most interested in:
What causes this crash (both how it is triggered, and what exactly the mechanism is behind it - how does Excel know it needs to be crashing?). What is the message channel over which these errors are being communicated, and can I intercept them with VBA code?
Whether the crash can be pro-actively (i.e. sanitising inputs etc.) or retro-actively (handling errors) prevented.
I think (1) will likely shed light on (2) and vice-versa
Anyway, if anyone knows how to handle API errors like these without Excel crashing, or how to avoid them happening, or anything that would be fab. On Error Resume Next
doesn't seem to work...
Motivation
There are 2 main reasons I'm asking about this:
Developing code (the process of debugging etc.) is made much harder when Excel crashes every time I make a mistake. This is not something that can be solved by simply getting it right myself (and exposing a different interface to client code, which uses my existing correct implementations of API calls) because I rarely get it right first time!
I would like to create robust code which is able to handle errors in user input (e.g. invalid function pointers or memory write locations). This can be dealt with to an extent by, for example, abstracting function pointers away into callable classes, but that's not a general solution for other kinds of dll errors (and still doesn't deal with 1.)
Specifically, I'm trying to develop a friendly interface to wrap WinAPI timers. These require callback functions to be registered with them, which (given the limitations of VBA) have to come in the form of Long
function pointers (generated with the AddressOf
keyword).
The callbacks come from user code and may be invalid. The whole point of my wrapping is to improve stability of the API calls, and this is one area that needs improvement.
The memory copy problem is probably out of scope of this question, it's to do with making generators in VBA, but I think the same error handling techniques would be applicable there too, and it makes for an easier example.
I also get errors and crashes from the Timer API generating too many unhandled messages for Excel. Once again I wonder, how does Windows tell Excel "Time to crash now", why can't I intercept that instruction and deal with the error myself (i.e. Kill all the Timers I made & flush the message queue)?
x86 - 通过分页,我们为每个 4 字节(字)映射虚拟到物理映射。但是我们如何访问该映射中的每个字节呢?
这可能是我不理解的非常基本的事情。但是我为此付出了很多努力来寻找答案,但没有任何好处。
在字节寻址机器中,通过使用 32 位,我们可以访问 4GB 内存(2^32 字节)。然后每个字包含 4 个字节,在虚拟到物理映射中,我们有虚拟到物理字映射,其中包括 4 个字节。所以我的问题是,如果我们有 char 变量(char:1byte),我们如何知道哪个字节包含在 4 个字节中?