什么是最快的x86汇编代码来同步对内存中数组的访问?最快的x86汇编代码来同步对数组的访问?
更确切地说:我们在内存中有一个malloc化的连续单页区域,操作系统在我们的实验期间不会调出这个区域。一个线程将写入数组,一个线程将从数组中读取。阵列很小,但比你的cpu的原子写入能力还要大(这样就需要一个单独的锁)
“最快”:有效速度:不只是假设字节码的长度很重要,考虑到关于周围代码的锁定和分支行为的缓存行为。
它具有上的x86-32和/或工作的x86-64
它必须在最上层的(或后代)工作的Windows XP以来,Linux的内核以来2.2,或MAXOS X(用户-模式)。
请不要“它取决于” - 回应:如果它取决于我在这里没有指定的任何东西,只需编写自己的示例并说明在那些/那些情况下最快的。
邮政编码! (这是为了防止模糊的描述)
邮政不仅是你的2线LOCK
+ CMPXCHG
比较&交换,但我们展示你如何在一个线程读取指令和其他写指令整合它。
如果您喜欢,请解释您对缓存最优化的调整,以及如果分支目标依赖于(1)是否获取锁定(2)较大的第一个字节-read是。
如果您喜欢区分多重处理和任务切换:如果线程不是在2 cpus上执行,而是只保留一个,您的代码将如何执行?
@Ken白:哈哈好笑。或者你是认真的?如果是这样的话:看看我使用的术语和我已经回答的问题。 – 2011-03-12 16:54:10
@Ken - 我会对把这种类型的问题作为家庭作业的学校非常感兴趣。 – linuxuser27 2011-03-12 16:55:38
@eznme,我读了使用的术语。它看起来像直接从教科书中出来的东西。 “不仅仅是发布你的2线......而是展示”。没有任何意图 - 它看起来并不像一个典型的问题所包含的东西。 @ linuxuser27,你看过MIT或RIT的任何高级课程吗? – 2011-03-12 17:00:48