|
请你先看清楚截图,是同版本号比较的, 不存在你说的新旧版本函数区别。
yokuz3 发表于 2010-7-10 20:12 ![]()
那就是编译设置等原因导致没有使用SSE intrinsics那几个文件。
你也看清楚截图,快3倍的那个是显示SSE (ASM used)的,慢的那个没有显示。
在看看lame.c的代码:
#ifdef HAVE_NASM
if (gfc->CPU_features.AMD_3DNow) {
fft_asm_used = 1;
}
else if (gfc->CPU_features.SSE) {
fft_asm_used = 2;
}
else
#endif
...
#if defined(HAVE_XMMINTRIN_H)
MSGF(gfc, ", SSE (ASM used)");
#else
if (fft_asm_used == 2) {
MSGF(gfc, ", SSE (ASM used)");
}
else {
MSGF(gfc, ", SSE");
}
#endif
也就是说只有当HAVE_XMMINTRIN_H或者gfc->CPU_features.SSE表明支持SSE才会有"ASM used"的显示
再看看fft.c:
#ifdef HAVE_NASM
if (gfc->CPU_features.AMD_3DNow) {
gfc->fft_fht = fht_3DN;
}
else if (gfc->CPU_features.SSE) {
gfc->fft_fht = fht_SSE;
}
else {
gfc->fft_fht = fht;
}
#else
#ifdef HAVE_XMMINTRIN_H
#ifdef MIN_ARCH_SSE
gfc->fft_fht = fht_SSE2;
#endif
#endif
也就是说同样的条件下,才会使用SSE intrinsics版本的函数,否则就是普通C代码版本。
那结论很明显了,慢的那个版本没有显示"ASM used"字样,根本就是普通C代码版本。
PS:我06年开始用lame的代码。 |
|