Adopté en línea para medir el rendimiento de SSE.¿Es esta marca de reloj adecuada para Intel i3?
#ifndef __TIMER_H__
#define __TIMER_H__
#pragma warning (push)
#pragma warning (disable : 4035) // disable no return value warning
__forceinline unsigned int GetPentiumTimer()
{
__asm
{
xor eax,eax // VC won't realize that eax is modified w/out this
// instruction to modify the val.
// Problem shows up in release mode builds
_emit 0x0F // Pentium high-freq counter to edx;eax
_emit 0x31 // only care about low 32 bits in eax
xor edx,edx // so VC gets that edx is modified
}
}
#pragma warning (pop)
#endif
lo hice la medición en mi CPU Pentium E2200 D, y funciona bien (que muestra instrucciones SSE alineados son más rápidos). Pero en mi CPU i3 recibo instrucciones desalineadas más rápido el 70% de las pruebas.
¿Ustedes piensan que esta medida de la señal del reloj no es adecuada para la CPU i3?
Estoy bastante seguro de que VC admite la instrucción 'RDTSC' en el ASM en línea. Además, ¿por qué no te importan los bits superiores de 32, y debes usar '__declspec (naked)' o incluso mejor devolver un valor de una manera más adecuada. Además, me gustaría utilizar ['QueryPerformanceCounter'] (http: //msdn.microsoft.com/en-us/library/windows/desktop/ms644904 \ (v = vs.85 \).aspx) o funciones similares en su lugar (teniendo en cuenta los problemas con la escala de frecuencia/procesadores multi-core, etc.). – user786653
RDTSC es * no * una instrucción de serialización, lo que significa que puede/se ejecutará fuera de servicio. Si insiste en usarlo directamente, generalmente quiere usar CPUID para forzar la serialización (es una de las pocas instrucciones de serialización que puede ejecutar en el modo de usuario). –
Tengo QueryPerformanceCounter también. No es muy confiable según los resultados. Para la multiplicación de nxn matrices, n = 10000 o más, el tiempo toma solo 0.3 segundos? No creo que eso sea preciso en absoluto (en la consola lleva más de 2 segundos ver los resultados), así que me dirijo a los ticks del reloj. Voy a probar RDTSC ahora. Gracias. – CppLearner