這裡使用了純c,sse c++加速版本,sse 彙編加速版本測試
求二維向量二階範數的計算:平方和求平方根
結果使用純c反而更快環境win10 + vs2013
結果是arraycalccpp 0.040ms
arraycalcsse 0.207ms
arraycalcsse2 0.208ms
arraycalcsseasm 0.207ms
使用編譯器優化的純c 比 手動寫的並行加速還要快5倍
void arraycalccpp(f32 *p1, f32 *p2, f32 *psum, s32 len)
}void arraycalcsse(f32 *p1, f32 *p2, f32 *psum, s32 len)
}void arraycalcsse2(f32 *p1, f32 *p2, f32 *psum, s32 len)
}void arraycalcsseasm(f32 *p1, f32 *p2, f32 *psum, s32 len)
}#define array_length 100000
void sse_test()
arraycalccpp(array1, array2, array3, array_length);
arraycalcsse(array1, array2, array4, array_length);
arraycalcsseasm(array1, array2, array5, array_length);
}void sse_testp()
double t;
t = (double)gettickcount();
for (int i = 0; i < cyc_num; i++)
t = ((double)gettickcount() - t) * 1000 / cyc_num / gettickfrequency();
printf("arraycalccpp %.3fms\n", t);
t = (double)gettickcount();
for (int i = 0; i < cyc_num; i++)
t = ((double)gettickcount() - t) * 1000 / cyc_num / gettickfrequency();
printf("arraycalcsse %.3fms\n", t);
t = (double)gettickcount();
for (int i = 0; i < cyc_num; i++)
t = ((double)gettickcount() - t) * 1000 / cyc_num / gettickfrequency();
printf("arraycalcsse2 %.3fms\n", t);
t = (double)gettickcount();
for (int i = 0; i < cyc_num; i++)
t = ((double)gettickcount() - t) * 1000 / cyc_num / gettickfrequency();
printf("arraycalcsseasm %.3fms\n", t);
}
SSE指令集系列之二
4.資料重排指令集 unpckhps xmm,xmm m128 源儲存器與目的暫存器高64位按雙字交錯排列,結果送入目的暫存器,記憶體變數必須對齊記憶體16位元組.高64位 低64位 目的暫存器 a0 a1 a2 a3 源儲存器 b0 b1 b2 b3 目的暫存器結果 b0 a0 b1 a1 例 當...
epoll之二 epoll實戰
int epoll create int size epoll create返回 乙個控制代碼,之後epoll的 使用都將依靠這個 控制代碼 來 標識,引數 size是告訴epoll所要處理的大致事件數目,不再使用epoll時,必須呼叫close 關閉這個控制代碼。size這個引數只是 告訴核心這個...
阿里雲實戰之二 mysql phpmyadmin
首先用探針測試mysql環境是否可用,然後我不幸的發現自己忘記mysql密碼了,汗乙個。如下的方法可解決密碼丟失問題 1.修改mysql的配置檔案 預設為 etc my.cnf 在 mysqld 下新增一行skip grant tables 2.儲存配置檔案後,重啟mysql服務 service m...