我正在尝试使用SSE42和STTNI指令并得到奇怪的结果 - PcmpEstrM(使用显式长度字符串)比PcmpIstrM(隐式长度字符串)运行慢两倍.
两者都是"常春藤桥" - 奇怪的是他们有如此不同的"差异"(至少我看不出他们的规格有任何技术差异 - http://www.cpu-world.com/Compare_CPUs/Intel_AW8063801013511,Intel_CM8063701093302 /).
英特尔64和IA-32架构优化参考手册提到了PcmpEstrM和PcmpIstrM的相同吞吐量= 11和延迟= 3.因此,我预计两者的表现相似.
问:差异是我实际设计/预期的,还是我以错误的方式使用这些指令?
下面是我的虚拟测试场景(VS 2012).逻辑非常简单 - 扫描16MB文本以查找匹配字符.由于干草堆和针头串都没有包含零终结器 - 我希望E和I具有相似的性能.
PS:我尝试在intel的开发论坛上发布这个问题,但他们将其识别为垃圾邮件:(
#include "stdafx.h"
#include <windows.h>
#define BEGIN_TIMER(NAME) \
{ \
LARGE_INTEGER __freq; \
LARGE_INTEGER __t0; \
LARGE_INTEGER __t1; \
double __tms; \
const char* __tname = NAME; \
char __tbuf[0xff]; \
\
QueryPerformanceFrequency(&__freq); \
QueryPerformanceCounter(&__t0);
#define END_TIMER() \ …Run Code Online (Sandbox Code Playgroud) 这是我的代码汇编程序
你能用c ++嵌入它并检查SSE4吗?速度快
我非常希望看到如何进入SSE4的发展.或者根本不担心他?我们检查一下(我没有SSSE3以上的支持)
{ sse2 strcmp WideChar 32 bit }
function CmpSee2(const P1, P2: Pointer; len: Integer): Boolean;
asm
push ebx // Create ebx
cmp EAX, EDX // Str = Str2
je @@true // to exit true
test eax, eax // not Str
je @@false // to exit false
test edx, edx // not Str2
je @@false // to exit false
sub edx, eax // Str2 := Str2 - Str;
mov ebx, [eax] // get Str 4 byte
xor …Run Code Online (Sandbox Code Playgroud)