[准备/原创]:亲身体验多核/超线程

大熊猫侯佩
iOS开发领域优质创作者
博客专家认证
2006-06-30 03:55:42
背包问题,我写了两个版本的算法程序,bag 和 bag-mt 其中后者是多线程版本,其
使用 4 线程分段计算验证,编写语言是 ASM ,感性趣的可以索取源代码。
计算耗时结果如下:

在计算 2^24 方时:

bag : 平均耗时 5500 ms

bag-mt : 平均耗时 5050 ms

我的cpu为 AMD 2400+ ,各位看官可能要奇怪了,这个不是超线程或多核处理器啊?
的确,我还没在多核上试(全部倒!),以下是测试计划:

AMD 2800+ 64bit

intel 至强 超线程 2.4GB x 2 logic

intel 至强 物理双cpu,每个都是超线程 2.4 x 2 logic (一共4个逻辑cpu)

各位期待吧,呵呵
...全文
1313 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
大熊猫侯佩 2006-12-25
  • 打赏
  • 举报
回复
贴在上面了啊!
jbzj 2006-12-25
  • 打赏
  • 举报
回复
我想要源代码看一下啊,可以吗?
jszahhm@hotmail.com
大熊猫侯佩 2006-10-31
  • 打赏
  • 举报
回复
en
佛萍 2006-10-23
  • 打赏
  • 举报
回复
up~~~
大熊猫侯佩 2006-10-20
  • 打赏
  • 举报
回复
up~
WYlslrt 2006-09-26
  • 打赏
  • 举报
回复
mark好贴
大熊猫侯佩 2006-09-24
  • 打赏
  • 举报
回复
顶起~
  • 打赏
  • 举报
回复
看来对一些配置来说,效果还是很明显的。

希望多一些这方面的测试报告,很有益处。
pjie131 2006-07-20
  • 打赏
  • 举报
回复
期待进一步的测试结果,可惜我帮不上忙,没有机子。
大熊猫侯佩 2006-07-20
  • 打赏
  • 举报
回复
谢谢楼上,我周围的机器试的差不多了//
大熊猫侯佩 2006-07-19
  • 打赏
  • 举报
回复
tks~
elite01 2006-07-13
  • 打赏
  • 举报
回复
哦,期待
大熊猫侯佩 2006-07-13
  • 打赏
  • 举报
回复
up
大熊猫侯佩 2006-07-12
  • 打赏
  • 举报
回复
主要就是计算啊!
cpio 2006-07-11
  • 打赏
  • 举报
回复

光是计算啊,有没有其它的处理
大熊猫侯佩 2006-07-11
  • 打赏
  • 举报
回复
对于 bag-mt 略作说明:

a 采用的是 4 线程'并发'

b 使用了 对象等待 win32 API

以上代码均用 masm32v8.2 编译连接通过,其编译连接指令为:

ml /c /coff name.asm
link /subsystem:console name.obj

欢迎大家用编译连接后的 exe 作测试,并贴上测试结果,同时给出cpu类型
masm32 编译器请到:

www.masm32.com 或 www.aogosoft.com 下载,有问题请和我联系。
大熊猫侯佩 2006-07-10
  • 打赏
  • 举报
回复
up
大熊猫侯佩 2006-07-10
  • 打赏
  • 举报
回复
bag-mt:

.386
.model flat,stdcall
option casemap:none

include c:\masm32\include\windows.inc
include c:\masm32\include\user32.inc
includelib c:\masm32\lib\user32.lib
include c:\masm32\include\kernel32.inc
includelib c:\masm32\lib\kernel32.lib

CDim equ 28

cst struct
sf dd ?
ef dd ?
tts dd ?
mw dd ?
mv dd ?
cst ends

.const
wet db 220,56,79,135,21,5,175,90,11,153 ;KG
db 25,68,123,35,8,94,207,2,67,159
db 78,34,43,12,167,231,12,54,98,32
db 65,146,57,234,65,93,56,243,8,56
val db 60,100,45,26,90,10,57,240,136,230 ;$
db 78,34,7,23,89,250,129,94,45,24
db 56,89,34,124,78,5,45,234,89,32
db 34,72,50,147,180,210,45,18,69,94
limwet dd 400 ;Limit Wet
ft0 db 'TTs == %d ,MaxWet == %d , MaxVal == %d ',0
ft1 db 'Total TakeTime == %d',0
cp db 'Windows XP',0

.data
cst0 cst <1,4000000h,0,0,0>
cst1 cst <4000001h,8000000h,0,0,0>
cst2 cst <8000001h,0c000000h,0,0,0>
cst3 cst <0c000001h,0fffffffh,0,0,0>

.data?
tmptime dd ?
ht0 dd ?
ht1 dd ?
ht2 dd ?
ht3 dd ?
buf db 256 dup(?)

.code
;~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
EnumCt proc lpcst
local TmpWet
local Tmpnbn
local i

mov edi,lpcst
assume edi:ptr cst

push [edi].sf
pop Tmpnbn
mov TmpWet,0
mov edx,[edi].ef

.while Tmpnbn<=edx ;2^CDim - 1
mov i,0
xor ebx,ebx
.while i<CDim
mov eax,i

bt Tmpnbn,eax
.if CARRY?
mov al,wet[eax]
and eax,0ffh
add ebx,eax
.endif
inc i
.endw
.if ebx > limwet
jmp a0
.endif
mov TmpWet,ebx
mov i,0
xor ebx,ebx
.while i<CDim
mov eax,i

bt Tmpnbn,eax
.if CARRY?
mov al,val[eax]
and eax,0ffh
add ebx,eax
.endif
inc i
.endw
.if ebx > [edi].mv
mov [edi].mv,ebx
mov ebx,TmpWet
mov [edi].mw,ebx
.endif
a0:
inc [edi].tts
inc Tmpnbn
.endw

ret

EnumCt endp
;~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
start:
invoke GetTickCount
mov tmptime,eax

invoke CreateThread,NULL,0,addr EnumCt,addr cst0,\
NULL,NULL
mov ht0,eax
invoke CreateThread,NULL,0,addr EnumCt,addr cst1,\
NULL,NULL
mov ht1,eax
invoke CreateThread,NULL,0,addr EnumCt,addr cst2,\
NULL,NULL
mov ht2,eax
invoke CreateThread,NULL,0,addr EnumCt,addr cst3,\
NULL,NULL
mov ht3,eax
invoke WaitForMultipleObjects,4,addr ht0,TRUE,INFINITE

invoke GetTickCount
sub eax,tmptime
mov tmptime,eax

invoke wsprintf,addr buf,addr ft0,cst0.tts,cst0.mw,cst0.mv
invoke MessageBox,NULL,addr buf,addr cp,MB_OK
invoke wsprintf,addr buf,addr ft0,cst1.tts,cst1.mw,cst1.mv
invoke MessageBox,NULL,addr buf,addr cp,MB_OK
invoke wsprintf,addr buf,addr ft0,cst2.tts,cst2.mw,cst2.mv
invoke MessageBox,NULL,addr buf,addr cp,MB_OK
invoke wsprintf,addr buf,addr ft0,cst3.tts,cst3.mw,cst3.mv
invoke MessageBox,NULL,addr buf,addr cp,MB_OK
invoke wsprintf,addr buf,addr ft1,tmptime
invoke MessageBox,NULL,addr buf,addr cp,MB_OK


invoke ExitProcess,NULL
;~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
end start
大熊猫侯佩 2006-07-10
  • 打赏
  • 举报
回复
bag:

.386
.model flat,stdcall
option casemap:none

include c:\masm32\include\windows.inc
include c:\masm32\include\user32.inc
includelib c:\masm32\lib\user32.lib
include c:\masm32\include\kernel32.inc
includelib c:\masm32\lib\kernel32.lib

CDim equ 28

.const
wet db 220,56,79,135,21,5,175,90,11,153 ;KG
db 25,68,123,35,8,94,207,2,67,159
db 78,34,43,12,167,231,12,54,98,32
db 65,146,57,234,65,93,56,243,8,56
val db 60,100,45,26,90,10,57,240,136,230 ;$
db 78,34,7,23,89,250,129,94,45,24
db 56,89,34,124,78,5,45,234,89,32
db 34,72,50,147,180,210,45,18,69,94
limwet dd 400 ;Limit Wet
two dd 2
ft db 'TTs == %d ,MaxWet == %d , MaxVal == %d ,TakeTime == %d',0
cp db 'Windows XP',0

.data?
MaxVal dd ?
MaxWet dd ?
nbn dd ?
tmptime dd ?
TTs dd ?
buf db 256 dup(?)

.code
;~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
EnumCt proc
local TmpWet
local i

mov nbn,1
mov TmpWet,0

.while nbn<=0fffffffh ;2^CDim - 1
mov i,0
xor ebx,ebx
.while i<CDim
mov eax,i

bt nbn,eax
.if CARRY?
mov al,wet[eax]
and eax,0ffh
add ebx,eax
.endif
inc i
.endw
.if ebx > limwet
jmp a0
.endif
mov TmpWet,ebx
mov i,0
xor ebx,ebx
.while i<CDim
mov eax,i

bt nbn,eax
.if CARRY?
mov al,val[eax]
and eax,0ffh
add ebx,eax
.endif
inc i
.endw
.if ebx > MaxVal
mov MaxVal,ebx
mov ebx,TmpWet
mov MaxWet,ebx
.endif
a0:
inc TTs
inc nbn
.endw

ret

EnumCt endp
;~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
start:

mov TTs,0
mov MaxVal,0
mov MaxWet,0
invoke GetTickCount
mov tmptime,eax

invoke EnumCt

invoke GetTickCount
sub eax,tmptime

invoke wsprintf,addr buf,addr ft,TTs,MaxWet,MaxVal,eax
invoke MessageBox,NULL,addr buf,addr cp,MB_OK

invoke ExitProcess,NULL
;~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
end start
Scarroot 2006-07-10
  • 打赏
  • 举报
回复
可以把源代码贴出来吗?
加载更多回复(13)

567

社区成员

发帖
与我相关
我的任务
社区描述
英特尔® 边缘计算,聚焦于边缘计算、AI、IoT等领域,为开发者提供丰富的开发资源、创新技术、解决方案与行业活动。
社区管理员
  • 英特尔技术社区
  • shere_lin
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧