之间的差异x86/64/ia64存储器模型。净
-
12-09-2019 - |
题
我在寻找一个基准之间的差异的存储器模型的使用。净CLR/JIT在x86/64/ia64.我知道有一些差异之间的x86和ia64(指令重新排序,指示清除等), 但我还没有找到一个基准之间的差异x86和64.
我有一个应用程序,目的是为一些非常紧张的等待时间的数字,只将运行在x86在这个时候,也许在64(肯定不在ia64).我想知道,如果我可以依赖的一些文物的x86JIT执行情况和仍然相对安全的关64,或者如果我被编程的更宽松的ia64JIT(这将需要更多的领域是volitile和存的障碍以插在几个地方)。
预先感谢任何的指针。
其他提示
在.NET存储器模型在ECMA规范ISO / IEC-23271指定。特别是在分区I:概念和体系结构,12.6章“内存模型和优化”。
此标准定义了JIT可以在操作的边界。如果你想成为中性的体系结构,应按照此标准,而不是利用在x86 / x64即时编译器的任何具体细节。
此外x64的是一种进化到86,它由主要是额外的指令,寄存器和一些扩展(SSE2)被定义为基线为所有的x64兼容处理器。还有的是给内存模型几乎没有变化,除了额外的地址空间和更多的寻址模式(指令指针相关的数据访问。)因此优化了针对x86 JIT应该在x64产生良好的效果了。
这可能是太低级了你你但一些老年AMD64位cpu没有CMPXCHG16B (来源)如果依赖作为一个硬件非阻挡的指令。
还有,似乎是 改变在存储器模型用C++ 这可能是相关的,所以你可能需要保留一只眼睛如果你正在做的非常低的水平码。
存储器模型'规定'通过CLR是一个正在进行的主题辩论的内Microsoft(公开讨论,至少可以追溯 2003).作为一个侧面注意到克里斯Brumme国在该条中,该模型的64相同x86我会假设是准确声明的目的CLR托管的代码。
除非你的目标用户明确地包括安腾,我就认为,只包括一个后备,速度较慢,但简单的安全,实施该体系将是足够的正确性。有那么没有必要指明你们的软件是在该平台,只是它的工作在一个较慢的后备模式。如果人们接着要使用的平台严重,你可以代码, 很多 宽松的模型。
注意64JIT是不同的x86JIT(明显,因为3.5sp1)因此,任何发布方式测试在一个不是代表其他反之亦然。测试作为合适。