找回密码
 欢迎注册
查看: 55812|回复: 63

[擂台] 大数运算基选择测试

[复制链接]
发表于 2008-4-1 20:52:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
两个二进制数字, bit位长度是28*30*32
分别用28,30,32个bit为一个处理单位
做加法和乘法
测试在不同基选择下的效果
===============================
这么写如果不妥, 你们可提出意见
咱一起商量测试方案
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-4-1 21:01:16 | 显示全部楼层
应该加上一些限制,如不得使用高级算法,如分治法,toom-cook 算法等。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2008-4-1 21:09:45 | 显示全部楼层
28*30*32=26880 除非有贼快的FFT处理器,否则没人敢用FFT 同样Toom-n在这么小,优势也不大 就那个K算法还能加速 如果位数太大 可以考虑做多次测试 28*32, 28*30,30*32各一次
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2008-4-2 07:56:47 | 显示全部楼层
//我先提交我的函数,由旧代码修改成 //终于接近完美了,不过还有几条指令似乎可以省掉 //怎么省想不出来 :) void lMul_yaos(uint32 *result, uint32 *left, uint32 *right, uint32 sLeft, uint32 sRight) { __asm { mov edx, sLeft mov esi, dword ptr [left] mov edi, dword ptr [right] mov ebx, dword ptr [result] mbinmul2: mov eax, ebx pxor mm0, mm0 mov ecx, sRight movd mm1, dword ptr [esi] mov ebp, edi mbinmul3: movd mm2, dword ptr [edi] lea edi, [edi+4] movd mm3, dword ptr [ebx] pmuludq mm2, mm1 paddq mm0, mm3 paddq mm0, mm2 movd dword ptr [ebx], mm0 psrlq mm0, 32 lea ebx, [ebx+4] sub ecx, 1 jnz mbinmul3 mov edi, ebp movd dword ptr [ebx], mm0 mov ebx, eax lea esi, [esi+4] lea ebx, [ebx+4] sub edx, 1 jnz mbinmul2 emms } }
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-4-2 07:56:49 | 显示全部楼层
建议将测试的bit长度缩小为:7*15*32 = 3360 在 28*30*32bits 时早该用更好的算法了。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2008-4-2 08:26:01 | 显示全部楼层
好 同意你的意见 我只管提交我的标准32位乘法 具体测试你们来 :)
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2008-4-2 09:39:36 | 显示全部楼层
我的代码必须配合一个清零函数 等我写来 :)
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-4-2 11:01:08 | 显示全部楼层
我打算 完全用C 编写一个程序,看看你的那个使用 SSE2 指令编写的程序能比我的C版的程序快多少。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2008-4-2 11:24:19 | 显示全部楼层
有限的很吧 假设我的时间是100 C写的应该在120-160之间
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2008-4-2 11:42:42 | 显示全部楼层
原帖由 无心人 于 2008-4-2 11:24 发表 有限的很吧 假设我的时间是100 C写的应该在120-160之间
由那个128bit * 128 bit 帖子,得出一个结论,使用MMX寄存器的版本(96楼)最高可比使用ALU指令的版本(102楼)快2.33倍(在我的电脑上,前者运行时间为400.665,或者运行时间为935.273),也就是说 使用 MMX的版本 加速比 可达 2.33倍. 退一步,完全使用c的版本性能可以达到102楼的性能, 我的C版程序运行时间应为 你的4#楼那个版本的2.33倍,你说预计可达你的你的版本的120-160%, 这等于承认了基为$2^30$的版本速度为基为$2^32$版本的 146%- 194%.
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

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

GMT+8, 2024-11-23 17:31 , Processed in 0.026597 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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