【正文】
性能分析 ? 工具: – Intel174。 – 原因:服務(wù)器負(fù)載不同 設(shè)計(jì) ? 目的:對(duì)發(fā)現(xiàn)的熱點(diǎn)部分進(jìn)行并行化 ? 方法: –利用 OpenMP –利用性能庫(kù)函數(shù),如 Intel數(shù)學(xué)核心庫(kù) MKL,Intel集成式高性能原函數(shù)庫(kù) IPP等 調(diào)試 ? 工具: Intel線(xiàn)程檢測(cè)器( Intel174。想辦法找到好的解決方法。 Intel線(xiàn)程檢測(cè)器的使用 ? 在本程序中: –發(fā)現(xiàn)數(shù)據(jù)競(jìng)爭(zhēng)和死鎖 Intel VTuneTM的使用 ? 找熱點(diǎn)( hotspot) – 程序中的耗時(shí)部分,例如模塊、函數(shù)、線(xiàn)程等,甚至是代碼中的一行。如果不能定位, ? 使用 /Qopenmp以及 /Od,/O1,/O2,/O3或 /Qipo中的某一個(gè)編譯開(kāi)關(guān)編譯代碼,在最低優(yōu)化等級(jí)上找出故障場(chǎng)景。 ? 關(guān)閉 /Qopenmp編譯開(kāi)關(guān),使用 /Qopenmp_stub開(kāi)關(guān)來(lái)編譯引發(fā)錯(cuò)誤的子程序;然后檢查代碼中的故障是否發(fā)生在串行執(zhí)行的過(guò)程中,如果是,就進(jìn)行串行調(diào)試。 Debugger ? 性能分析 – Intel174。 Compiler) – Explicit threading (Win32*, Pthreads*) ? 調(diào)試錯(cuò)誤 – Intel174。 開(kāi)發(fā)過(guò)程 ? 分析 – 工具: VTune? Performance Analyzer ? 設(shè)計(jì) (Introduce Threads) – Intel174。 } return TRUE。 if (m_tcpThreadHandle == NULL) { closesocket(m_socket)。 return FALSE。 //創(chuàng)建 TCP套接字 m_socket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)。FALSE:打開(kāi)失敗 */ BOOL CTCPClient_CE::Open(CWnd * pWnd) { //復(fù)位線(xiàn)程退出事件 ResetEvent(m_exitThreadEvent)。 m_bRec = true。wsd)。否則在傳圖片時(shí)會(huì)出現(xiàn)缺失、移位等現(xiàn)象) ? 任務(wù)線(xiàn)程: –發(fā)送線(xiàn)程 –接收線(xiàn)程 –顯示進(jìn)度條的線(xiàn)程 ? 采用臨界段進(jìn)行同步處理 CTCPClient_CE::CTCPClient_CE() { //初始化 socket環(huán)境 WSADATA wsd。 ? 采用 OpenMP庫(kù)函數(shù) 服務(wù)器端程序界面 協(xié)議棧 I P l e v e lU D P l e v e l T C P l e v e lD a t a p a r tC o n t r o l p a r tR T P l e v e l R T C P l e v e l R T S P l e v e l客戶(hù)端: ? 主線(xiàn)程:管理程序狀態(tài) ? 數(shù)據(jù)包包頭重新封裝。 ? 任務(wù)線(xiàn)程:有多個(gè),根據(jù)接入請(qǐng)求的多少來(lái)定。 –對(duì)發(fā)送的數(shù)據(jù)包進(jìn)行包頭的重構(gòu)。 軟件設(shè)計(jì) ? 客戶(hù)端軟件設(shè)計(jì) –客戶(hù)端有一個(gè)主線(xiàn)程 –為發(fā)送和接收創(chuàng)建線(xiàn)程 ? 目的:不阻塞用戶(hù)界面的操作 –為發(fā)送和接收的數(shù)據(jù)包大小和百分比,建立線(xiàn)程用進(jìn)度條顯示。