REFA-Test fr Prozessoren, c't 20/06 S.222
------------------------------------------

ctlatenz.cpp		cpp-Source fr Win32
LatThpt3.h		header-Datei mit Makros
ctlatenz.sln		Solution fr VS2005
ctlatenz.vcproj		Projektdatei fr VC8
ctlatenz.icproj		Projektdatei fr IC9
Release\ctlatenz.exe 	Ausfhrbare Datei  


ctlatenz stoppt unter Windows 32 przise die Latenz- und Durchsatzzeiten diverser Prozessorbefehle aus. 
Es basiert auf einem Programmbeispiel aus Intel "Measuring Instruction Latency and Throughput"
//http://www.intel.com/cd/ids/developer/asmo-na/eng/dc/pentium4/optimization/20243.htm
mit zahlreichen Verbesserung und Erweiterungen, u.a. fr SSE3- und SSE4-Instruktionen.   
Das Konsolenprogramm kennt zwei Switches /s: zwischen den Messungen wird ein kurzer Sleep(1) eingefgt 
und /w: fr wait: das Programm wartet am Ende auf einen Tastendruck.   

Das Programm benutzt ineinander verschachtelte Makros, um mit dem Inline-Assembler die abzustoppenden 
Befehle einbauen zu knnen. Damit muss man sich aber nicht unbedingt abqulen, denn mit dem Macro 
measure kann man bequem fr viele Befehlsklassen (s.u.) 
eigene abzustoppende Befehle nachrsten, Syntax: measure (Typ,Klasse, Assemblerbefehl, Parameter) 
mit Typ = Thpt oder Lat, Klasse= XMM,XmmImm, etc. (s.u.), Assemblerbefehl wie "por" und Parameter falls 
der Assemblerbefehl noch einen Parameter bentigt, sonst "NIX".            
Viel Spa as (as@ctmagazin.de)


Untersttzte Befehlsklassen: 
SSE 				MMX			Integer 	
Lat_Xmm( x,b )			Lat_Mmx( x,b )		Lat_Int( x,b )	
Lat_XmmImm( x,imm )		Lat_MmxImm( x,imm )  	Thpt_Int( x,b )	
Lat_XmmMem( x,b )		Lat_MmxMem( x,b )	Thpt_IntImm( x,imm )	  
Thpt_Xmm( x,b )			Thpt_Mmx( x,b )		Thpt_IntMem( x,b )	
Thpt_XmmImm( x,imm )		Thpt_MmxImm( x,imm )	Thpt_Int_Xmm( x,icmd  )	
Thpt_XmmMemLoad( x,b )		Thpt_MmxMemLoad( x,b )	Thpt_Int_Int( x,y ) 	
Thpt_XmmImmMemLoad( x,imm )	Thpt_MmxImmMemLoad( x,imm )		
Thpt_XmmMemStore( x,b )		Thpt_MmxMemStore( x,b )		
Thpt_Reg2Xmm( x,b )		Thpt_Reg2Mmx( x,b )		
Thpt_Xmm2Reg( x,b )		Thpt_Mmx2Reg( x,b )		
Thpt_Reg2XmmImm( x,imm )  	Thpt_Reg2MmxImm( x,imm )		
Thpt_Xmm2RegImm( x,imm ) 	Thpt_Mmx2RegImm( x,imm )		
Thpt_Xmm2Mxx( x,b )		Thpt_Mmx2Xmm( x,b )
 



