六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

精彩圖文說明教程:迅速初始化內存(1)

[摘要]許多計算密集型的應用都需要處理大量內存,這種應用中的內存初始化是一個常規操作,而內存和CPU內部的數據交換之間的速度瓶頸決定了內存初始化將會占用可觀的時間。但因為應用程序初始化內存往往調用CRT的memset或者Windows API的ZeroMemory,很少有人在初始化方面進行優化。另一方面,...

許多計算密集型的應用都需要處理大量內存,這種應用中的內存初始化是一個常規操作,而內存和CPU內部的數據交換之間的速度瓶頸決定了內存初始化將會占用可觀的時間。但因為應用程序初始化內存往往調用CRT的memset或者Windows API的ZeroMemory,很少有人在初始化方面進行優化。

另一方面,現在的應用硬件一般配置都比較好,大部分應用都運行在PII之上,但我們在使用諸如VC之類的編譯環境時往往選擇速度優化,并選擇合適的處理器,然后寄希望于編譯器給我們生成優化的結果,結果往往發現并不如意。

在我們的一個圖像處理項目中,需要大量內存操作,而且多個線程同時運行,內存存取成為了各個模塊的競爭資源,所以對內存存取優化成為項目的關鍵。在努力減少內存操作遍數的基礎上,加快內存初始化成為我們的改進重點。

在用VC各種手段都沒有太多改進后,我們把目光轉向處理器特征。從Pentium系列開始,一方面Intel在不斷提高CPU主頻,同時也在針對多媒體等應用相繼推出MMX/SSE/SSE2,增加了許多多位快速處理指令。在高層語言方面,Intel的C++ Compiler提供了針對不同處理器的最優化結果。但在一個成熟項目中貿然使用另外一種編譯環境的風險較大,所以我們從Intel環境中抽取了memset的實現,重新組織了一個Lib,并在我們的項目中針對內存初始化進行了改動,并鏈接到抽取的lib庫中。在內存初始化方面有了一個較大的提高。

下面我們用測試例子說明該過程。

一個例子

在測試程序中,分別調用微軟C庫的memset和intel版本的memset分別對100M內存進行60遍初始化,,為了模擬多線程環境,啟動了兩個線程同時進行內存初始化。測試時使用了Release版,為了方面查看包含了調試信息(調試信息無影響)。測試結果:

MSC 版本:12.453~12.547秒

Intel C版本:4.375~4.531秒

可見在大量內存操作時差別比較大。對內存存取密集型項目,因為內存存取往往是瓶頸,應該還可以提高整體處理性能。

下面是例子的代碼:

// 本程序示例了使用微軟CRT的memset和Intel優化的memset初始化內存的速度差異

// Lihw.

#include

#include

#include

extern "C"

void * __cdecl __intel_new_memset(void *, int, size_t);

#pragma comment(lib,"intelmem.lib")

#define SIZE 1024*1024*100

void threadfunc(void *dummy)

{

LPBYTE lpByte = (LPBYTE)dummy;//new BYTE[SIZE];

int j;

#define LoopTimes 60

DWORD dwStart, dwTime1,dwTime2;

//

//intel version

dwStart = GetTickCount();for (j=0; j< LoopTimes; j++)

{

__intel_new_memset(lpByte,1,SIZE);

}

dwTime1 = GetTickCount() - dwStart;

//MS crt version

dwStart = GetTickCount();

for (j=0; j< LoopTimes; j++)

{

memset(lpByte,1,SIZE);

//ZeroMemory(lpByte,SIZE);

}

dwTime2 = GetTickCount() - dwStart;

//delete []lpByte;

printf("Intel=%dms MSC=%dms\n",dwTime1,dwTime2);
}

int main(int argc, char* argv[])

{

#define THREADS 2

HANDLE hThread[THREADS]; //array to hold thread handle

LPBYTE lpByte[THREADS]; //Array to hold thread-specific memory

int i;

//Count mem alloc time. Debug version is very long

DWORD dwStart = GetTickCount();

for (i=0; i


主站蜘蛛池模板: 一区福利视频 | 日韩中文字幕精品免费一区 | 日本护士后进式猛烈动态图片 | 最新韩国伦理片大全手机在线播放 | 日韩精品福利在线 | 亚洲国产99在线精品一区69堂 | 婷婷色综合成人成人网小说 | 色天天天综合色天天碰 | 天堂v亚洲国产v一区二区 | 午夜高清视频 | 小泽玛利亚久久一区二区三区 | 日韩欧美精品中文字幕 | 中文字幕乱码一二三四区 | 日韩欧美中文字幕在线视频 | 四虎精品福利视频精品 | 最新69堂国产成人精品视频 | 四虎成人网 | 在线 色 | 日韩伦理网在线视频 | 倩女还魂在线观看完整版免费 | 人人看人人做 | 四虎成人免费大片在线 | 亚洲天堂资源网 | 人成午夜视频 | 亚洲好看站 | 午夜激情视频专区在线观看网站大全 | 欧美视频一区 | 午夜精品视频在线观看美女 | 色综合久久中文综合网 | 日韩有码第一页 | 青青草原亚洲视频 | 亚洲欧洲免费 | 亚州综合 | 日日舔夜夜操 | 天天做天天欢天天爽 | 中文娱乐网在线观看 | 中国一级做a爰片久久毛片 中国性欧美 | 欧美一区二区精品系列在线观看 | 中文字幕在线视频不卡 | 羞羞色男人的天堂 | 一本大道香蕉久97在线视频 |