我在寻找一个基准之间的差异的存储器模型的使用。净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)因此,任何发布方式测试在一个不是代表其他反之亦然。测试作为合适。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top