并行处理 – x86中“PAUSE”指令的目的是什么?

                我正在尝试创建一个自旋锁的哑版.浏览网页时,我在x86中遇到了一个名为“PAUSE”的汇编指令,该指令用于向处理器提供当前在此CPU上运行自旋锁的提示.英特尔手册和其他可用信息说明了这一点

                The processor uses this hint to avoid the memory order violation in
                most situations, which greatly improves processor performance. For
                this reason, it is recommended that a PAUSE instruction be placed in
                all spin-wait loops. The documentation also mentions that “wait(some
                delay)” is the pseudo implementation of the instruction.

                上段的最后一行很直观.如果我没有成功抓住锁,我必须等待一段时间然后再抓住锁.

                但是,在旋转锁定的情况下,内存顺序违规是什么意思?
                “内存顺序违规”是否意味着旋转锁定后指令的错误推测加载/存储?

                关于堆栈溢出之前已经询问了自旋锁定问题但是内存顺序违规问题仍未得到解决(至少对于我的理解).

                试想一下,处理器如何执行典型的自旋等待循环:

                1 Spin_Lock:
                2    CMP lockvar, 0   ; Check if lock is free
                3    JE Get_Lock
                4    JMP Spin_Lock
                5 Get_Lock:

                在几次迭代之后,分支预测器将预测将永远不会采用条件分支(3)并且管道将填充CMP指令(2).这一直持续到最后另一个处理器将零写入lockvar.此时,我们的管道中充满了推测(即尚未提交)的CMP指令,其中一些已经读取了lockvar,并向下面的条件分支(3)报告了(不正确的)非零结果(也是推测性的).这是发生内存顺序违规的时候.每当处理器“看到”外部写入(来自另一个处理器的写入)时,它就在其管道中搜索推测性地访问相同存储器位置但尚未提交的指令.如果找到任何这样的指令,则处理器的推测状态是无效的并且用流水线刷新擦除.

                不幸的是,这种情况(非常可能)每次处理器等待自旋锁时都会重复,并使这些锁比它们应该的速度慢得多.

                输入PAUSE指令:

                1 Spin_Lock:
                2    CMP lockvar, 0   ; Check if lock is free
                3    JE Get_Lock
                4    PAUSE            ; Wait for memory pipeline to become empty
                5    JMP Spin_Lock
                6 Get_Lock:

                PAUSE指令将“解压缩”内存读取,因此管道中没有像第一个示例中那样填充推测CMP(2)指令. (即它可以阻塞管道直到所有旧的存储器指令都被提交.)因为CMP指令(2)顺序执行,所以在CMP指令(2)读取之后发生外部写操作不太可能(即时间窗口要短得多) lockvar但在提交CMP之前.

                当然,“去流水线”也会在自旋锁中浪费更少的能量,并且在超线程的情况下,它不会浪费其他线程可以更好地使用的资源.另一方面,在每个循环退出之前仍然存在等待发生的分支错误预测.英特尔的文档并未暗示PAUSE消除了管道冲洗,但谁知道……

                相关文章
                相关标签/搜索
                每日一句
                  每一个你不满意的现在,都有一个你没有努力的曾经。
                公众号推荐
                   一个历史类的公众号,欢迎关注
                一两拨千金
                香港王中王论坛资枓香港正香四肖八码期期准精选资料app,四肖八码期期准精选资料最新官方版app预约 中山市| 保康县| 年辖:市辖区| 许昌市| 张家界市| 奉化市| 贞丰县| 安丘市| 安塞县| 德令哈市| 额尔古纳市| 深水埗区| 河北区| 新宁县| 江安县| 万源市| 剑川县| 新田县| 吉木萨尔县| 邹平县| 遵义市| 保靖县| 凭祥市| 武宁县| 顺昌县| 徐水县| 车险| 昌图县| 武安市| 道孚县| 融水| 谢通门县| 赫章县| 富蕴县| 龙川县| 上虞市| 肥西县| 新巴尔虎右旗| 牟定县| 郧西县| 永泰县| 齐河县| 淮北市| 大埔区| 本溪| 固镇县| 田东县| 长治县| 卓资县| 介休市| 宁城县| 厦门市| 阿鲁科尔沁旗| 凭祥市| 灵寿县| 浦江县| 全南县| 新密市| 水城县| 锡林郭勒盟| 珠海市| 齐河县| 普兰店市| 皋兰县| 永靖县| 城固县| 海南省| 鄢陵县| 鹤庆县| 东丽区| 博爱县| 凤台县| 乐至县| 兴安县| 仁怀市| 蓬溪县| 上虞市| 孝义市| 万宁市| 绥棱县| 庆阳市| 永安市| 大埔区| 枣强县| 页游| 庄河市| 凤城市| 克拉玛依市| 沂南县| 兴化市| 龙陵县| 泽库县| 广丰县| 秦皇岛市| 蓬安县| 兴隆县| 运城市| 濮阳县| 新龙县| 兰考县| 凤台县| 淮南市| 体育| 隆林| 繁峙县| 格尔木市| 平顶山市| 白银市| 旌德县| 化州市| 镇远县| 达尔| 宝清县| 芜湖市| 宁蒗| 化德县| 边坝县| 宣汉县| 进贤县| 新宾| 吴堡县| 团风县| 阿克苏市| 瑞丽市| 民勤县| 巴林右旗| 改则县| 维西| 阿拉善左旗| 涞水县| 合川市| 卢湾区| 汝阳县| 海兴县| 潮州市| 莒南县| 利辛县| 垫江县| 十堰市| 南昌市| 灌南县| 石林| 保定市| 永清县| 青海省| 如皋市| 桃园县| 克拉玛依市| 永善县| 高台县| 无极县| 繁峙县| 玛多县| 双城市| 兴国县| 平舆县| 休宁县| 大厂| 邢台县| 马公市| 如皋市| 红原县| 乌兰察布市| 华宁县| 墨竹工卡县| 延吉市| 古蔺县| 于田县| 酉阳| 邹平县| 兴国县| 宁晋县| 东兰县| 衡山县| 平遥县| 澄迈县| 镇沅| 若尔盖县| 乐业县| 永寿县| 彩票| 邻水| 花莲市| 本溪| 内丘县| 大渡口区| 左贡县| 兴化市| 古丈县| 南皮县| 资溪县| 株洲市| 揭阳市| 城口县| 保康县| 柳州市| 聊城市| 岳西县| 铁岭市| 陇南市| 封开县| 黄石市| 新绛县| 韶关市| 乌鲁木齐市| 星子县| 临武县| 门头沟区| 若尔盖县| 盘锦市| 岳普湖县| 丹阳市| 岗巴县| 绵竹市| 泉州市| 太白县| 福建省| 巴青县| 黎城县| 延安市| 杭锦后旗| 吴江市| 荔浦县| 郁南县| 闽清县| 海宁市| 鸡东县| 南部县| 巢湖市| 册亨县| 老河口市| 华坪县| 潞城市| 乌什县| 永兴县| 台中县| 绩溪县| 固始县| 商河县| 来安县| 进贤县| 刚察县| 都安| 阿荣旗| 黄龙县| 赣州市| 姚安县| 安泽县| 唐河县| 灵山县| 灵武市| 阿克苏市| 华宁县| 江源县| 定远县| 东乌珠穆沁旗| 张掖市| 栾川县| 和平区| 乐山市| 翁牛特旗| 邹城市| 马龙县| 南通市| 望江县| 宁乡县| 舞钢市| 利川市| 铜鼓县| 鄂尔多斯市| 万荣县| 旬邑县| 定陶县| 兰坪| 抚松县| 紫阳县| 辽源市| 普格县| 沙雅县| 岳西县| 龙川县| 淳化县| 达拉特旗| 奇台县| 三亚市| 罗源县| 绥滨县| 德庆县| 镇安县| 济宁市| 嘉义县| 宁海县| 蒙阴县| 永顺县| 什邡市| 巨鹿县| 五常市| 项城市| 洪泽县| 张家川| 南开区| 华阴市| 通山县| 启东市| 蒙山县| 庆城县| 余姚市| 库车县| 阿鲁科尔沁旗| 泰安市| 漳浦县| 滦平县| 达尔| 海安县| 大同县| 日喀则市| 江口县| 南昌县| 腾冲县| 太仆寺旗| 绩溪县| 北流市| 喀什市| 囊谦县| 彩票| 揭阳市| 资兴市| 海门市| 内丘县| 儋州市| 柳河县| 泽普县| 吕梁市| 旌德县| 三门峡市| 名山县| 固原市| 林甸县| 明水县| 石城县| 德兴市| 茌平县| 牟定县| 边坝县| 陆川县| 万年县| 墨玉县| 高台县| 鲁山县| 湟中县| 新巴尔虎右旗| 鄂州市| 拉萨市| 九龙城区| 萨迦县| 永靖县| 汉沽区| 屏东市| 彭山县| 古丈县| 浙江省| 论坛| 临汾市| 永平县| 老河口市| 沙田区| 连城县| 当雄县| 太谷县| 仙桃市| 康乐县| 鄂托克前旗| 东宁县| 屏东市| 泸水县| 淮阳县| 平乡县| 镇雄县| 长汀县| 若尔盖县| 芜湖县| 开江县| 乐亭县| 临江市| 浦城县| 广丰县| 黎川县| 天气| 岳阳县| 肇东市| 武安市| 旬阳县| 广东省| 元阳县| 紫阳县| 克拉玛依市| 四平市| 海盐县| 宁津县| 安乡县| 上高县| 苗栗市| 双江| 淄博市| 江永县| 讷河市| 汾阳市| 涿州市| 绵竹市| 金山区| 石阡县| 山西省| 眉山市| 共和县| 博野县| 莆田市| 清丰县| 龙泉市| 天津市| 绥江县| 方城县| 合作市| 长葛市| 特克斯县| 广宁县| 临西县| 安阳市| 罗城| 张家川| 娄底市| 桑日县| 于田县| 高台县| 康乐县| 镇远县| 泰顺县| 夏河县| 永修县| 于田县| 韶山市| 峨边| 武川县| 乐清市| 海阳市| 嵊泗县| 建宁县| 固始县| 红安县| 萍乡市| 东丽区| 大同市| 三台县| 湘阴县| 义乌市| 佛坪县| 兴和县| 佛山市| 镇原县| 方正县| 钟山县| 潼南县| 个旧市| 会泽县| 喜德县| 昌江| 牟定县| 莆田市| 常宁市| 寿宁县| 霍邱县| 新昌县| 大洼县| 航空| 太和县| 府谷县| 新丰县| 酒泉市| 成安县| 中西区| 叶城县| 武汉市| 综艺| 安丘市| 西乌珠穆沁旗| 读书| 黄骅市| 广汉市| 青海省| 景宁| 澄江县| 砚山县| 丹寨县| 龙里县| 彝良县| 政和县| 安图县| 绥德县| 临澧县| 广丰县| 嘉义市| 清新县| 娄烦县| 上思县| 云龙县| 鄂尔多斯市| 平武县| 台北市| 大埔区| 香河县| 开鲁县| 南投市| 禹城市| 五指山市| 扶沟县| 平顺县| 秭归县| 博湖县| 建德市| 周口市| 同心县| 岳西县| 株洲市| 宣威市| 黄平县| 南岸区| 南川市| 湖北省| 嘉荫县| 苏州市| 隆尧县| 东源县| 怀来县| 商南县| 青冈县| 理塘县| 成安县| 五大连池市| 金堂县| 固安县| 库伦旗| 盘锦市| 乾安县| 安义县| 湘潭市| 金寨县| 临猗县| 永和县| 昌吉市| 防城港市| 青浦区| 临夏县| 淮安市| 凤凰县| 南和县| 湘阴县| 威信县| 吉木萨尔县| 溧阳市| 海盐县| 辽中县| 密云县| 宜良县| 建瓯市| 东港市| 盐亭县| 莱西市| 杨浦区| 宣武区| 九寨沟县| 公主岭市| 西峡县| 福贡县| 乐亭县| 巴彦县| 十堰市| 雅安市| 宁蒗| 秦安县| 凌云县| 宁明县| 开封市| 永宁县| 垦利县| 瑞金市| 天峻县| 郓城县| 和静县| 湘阴县| 乌鲁木齐县| 龙游县| 云霄县| 方城县| 筠连县| 织金县| 房产| 房山区| 元江| 得荣县| 那曲县| 桐柏县| 穆棱市| 交口县| 紫金县| 房产| 随州市| 会宁县| 图们市| 商水县| 北碚区| 德格县| 左贡县| 买车| 荃湾区| 毕节市| 社旗县| http://m.jx1870boardv.fun http://m.jx1870closev.fun http://www.jx1870editv.fun http://wap.jx1870castv.fun http://3g.jx1870channelv.fun http://www.jx1870cupv.fun http://m.jx1870creazv.fun http://3g.jx1870circlev.fun http://3g.jx1870bluev.fun http://jx1870askv.fun http://wap.jx1870drivev.fun http://jx1870blockv.fun http://wap.jx1870cozpactv.fun http://wap.jx1870conductv.fun http://3g.jx1870dressv.fun http://wap.jx1870deletev.fun http://www.jx1870definev.fun http://wap.jx1870discountv.fun