Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 使用AVX编译的libsvm与不使用AVX编译的libsvm_Performance_Visual C++_X86_Compiler Optimization_Libsvm - Fatal编程技术网

Performance 使用AVX编译的libsvm与不使用AVX编译的libsvm

Performance 使用AVX编译的libsvm与不使用AVX编译的libsvm,performance,visual-c++,x86,compiler-optimization,libsvm,Performance,Visual C++,X86,Compiler Optimization,Libsvm,我编译了一个libsvm基准测试应用程序,它使用相同的模型对同一张图像进行100次svm_predict()。libsvm是通过在我的项目中直接包含svm.cpp和svm.h静态编译的(MSVC 2017) 编辑:添加基准详细信息 for (int i = 0; i < counter; i++) { std::chrono::high_resolution_clock::time_point t1 = std::chrono::high_resolution_cl

我编译了一个libsvm基准测试应用程序,它使用相同的模型对同一张图像进行100次svm_predict()。libsvm是通过在我的项目中直接包含svm.cpp和svm.h静态编译的(MSVC 2017)

编辑:添加基准详细信息

for (int i = 0; i < counter; i++)
    {
        std::chrono::high_resolution_clock::time_point t1 = std::chrono::high_resolution_clock::now();
        double label = svm_predict(model, input);
        std::chrono::high_resolution_clock::time_point t2 = std::chrono::high_resolution_clock::now();

        auto duration = std::chrono::duration_cast<std::chrono::microseconds>(t2 - t1).count();

        total_time += duration;

        std::cout << "\n\n\n" << sum << " label:" << label << " duration:" << duration << "\n\n\n";
    }
另一部分

without AVX:
*isa-ext-SSE                                                       11781
*isa-ext-SSE2                                                   36574119
*isa-set-SSE                                                       11781
*isa-set-SSE2                                                   36574119
*scalar-simd                                                    36564559
*sse-scalar                                                     36564559
*sse-packed                                                        21341
我希望得到一些性能改进,因为我知道avx128/256/512使用得不多,但仍然使用。我有一个i7-8550U CPU,你认为如果在skylake i9 X系列上运行相同的测试,我会看到更大的差异吗

编辑 我为每个二进制文件添加了指令混合

With AVX:

ADD                                                             16868725
AND                                                                   49
BT                                                                     6
CALL_NEAR                                                       14032515
CDQ                                                                    4
CDQE                                                                3601
CMOVLE                                                                 6
CMOVNZ                                                                 2
CMOVO                                                                 12
CMOVZ                                                                  6
CMP                                                             25417120
CMPXCHG_LOCK                                                           1
CPUID                                                                  3
CQO                                                                   12
DEC                                                                   68
DIV                                                                    1
IDIV                                                                  12
IMUL                                                                3621
INC                                                              8496372
JB                                                                   325
JBE                                                                    5
JL                                                                  7101
JLE                                                                38338
JMP                                                              8416984
JNB                                                                    6
JNBE                                                                   3
JNL                                                                  806
JNLE                                                                  61
JNS                                                                    1
JNZ                                                             22568320
JS                                                                     2
JZ                                                               8465164
LEA                                                             16829868
MOV                                                             42209230
MOVSD_XMM                                                              4
MOVSXD                                                              1141
MOVUPS                                                                 4
MOVZX                                                               3684
MUL                                                                   12
NEG                                                                   72
NOP                                                                 4219
NOT                                                                    1
OR                                                                    14
POP                                                                 1869
PUSH                                                                1870
REP_STOSD                                                              6
RET_NEAR                                                            1758
ROL                                                                    5
ROR                                                                   10
SAR                                                                    8
SBB                                                                    5
SETNZ                                                                  4
SETZ                                                                  26
SHL                                                                 1626
SHR                                                                  519
SUB                                                                 6530
TEST                                                             5616533
VADDPD                                                               594
VADDSD                                                           8445597
VCOMISD                                                                3
VCVTSI2SD                                                           3603
VEXTRACTF128                                                           6
VFMADD132SD                                                           12
VFMADD231SD                                                            6
VHADDPD                                                                6
VMOVAPD                                                               12
VMOVAPS                                                             2375
VMOVDQU                                                                1
VMOVSD                                                          11256384
VMOVUPD                                                              582
VMULPD                                                               582
VMULSD                                                           8451540
VPXOR                                                                  1
VSUBSD                                                           8407425
VUCOMISD                                                            3600
VXORPD                                                              2362
VXORPS                                                              3603
VZEROUPPER                                                             4
XCHG                                                                   8
XGETBV                                                                 1
XOR                                                              8414763
*total                                                         213991340
第二部分


您列出的几乎所有算术指令都是针对标量的,例如,means SUBstract Scalar Double。前面的
V
基本上只是意味着使用了AVX编码(这也会清除寄存器的上半部分,而SSE指令不会这样做)。但是根据您列出的说明,在运行时应该没有什么不同

现代x86使用SSE1/2或AVX进行标量FP运算,只使用XMM向量寄存器的低位元素。它比x87(更多的寄存器和平面寄存器集)要好一些,但每个指令仍然只有一个结果


有几千条压缩SIMD指令,而标量指令约为3600万条,因此只有相对不重要的部分代码得到了自动矢量化,并且可以从256位矢量中获益。

MVS指的是MSVC?请注意,无AVX版本中SSE2指令的数量与AVX版本中的AVX指令的数量相同。此外,标量simd在这两种情况下大致相同。我不确定这些指令类是否相互包含,但我认为它们可以相互包含。这意味着无论是否启用AVX,这些SIMD指令中的大多数实际上都是在标量模式下使用的。@HadiBrais标量模式是什么意思?你能详细说明一下吗?是的,我的意思是msvc您是否查看了库的反汇编,并看到了大量向量指令,如
(v)addps
(v)mulps
,等等?相反,如果你大部分都有
addss
mulss
指令,那么代码就没有矢量化。但是你说你在项目中包含了
svm.cpp
,所以也在编译。是的,一些东西的自动矢量化很明显在工作,但可能只是一个初始化循环。这只是几千条指令,而不是36M条标量指令。显然,这取决于你使用的SVM库函数。这一个似乎没有对SIMD进行有意义的使用。(哦,我把SVM和SVML(,它不是开源的)搞混了。)参见chtz的答案。x86使用SSE1/2或AVX进行标量FP数学,只使用XMM向量寄存器的低位元素。它比x87(更多寄存器和平坦寄存器集)要好一些,但每个指令仍然只有一个结果。是的,MSVC知道使用VZEROUPPER来避免错误依赖等惩罚。可能如果您使用AVX内在函数而不使用
-arch:AVX
编译,您可能会欺骗它不这样做,至少在较旧版本的编译器中,我记得我让它发出混合SS没有
-arch:AVX
的E/AVX代码。但希望它能阻止你射中自己的脚。(除非你告诉它为KNL Xeon Phi调音,因为vzeroupper速度慢而且没有帮助。)@哈迪布雷斯:我不相信OP的每指令数。其中一个指令的总指令数远远超过另一个,因此可能需要更多的迭代。例如,126M
cmp
vs.25M。因此,循环迭代的次数可能是原来的5倍,与标量指令的5倍差异相匹配。有一些差异,比如JZ与JNZ的比率,虽然。AVX的比率为2.6,只有SSE的比率为2.1。@chtz我的理解是,所有列表都显示了动态指令的数量。只是前两个列表将所有指令分类为可能重叠的类。@chtz这取决于处理器。无论如何,不清楚为什么它们具有相同的性能ance。我怀疑它们有不同的瓶颈。如果不彻底检查代码中的热循环,就很难判断。@HadiBrais看来你对指令总数的看法是正确的。我针对不同的循环数运行了它。我更新了指令计数器,现在看起来更好了。还包括指令总数谢谢
With AVX:

ADD                                                             16868725
AND                                                                   49
BT                                                                     6
CALL_NEAR                                                       14032515
CDQ                                                                    4
CDQE                                                                3601
CMOVLE                                                                 6
CMOVNZ                                                                 2
CMOVO                                                                 12
CMOVZ                                                                  6
CMP                                                             25417120
CMPXCHG_LOCK                                                           1
CPUID                                                                  3
CQO                                                                   12
DEC                                                                   68
DIV                                                                    1
IDIV                                                                  12
IMUL                                                                3621
INC                                                              8496372
JB                                                                   325
JBE                                                                    5
JL                                                                  7101
JLE                                                                38338
JMP                                                              8416984
JNB                                                                    6
JNBE                                                                   3
JNL                                                                  806
JNLE                                                                  61
JNS                                                                    1
JNZ                                                             22568320
JS                                                                     2
JZ                                                               8465164
LEA                                                             16829868
MOV                                                             42209230
MOVSD_XMM                                                              4
MOVSXD                                                              1141
MOVUPS                                                                 4
MOVZX                                                               3684
MUL                                                                   12
NEG                                                                   72
NOP                                                                 4219
NOT                                                                    1
OR                                                                    14
POP                                                                 1869
PUSH                                                                1870
REP_STOSD                                                              6
RET_NEAR                                                            1758
ROL                                                                    5
ROR                                                                   10
SAR                                                                    8
SBB                                                                    5
SETNZ                                                                  4
SETZ                                                                  26
SHL                                                                 1626
SHR                                                                  519
SUB                                                                 6530
TEST                                                             5616533
VADDPD                                                               594
VADDSD                                                           8445597
VCOMISD                                                                3
VCVTSI2SD                                                           3603
VEXTRACTF128                                                           6
VFMADD132SD                                                           12
VFMADD231SD                                                            6
VHADDPD                                                                6
VMOVAPD                                                               12
VMOVAPS                                                             2375
VMOVDQU                                                                1
VMOVSD                                                          11256384
VMOVUPD                                                              582
VMULPD                                                               582
VMULSD                                                           8451540
VPXOR                                                                  1
VSUBSD                                                           8407425
VUCOMISD                                                            3600
VXORPD                                                              2362
VXORPS                                                              3603
VZEROUPPER                                                             4
XCHG                                                                   8
XGETBV                                                                 1
XOR                                                              8414763
*total                                                         213991340
No AVX:
ADD                                                             16869910
ADDPD                                                               1176
ADDSD                                                            8445609
AND                                                                   49
BT                                                                     6
CALL_NEAR                                                       14032515
CDQ                                                                    4
CDQE                                                                3601
CMOVLE                                                                 6
CMOVNZ                                                                 2
CMOVO                                                                 12
CMOVZ                                                                  6
CMP                                                             25417408
CMPXCHG_LOCK                                                           1
COMISD                                                                 3
CPUID                                                                  3
CQO                                                                   12
CVTDQ2PD                                                            3603
DEC                                                                   68
DIV                                                                    1
IDIV                                                                  12
IMUL                                                                3621
INC                                                              8496369
JB                                                                   325
JBE                                                                    5
JL                                                                  7392
JLE                                                                38338
JMP                                                              8416984
JNB                                                                    6
JNBE                                                                   3
JNL                                                                  803
JNLE                                                                  61
JNS                                                                    1
JNZ                                                             22568317
JS                                                                     2
JZ                                                               8465164
LEA                                                             16829548
MOV                                                             42209235
MOVAPS                                                              7073
MOVD                                                                3603
MOVDQU                                                                 2
MOVSD_XMM                                                       11256376
MOVSXD                                                              1141
MOVUPS                                                              2344
MOVZX                                                               3684
MUL                                                                   12
MULPD                                                               1170
MULSD                                                            8451546
NEG                                                                   72
NOP                                                                 4159
NOT                                                                    1
OR                                                                    14
POP                                                                 1865
PUSH                                                                1866
REP_STOSD                                                              6
RET_NEAR                                                            1758
ROL                                                                    5
ROR                                                                   10
SAR                                                                    8
SBB                                                                    5
SETNZ                                                                  4
SETZ                                                                  26
SHL                                                                 1626
SHR                                                                  516
SUB                                                                 6515
SUBSD                                                            8407425
TEST                                                             5616533
UCOMISD                                                             3600
UNPCKHPD                                                               6
XCHG                                                                   8
XGETBV                                                                 1
XOR                                                              8414745
XORPS                                                               2364
*total                                                         214000270