找回密码
 欢迎注册
楼主: 无心人

[擂台] x86上128位二进制乘法最快速算法征解

[复制链接]
发表于 2008-3-27 11:12:32 | 显示全部楼层
我的笔记本是core2的,有没有完整的直接可以编译的工程文件,我可以给你们测试一下看看。 呵呵,我现在对汇编不感兴趣,看不懂你们写的东东,所以工程要弄的容易一些,最好直接编译然后运行就行。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-3-27 11:26:27 | 显示全部楼层
那太好了,我在 69# 里的附件:http://emath.5d6d.com/attachment.php?aid=151 已含有除 76# 之外的所有待测函数的源代码及编译好的程序, 麻烦测试一下,最好是添加上 liangbch 76F 的那个版本。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2008-3-27 11:40:33 | 显示全部楼层
看到了PMOVZXDQ 可惜是4.1的 而且至今没双字加乘指令 恨啊
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-3-27 12:42:02 | 显示全部楼层
忽然想起一件事情,不知mathe使用的是什么编译器,能否编译SSE2指令。我用的是VC6,需要打上补丁才能编译SSE2指令。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-3-27 12:44:35 | 显示全部楼层
用mingw下的 gcc(我的版本3.4.5) g++ -O2 -msse2 最近发现很多情况下比vc(2008 ,2005 ,6)生成代码速度要好点(10%)
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-3-27 13:01:05 | 显示全部楼层
Test function: UInt128x128To256_ANSI_C32(..) 10000000 times... Elapsed time: 556.370 ms F948343B 548A79E4 C7747A7F 50B043E3 * 11701FE6 1BB04BEF 90B2210D 9FBE6FE9 = 10FAFA1E 9ABA944F D7D327C7 0A9CF98F FC7C1B26 10B148C6 BD45C460 3D57369B Test function: UInt128x128To256_SSE2_40F(..) 10000000 times... Elapsed time: 572.960 ms F948343B 548A79E4 C7747A7F 50B043E3 * 11701FE6 1BB04BEF 90B2210D 9FBE6FE9 = 10FAFA1E 9ABA944F D7D327C7 0A9CF98F FC7C1B26 10B148C6 BD45C460 3D57369B Test function: UInt128x128To256_SSE2_42F(..) 10000000 times... Elapsed time: 337.016 ms F948343B 548A79E4 C7747A7F 50B043E3 * 11701FE6 1BB04BEF 90B2210D 9FBE6FE9 = 10FAFA1E 9ABA944F D7D327C7 0A9CF98F FC7C1B26 10B148C6 BD45C460 3D57369B Test function: UInt128x128To256_SSE2_54F(..) 10000000 times... Elapsed time: 469.597 ms F948343B 548A79E4 C7747A7F 50B043E3 * 11701FE6 1BB04BEF 90B2210D 9FBE6FE9 = 10FAFA1E 9ABA944F D7D327C7 0A9CF98F FC7C1B26 10B148C6 BD45C460 3D57369B Test function: UInt128x128To256_SSE2_56F(..) 10000000 times... Elapsed time: 414.884 ms F948343B 548A79E4 C7747A7F 50B043E3 * 11701FE6 1BB04BEF 90B2210D 9FBE6FE9 = 10FAFA1E 9ABA944F D7D327C7 0A9CF98F FC7C1B26 10B148C6 BD45C460 3D57369B Test function: UInt128x128To256_SSE2_58F(..) 10000000 times... Elapsed time: 424.711 ms F948343B 548A79E4 C7747A7F 50B043E3 * 11701FE6 1BB04BEF 90B2210D 9FBE6FE9 = 10FAFA1E 9ABA944F D7D327C7 0A9CF98F FC7C1B26 10B148C6 BD45C460 3D57369B Test function: UInt128x128To256_SSE2_69F(..) 10000000 times... Elapsed time: 432.494 ms F948343B 548A79E4 C7747A7F 50B043E3 * 11701FE6 1BB04BEF 90B2210D 9FBE6FE9 = 10FAFA1E 9ABA944F D7D327C7 0A9CF98F FC7C1B26 10B148C6 BD45C460 3D57369B 42F最快(直接运行下载的附件,没有重新编译)
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-3-27 13:06:21 | 显示全部楼层
添加了76F,这个最快,只是编译时要报告警告: warning C4799: function 'UInt128x128To256_SSE2_76F' has no EMMS instruction 这个是什么? Test function: UInt128x128To256_ANSI_C32(..) 10000000 times... Elapsed time: 1232.114 ms 510273F7 F068776C 608E1B2B FF4C2014 * BC400092 1D501F38 E5E80D2B E9440BE8 = 3B920DF5 4F359701 2EA095F0 E982E5E3 F588D808 7DC09141 948A049E 5BADEE20 Test function: UInt128x128To256_SSE2_40F(..) 10000000 times... Elapsed time: 419.712 ms 510273F7 F068776C 608E1B2B FF4C2014 * BC400092 1D501F38 E5E80D2B E9440BE8 = 3B920DF5 4F359701 2EA095F0 E982E5E3 F588D808 7DC09141 948A049E 5BADEE20 Test function: UInt128x128To256_SSE2_42F(..) 10000000 times... Elapsed time: 396.373 ms 510273F7 F068776C 608E1B2B FF4C2014 * BC400092 1D501F38 E5E80D2B E9440BE8 = 3B920DF5 4F359701 2EA095F0 E982E5E3 F588D808 7DC09141 948A049E 5BADEE20 Test function: UInt128x128To256_SSE2_54F(..) 10000000 times... Elapsed time: 518.339 ms 510273F7 F068776C 608E1B2B FF4C2014 * BC400092 1D501F38 E5E80D2B E9440BE8 = 3B920DF5 4F359701 2EA095F0 E982E5E3 F588D808 7DC09141 948A049E 5BADEE20 Test function: UInt128x128To256_SSE2_56F(..) 10000000 times... Elapsed time: 406.312 ms 510273F7 F068776C 608E1B2B FF4C2014 * BC400092 1D501F38 E5E80D2B E9440BE8 = 3B920DF5 4F359701 2EA095F0 E982E5E3 F588D808 7DC09141 948A049E 5BADEE20 Test function: UInt128x128To256_SSE2_58F(..) 10000000 times... Elapsed time: 432.254 ms 510273F7 F068776C 608E1B2B FF4C2014 * BC400092 1D501F38 E5E80D2B E9440BE8 = 3B920DF5 4F359701 2EA095F0 E982E5E3 F588D808 7DC09141 948A049E 5BADEE20 Test function: UInt128x128To256_SSE2_69F(..) 10000000 times... Elapsed time: 437.080 ms 510273F7 F068776C 608E1B2B FF4C2014 * BC400092 1D501F38 E5E80D2B E9440BE8 = 3B920DF5 4F359701 2EA095F0 E982E5E3 F588D808 7DC09141 948A049E 5BADEE20 Test function: UInt128x128To256_SSE2_76F(..) 10000000 times... Elapsed time: 293.336 ms 510273F7 F068776C 608E1B2B FF4C2014 * BC400092 1D501F38 E5E80D2B E9440BE8 = 3B920DF5 4F359701 2EA095F0 E982E5E3 F588D808 7DC09141 948A049E 5BADEE20
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-3-27 13:19:15 | 显示全部楼层
原帖由 mathe 于 2008-3-27 13:06 发表 添加了76F,这个最快,只是编译时要报告警告: warning C4799: function 'UInt128x128To256_SSE2_76F' has no EMMS instruction 这个是什么? ...
因为其中用了 MMX 寄存器,需要执行 EMMS 指令才能正常使用浮点计算单元。 谢谢 mathe 的测试, 结果部分在意料之中:比如 56F 会比 58F 快; 部分在意料之外,比如说 42F 的不俗表现,以及 ANSI_C32 版本不同编译的巨大反差。。。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-3-27 13:30:15 | 显示全部楼层
那没有调用是否结果会不正确,从而测试数据不准?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-3-27 13:30:53 | 显示全部楼层
我用的VC2005应该没有问题
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-11-23 16:07 , Processed in 0.029361 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表