问题标签 [persistent-memory]
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.
c++ - 如何使用非时间(流)存储指令来存储自定义结构?
我刚刚开始使用非临时存储指令将某些类型的数据存储到内存(可能是 DRAM 或 NVM)。我查看了 Intel Intrinsics Guide 以了解此类存储函数,并找到了 _mm_stream_si32、_mm_stream_si18、_mm_stream_si256 等函数。似乎这些函数只能应用于某些类型的整数。我的问题是,如果我自定义某种类型的结构并且它的大小可能是 1KB、2KB ......我如何执行非临时(流式)存储来将这种类型的结构存储到我的内存中(或反之亦然,从内存中加载)。目前,我只能想出一种方法,将我的结构转换为一大块整数,并为每个转换的整数一个接一个地应用非时间/流式存储/加载。我认为这种方法效率低下,有没有更有效的编码方式来实现我的目标?
另外,如果我想存储大量这样的自定义结构,是否需要sfence
在每个非临时存储之后发出一个?我对此不确定,想知道是否可以删除指令或在执行所有非临时存储后sfence
仅发出一条指令?sfence
非常感谢您的帮助。
x86-64 - Intel Optane Persistent Memory 上 `clwb` 和 `ntstore` 的延迟是多少?
在本文中,Optane PM的 8 字节顺序写入clwb
和ntstore
optane PM 的 8 字节顺序写入延迟分别为 90ns 和 62ns,顺序读取为 169ns。
但是在我使用 Intel 5218R CPU 的测试中,clwb
大约是 700ns,ntstore
大约是 1200ns。当然,我的测试方法和论文是有区别的,但是结果太差了,不合理。而且我的测试更接近实际使用情况。
测试的时候是不是CPU的iMC的Write Pending Queue或者optane PM中的WC buffer成为了瓶颈,导致阻塞,测得的延迟不准确?如果是这种情况,是否有工具可以检测到它?
非常感谢任何帮助或更正!
x86 - (持久性)将英特尔非临时存储排序到同一缓存行
非临时存储(例如 movnti)是否由同一线程发布到同一缓存行,按程序顺序到达内存?
因此对于具有 NVRAM 的系统(例如具有 Intel 3D XPoint NVRAM 的 Intel Cascade Lake 处理器),在发生崩溃的情况下,缺乏重新排序可以保证写入同一缓存行的前缀占上风?
cuda - 从 GPU 到持久内存的 cudaMemcpy 是否需要向后刷新和围栏操作?
我正在从 GPU 到持久内存进行 cudaMemcpy 操作。在从 DRAM 到持久内存的 memcpy 操作的情况下,是否需要额外的刷新(clflush/clflushopt)和 sfence 操作以保持数据一致性?GPU是否也需要持久内存?还是由 Cuda 处理?
x86 - clwb+sfence,如果写入是缓存行对齐的,我们可以删除 sfence 吗?
根据 clwb 订购信息(链接),
" CLWB 指令仅按存储屏蔽操作排序。例如,软件可以使用 SFENCE、MFENCE、XCHG 或 LOCK 前缀指令来确保回写中包含以前的存储。CLWB 指令不需要按以下顺序排序“ _
如果 Intel X86-64 上的操作集如下所示,如果写入 (A) 和写入 (B) 是高速缓存行对齐的,我是否可以删除“ sfence ”并仍然确保正确性。
我问这个是因为在英特尔Write(A) 和 write(B)上是有序的 (TSO) 和write(A)->clwb(A)和write(B)->clwb(B)是按照上面引用的描述排序的clwb _
我正在做以下假设
- 编译器不会重新排序这些操作
- clwb() 指令将脏行写回到持久域,因此write(A)->clwb(A)对确保 A 的修改值在持久域中
请告诉删除sfence是否会破坏正确性?如果是,在什么情况下谢谢
c++ - 在系统上安装 pmdk 库后,程序给出错误“致命错误:libpmemkv.hpp:没有这样的文件或目录”
对于持久内存访问程序致命错误,我收到如下错误:libpmemkv.hpp:没有这样的文件或目录
我已经在系统上安装了 pmdk。但仍然收到此错误
cuda - 如果使用 cuda api 从 GPU 内存复制到持久内存,我是否需要外部调用刷新?
我正在使用 Cuda API:
cudaMemcpyAsync ( void* dst, const void* src, size_t count, cudaMemcpyKind kind, cudaStream_t stream = 0 )
从 CPU 内存中复制 GPU 内存中的数据。如果使用 memcpy() 将数据从 CPU 内存复制到持久内存,我们需要显式调用刷新操作(例如 clflush())以确保从 CPU 缓存中刷新数据。使用 cudaMemcpyAsync() 从 GPU 内存复制到持久内存时是否需要调用刷新操作?