相关疑难解决方法(0)

GCC SSE代码优化

这篇文章与我几天前发布的另一篇文章密切相关.这一次,我编写了一个简单的代码,它只添加了一对元素数组,将结果乘以另一个数组中的值并将其存储在第四个数组中,所有变量浮点数都是双精度类型.

我制作了两个版本的代码:一个是SSE指令,使用调用而另一个没有它我然后使用gcc和-O0优化级别编译它们.我在下面写下:

// SSE VERSION

#define N 10000
#define NTIMES 100000
#include <time.h>
#include <stdio.h>
#include <xmmintrin.h>
#include <pmmintrin.h>

double a[N] __attribute__((aligned(16)));
double b[N] __attribute__((aligned(16)));
double c[N] __attribute__((aligned(16)));
double r[N] __attribute__((aligned(16)));

int main(void){
  int i, times;
  for( times = 0; times < NTIMES; times++ ){
     for( i = 0; i <N; i+= 2){ 
        __m128d mm_a = _mm_load_pd( &a[i] );  
        _mm_prefetch( &a[i+4], _MM_HINT_T0 );
        __m128d mm_b = _mm_load_pd( &b[i] );  
        _mm_prefetch( &b[i+4] , _MM_HINT_T0 );
        __m128d mm_c = _mm_load_pd( …
Run Code Online (Sandbox Code Playgroud)

c optimization hpc sse compiler-optimization

14
推荐指数
1
解决办法
3万
查看次数

做atoi()和atof()缓存?它们似乎在更多次调用时执行得更快

我曾经_rdtsc()时间atoi()atof()我注意到他们花了很长时间.因此,我编写了自己的这些函数版本,这些函数从第一次调用开始就快得多.

我使用的是Windows 7,VS2012 IDE,但使用的是英特尔C/C++编译器v13.我有 - /O3启用,还有 - /Ot("赞成快速代码").我的CPU是常春藤桥(移动).

经进一步调查,似乎更多的时间atoi()atof()被称为越快他们执行?我说话的速度更快:

当我atoi()从我的循环外部调用时,只需要一次,它需要5,892个CPU周期,但经过数千次迭代后,这减少到300 - 600个CPU周期(相当大的执行时间范围).

atof() 最初需要20,000到30,000个CPU周期,然后在几千次迭代之后需要18到28个CPU周期(这是我的自定义函数第一次调用时的速度).

有人可以解释这个效果吗?

编辑:忘了说 - 我的程序的基本设置是从文件解析字节的循环.在循环中我明显使用我的atof和atoi来注意上面的内容.然而,我还注意到,当我在循环之前进行调查时,只需调用atoi和atof两次,以及两次用户编写的等效函数,它似乎使循环执行得更快.循环处理了150,000行数据,每行需要3x atof()atoi()s.再一次,我无法理解为什么在我的主循环之前调用这些函数会影响调用这些函数500,000次的程序的速度?!

#include <ia32intrin.h>

int main(){

    //call myatoi() and time it
    //call atoi() and time it
    //call myatoi() and time it
    //call atoi() and time it

    char* bytes2 = "45632";
    _int64 start2 = _rdtsc();
    unsigned int a2 = atoi(bytes2);
    _int64 finish2 = _rdtsc();
    cout << (finish2 - start2) …
Run Code Online (Sandbox Code Playgroud)

c c++ optimization performance caching

13
推荐指数
2
解决办法
899
查看次数

对于memcmp,SSE4.2字符串指令比SSE2快多少?

这是我的代码汇编程序

你能用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)

x86 assembly sse micro-optimization sse4

2
推荐指数
1
解决办法
1374
查看次数