首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >_mm512_storenr_pd和_mm512_storenrngo_pd

_mm512_storenr_pd和_mm512_storenrngo_pd
EN

Stack Overflow用户
提问于 2017-08-16 13:50:16
回答 1查看 248关注 0票数 3

局部放电局部放电有什么区别?

_mm512_storenr_pd(void * mt,__m512d v):

存储从v到内存地址mt的双精度(64位)浮点元素,并向处理器发送未读提示

我不清楚什么是不读的暗示。这是否意味着,它是一个非缓存的连贯写入。这是否意味着重用成本更高,或者不连贯?

_mm512_storenrngo_pd(void * mt,__m512d v):

使用弱有序内存一致性模型存储从v到内存地址mt的双精度(64位)浮点元素,并使用弱有序内存一致性模型(使用此函数执行的存储不是全局有序的,并且可以在它们之前观察到来自同一线程的后续存储)。

基本上与storenr_pd相同,但由于它使用弱一致性模型,这意味着进程可以在任何其他处理器之前查看自己的写操作。但是另一个处理器的访问是非相干的还是更昂贵的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-16 22:31:42

引用Intel Xeon Phi™协处理器矢量微体系结构的话:

通常,为了写入缓存行,Xeon™协处理器在写入缓存行之前需要在缓存行中读取。这被称为(RFO)。这个实现的一个问题是书面数据不被重用;我们不必要地使用BW来读取非时态数据。Intel™协处理器支持在数据为流存储区时不读取数据的指令。这些指令,VMOVNRAP*,VMOVNRNGOAP*允许您指示需要写入数据,而不必先读取数据。在Xeon中,VMOVNRAPS/VMOVNRPD指令可以通过不执行不必要的读取步骤来优化内存BW。 当程序员容忍应用程序数据的弱写入排序时,VMOVNRNGOAP*指令非常有用,也就是说,这些指令执行的存储不是全局排序的。这意味着在执行VMOVNRNGOAP指令之前,可以观察到同一线程的后续写入。如果多个线程正在对同一位置进行读写,则应与此操作一起使用内存围栏操作。

似乎"No-read提示“、”流存储“和”非时态流/存储“在多个资源中交替使用。

是的,这是一种非缓存的连贯写入,尽管对于骑士角(KNC,vmovnrap*和vmovnrngoap*都属于)存储发生在L2缓存中,但它没有绕过所有级别的缓存。

如前所述, VMOVNRNGOAP *vmovnrap*的特例,弱有序内存一致性模型允许“在执行VMOVNRNGOAP指令之前观察到同一线程的后续写入”,因此,对另一个线程或处理器的访问是非相干的,应该使用隔离操作。尽管CPUID可以用作围栏操作,但更好的选项是"LOCK ADD RSP,0“(一个虚拟原子添加)或XCHG (它将存储和栅栏组合在一起)。

还有几个细节:

  • 在KNC上,如果您使用编译器开关(选择流存储始终)或实用化(#实用化向量非时态),默认生成的代码将是VMOVNRNGOAP*从Composer XE 2013 Update 1开始;
  • 更多来自基于编译器的高性能计算系统内存优化的引号

NR存储.The NR存储指令(vmovnr)是一种可以安全使用的标准矢量存储指令。在本地缓存中丢失的NR存储指令将导致远程缓存中缓存行的所有潜在副本失效,缓存线在本地缓存中被分配(但不是初始化)处于独占状态,指令中的写数据将被写入缓存线。主存没有数据传输,这就节省了内存带宽。NR存储指令和来自同一线程的其他加载和/或存储指令是全局排序的,这意味着这个指令序列的所有观察者总是看到相同的固定执行顺序。 非全局有序( NR.NGO ,非全局有序)存储指令(Vmovnrngo)放松了NR存储instruction.This松弛的全局排序约束,使得NR.NGO指令具有比NRinstruction更低的延迟,可用于在流存储密集型应用中获得更高的性能。但是,删除此限制意味着两个观察者可以从同一个线程中观察到NR.NGO存储指令和其他加载和/或存储指令,以获得两个不同的顺序。只有在重新排序这些指令的顺序时,才能安全地使用NR.NGO存储指令,以避免更改结果。否则,使用NR.NGO存储可能导致不正确的执行。我们的编译器可以为它标识为具有非时态行为的存储指令生成NR.NGO存储指令。例如,被我们的编译器检测为非时态的并行循环可以使用NR.NGO指令。在这样一个循环的末尾,为了确保所有未完成的非全局有序存储被完成,并且所有线程都有一个一致的内存视图,我们的编译器在循环之后生成一个栅栏(一个锁指令)。在继续执行后续代码片段之前,需要使用这个栅栏,以确保所有线程都具有完全相同的内存视图。

一个普遍的经验法则是,非时态存储有利于内存访问块,这些访问块在不久的将来不会被重用。因此,在这两种情况下,重用都是昂贵的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45715429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档