linux – 是否有必要由程序员明确刷新组合内存?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了linux – 是否有必要由程序员明确刷新组合内存?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1497字,纯文字阅读大概需要3分钟。
内容图文
![linux – 是否有必要由程序员明确刷新组合内存?](/upload/InfoBanner/zyjiaocheng/955/919d1e576c3c47f6a3ca7698be388d5b.jpg)
我知道写入组合写入将被缓存,并且不会直接到达内存.
但是,在其他人可以访问之前,程序员是否有必要明确地清除这个内存?
我从图形驱动程序代码中得到了这个问题.例如,CPU填充顶点缓冲区(映射为WC).但在GPU访问之前,我没有在代码中看到任何刷新操作.
架构(x86)已经为我们解决了这个问题吗?关于这个的更详细的文件?
解决方法:
根据英特尔®64和IA-32架构软件开发人员手册,第3A卷:系统编程指南,第1部分(2012年8月版,但这不应该更改),第11.3.1节,必须刷新缓冲区:
The protocol for evicting the WC buffers is implementation dependent and should not be relied on by software for system memory coherency. When using the WC memory type, software must be sensitive to the fact that the writing of data to system memory is being delayed and must deliberately empty the WC buffers when system memory coherency is required.
如果图形驱动程序实际上没有刷新写入组合缓冲区,那么它们取决于系统特定的时序和/或缓冲区大小(假设后续的WC写入将被分配给缓冲区,这在架构上没有保证).这可能在普通工作负载下的现有系统上工作(或似乎工作),但在架构上保证不起作用.
由于广泛的序列化事件将刷新写入组合缓冲区,因此很可能存在刷新操作/事件但不明显(如SFENCE所示).英特尔®64和IA-32架构软件开发人员手册(版本052,2014年9月),第3卷,第11.3节可用的缓存方法:
If the WC buffer is partially filled, the writes may be delayed until the next occurrence of a serializing event; such as, an SFENCE or MFENCE instruction, CPUID execution, a read or write to uncached memory, an interrupt occurrence, or a LOCK instruction execution.
例如,写入GPU寄存器(如果映射到未缓存的存储器)将刷新写入组合缓冲区.
内容总结
以上是互联网集市为您收集整理的linux – 是否有必要由程序员明确刷新组合内存?全部内容,希望文章能够帮你解决linux – 是否有必要由程序员明确刷新组合内存?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。