在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

在NVSHMEM中新的通信方法介紹

jf_pJlTbmA9 ? 來源:NVIDIA ? 作者:NVIDIA ? 2023-07-05 16:30 ? 次閱讀

今天的前沿 高性能計算 ( HPC )系統(tǒng)包含數(shù)以萬計的 GPU 。在 NVIDIA 系統(tǒng)中, GPU 通過 NVLink 擴展互連在節(jié)點上連接,并通過 InfiniBand 等擴展網(wǎng)絡(luò)跨節(jié)點連接。 GPU 用于并行通信、共享工作和高效運行的軟件庫統(tǒng)稱為 NVIDIA Magnum IO ,是用于并行、異步和智能數(shù)據(jù)中心 IO 的架構(gòu)。

對于許多應(yīng)用,擴展到這樣的大型系統(tǒng)需要 GPU 之間的細(xì)粒度通信的高效率。這對于以強伸縮性為目標(biāo)的工作負(fù)載尤其重要,因為在工作負(fù)載中添加了計算資源以減少解決給定問題的時間。

NVIDIA Magnum IO NVSHMEM 是一個基于 OpenSHMEM 規(guī)范的通信庫,它為 HPC 系統(tǒng)中所有 GPU 的存儲器提供分區(qū)全局地址空間( PGAS )數(shù)據(jù)訪問模型。

由于該庫支持 GPU 集成通信,因此對于以強擴展為目標(biāo)的工作負(fù)載而言,它是一個特別適合且高效的工具。在這個模型中,數(shù)據(jù)是通過單邊讀、寫和原子更新通信例程訪問的。

由于與 GPU 架構(gòu)緊密集成,該通信模型通過 NVLink 實現(xiàn)了細(xì)粒度數(shù)據(jù)訪問的高效率。然而,由于主機 CPU 需要管理通信操作,因此節(jié)點間數(shù)據(jù)訪問的高效率仍然是一個挑戰(zhàn)。

本文在 NVSHMEM 中介紹了一種新的通信方法,稱為 InfiniBand GPUDirect 異步( IBGDA ) ,它建立在 GPUDirect Async 系列技術(shù)之上。 IBGDA 在 NVSHMEM 2.6.0 中引入,并在 NVSHMEM 2.7.0 和 2.8.0 中進(jìn)行了顯著改進(jìn)。它使 GPU 在發(fā)出節(jié)點間 NVSHMEM 通信時繞過 CPU ,而不會對現(xiàn)有應(yīng)用程序進(jìn)行任何更改。如我們所示,這將顯著提高使用 NVSHMEM 的應(yīng)用程序的吞吐量和擴展能力。

代理啟動的通信

communication-bottlenecks-cpu-proxy-b.png 圖 1 .使用 CPU 代理啟動 NIC 通信的 GPU 通信會導(dǎo)致通信瓶頸

使用 NVLink 進(jìn)行節(jié)點內(nèi)通信可以通過 GPU 流式多處理器( SM )啟動的加載和存儲指令實現(xiàn)。然而,節(jié)點間通信涉及向網(wǎng)絡(luò)接口控制器( NIC )提交工作請求以執(zhí)行異步數(shù)據(jù)傳輸操作。

在引入 IBGDA 之前, NVSHMEM InfiniBand Reliable Connection ( IBRC )傳輸使用 CPU 上的代理線程來管理通信(圖 1 )。使用代理線程時, NVSHMEM 執(zhí)行以下操作序列:

應(yīng)用程序啟動 CUDA 內(nèi)核,在 GPU 內(nèi)存中生成數(shù)據(jù)。

應(yīng)用程序調(diào)用 NVSHMEM 操作(例如nvshmem_put)以與另一個處理元件( PE )通信。當(dāng)執(zhí)行細(xì)粒度或重疊通信時,可以在 CUDA 內(nèi)核內(nèi)調(diào)用此操作。 NVSHMEM 操作將工作描述符寫入主機內(nèi)存中的代理緩沖區(qū)。

NVSHMEM 代理線程檢測工作描述符并啟動相應(yīng)的網(wǎng)絡(luò)操作。

以下步驟描述了與 NVIDIA InfiniBand 主機通道適配器( HCA )(如 ConnectX-6 HCA )交互時代理線程執(zhí)行的操作順序:

CPU 創(chuàng)建一個工作描述符,并將其排入工作隊列( WQ )緩沖區(qū),該緩沖區(qū)位于主機內(nèi)存中。

此描述符指示請求的操作(如 RDMA 寫入),并包含源地址、目標(biāo)地址、大小和其他必要的網(wǎng)絡(luò)信息

CPU 更新主機內(nèi)存中的門鈴記錄( DBR )緩沖區(qū)。此緩沖區(qū)用于恢復(fù)路徑,以防 NIC 將寫入數(shù)據(jù)丟棄到其門鈴( DB )。

CPU 通過向其 DB ( NIC 硬件中的寄存器)寫入來通知 NIC 。

NIC 從 WQ 緩沖區(qū)讀取工作描述符。

NIC 使用 GPUDirect RDMA 直接從 GPU 內(nèi)存復(fù)制數(shù)據(jù)。

NIC 將數(shù)據(jù)傳輸?shù)竭h(yuǎn)程節(jié)點。

NIC 通過將事件寫入主機存儲器上的完成隊列( CQ )緩沖區(qū)來指示網(wǎng)絡(luò)操作已完成。

CPU 輪詢 CQ 緩沖器以檢測網(wǎng)絡(luò)操作的完成。

CPU 通知 GPU 操作已完成。如果存在 GDRCopy ,則直接將通知標(biāo)志寫入 GPU 存儲器。否則,它會將該標(biāo)志寫入代理緩沖區(qū)。 GPU 在相應(yīng)的存儲器上輪詢工作請求的狀態(tài)。

雖然這種方法是便攜式的,可以為批量數(shù)據(jù)傳輸提供高帶寬,但它有兩個主要缺點:

CPU 周期被代理線程連續(xù)消耗。

由于代理線程存在瓶頸,您無法達(dá)到細(xì)粒度傳輸?shù)?NIC 吞吐量峰值?,F(xiàn)代 NIC 每秒可以處理數(shù)以億計的通信請求。雖然 GPU 可以以這種速度生成請求,但 CPU 代理的處理速度要低幾個數(shù)量級,這為細(xì)粒度通信模式造成了瓶頸。

InfiniBand GPUDirect 異步

ibgda-direct-control-path-b.png 圖 2 .使用 IBGDA 的 GPU 通信啟用從 GPU SM 到 NIC 的直接控制路徑,并從關(guān)鍵路徑中刪除 CPU

與代理啟動的通信不同, IBGDA 使用 GPUDirect Async – Kernel initiated ( GPUDirectAsync – KI )使 GPU SM 能夠直接與 NIC 交互。這如圖 2 所示,涉及以下步驟。

應(yīng)用程序啟動 CUDA 內(nèi)核,在 GPU 內(nèi)存中生成數(shù)據(jù)。

應(yīng)用程序調(diào)用 NVSHMEM 操作(如nvshmem_put)以與另一個 PE 通信。 NVSHMEM 操作使用 SM 創(chuàng)建 NIC 工作描述符,并將其直接寫入 WQ 緩沖區(qū)。與 CPU 代理方法不同,此 WQ 緩沖區(qū)駐留在 GPU 內(nèi)存中。

SM 更新 DBR 緩沖區(qū),該緩沖區(qū)也位于 GPU 存儲器中。

SM 通過寫入 NIC 的 DB 寄存器來通知 NIC 。

NIC 使用 GPUDirect RDMA 讀取 WQ 緩沖區(qū)中的工作描述符。

NIC 使用 GPUDirect RDMA 讀取 GPU 內(nèi)存中的數(shù)據(jù)。

NIC 將數(shù)據(jù)傳輸?shù)竭h(yuǎn)程節(jié)點。

NIC 通過使用 GPUDirect RDMA 寫入 CQ 緩沖區(qū)來通知 GPU 網(wǎng)絡(luò)操作已完成。

如圖所示, IBGDA 從通信控制路徑中消除了 CPU 。使用 IBGDA 時, GPU 和 NIC 直接交換通信所需的信息。 WQ 和 DBR 緩沖區(qū)也移動到 GPU 存儲器,以提高 SM 訪問時的效率,同時保留 NIC 通過 GPUDirect RDMA 的訪問。

Magnum IO NVSHMEM 評估

我們比較了 NVSHMEMIBGDA 傳輸和 NVSHMEMIBRC 傳輸?shù)男阅埽笳呤褂么砭€程來管理通信。這兩種傳輸都是標(biāo)準(zhǔn) NVSHMEM 分發(fā)的一部分。所有基準(zhǔn)測試和案例研究均在通過 NVIDIA ConnectX-6 200 Gb / s InfiniBand 網(wǎng)絡(luò)和 NVIDIA Quantum HDR 交換機連接的四臺 DGX-A100 服務(wù)器上運行。

為了突出 IBGDA 的效果,我們禁用了通過 NVLink 的通信。即使 PE 位于同一節(jié)點上,這也會強制通過 InfiniBand 網(wǎng)絡(luò)執(zhí)行所有傳輸。

單面輸入帶寬

我們首先運行了shmem_put_bw基準(zhǔn)測試,該測試包含在 NVSHMEM 性能測試套件中,并使用nvshmem_double_put_nbi_block發(fā)布數(shù)據(jù)傳輸。該測試測量使用單邊寫入操作在一系列通信參數(shù)上傳輸固定數(shù)量的總數(shù)據(jù)時所獲得的帶寬。

對于節(jié)點間傳輸,此操作在執(zhí)行網(wǎng)絡(luò)通信時使用線程塊中的一個線程,而不管線程塊中有多少線程。這是已知的,也稱為協(xié)作線程陣列( CTA )。在不同的 DGX-A100 節(jié)點上啟動了兩個 PE 。設(shè)置為每個線程塊一個線程,每個線程塊有一個 QP ( NIC 隊列對,包含 WQ 和 CQ )。

ibrc-bandwidth-cap-cpu-proxy.png 圖 3 shmem_put_bwIBRC 顯示了當(dāng)您擴展到更多的 QP 和 CTA 時, CPU 代理對小消息大小造成的帶寬上限

ibgda-bandwidth-scale.png 圖 4 shmem_put_bw IBGDA 證明,隨著 CTA 和 QPs 數(shù)量的增加,小消息大小的帶寬可以擴展

圖 3 和圖 4 顯示了在不同數(shù)量的 CTA 和消息大小下,具有 IBRC 和 IBGDA 的shmem_put_bw的帶寬。如圖所示,對于具有大消息的粗粒度通信, IBGDA 和 IBRC 都可以達(dá)到峰值帶寬。當(dāng)應(yīng)用程序發(fā)出來自至少四個 CTA 的通信時, IBRC 可以用小到 16KiB 的消息使網(wǎng)絡(luò)飽和。

進(jìn)一步增加 CTA 的數(shù)量不會減少我們觀察到峰值帶寬時的最小消息大小。限制較小消息帶寬的瓶頸在 CPU 代理線程中。雖然這里沒有顯示,但我們也嘗試增加 CPU 代理線程的數(shù)量,并觀察到類似的行為。

通過消除代理瓶頸,當(dāng) 64 個 CTA 發(fā)出通信時, IBGDA 實現(xiàn)了峰值帶寬,消息小到 2 KiB 。這一結(jié)果突出了 IBGDA 支持更高級別通信并行性的能力以及由此帶來的性能改進(jìn)。

對于 IBRC 和 IBGDA ,每個 CTA 中只有一個線程參與網(wǎng)絡(luò)操作。換句話說,只需要 64 個線程(而不是 1024 × 64 個線程)就可以在 2 KiB 消息大小下實現(xiàn)峰值帶寬。

還表明, IBGDA 帶寬繼續(xù)隨著執(zhí)行通信的 CTA 的數(shù)量而擴展,而 IBRC 代理在四個 CTA 時達(dá)到其擴展極限。因此, IBGDA 為消息大小小于 1 KiB 的 NVSHMEM 塊放入操作提供了高達(dá) 9.5 倍的吞吐量。

提高小郵件的吞吐量

shmem_p_bw基準(zhǔn)使用標(biāo)量nvshmem_double_p操作將數(shù)據(jù)直接從 GPU 寄存器發(fā)送到遠(yuǎn)程 PE 。此操作是線程范圍的,這意味著調(diào)用此操作的每個線程都傳輸一個 8 字節(jié)的數(shù)據(jù)字。

在接下來的實驗中,我們?yōu)槊總€ CTA 啟動了 1024 個線程,并增加了 CTA 的數(shù)量,同時保持 QPs 的數(shù)量與 CTA 的數(shù)目相等。

put-rate-comparison-ibrc-ibgda.png 圖 5 .國際復(fù)興開發(fā)銀行和國際銀行發(fā)展局之間的賣出率比較 shmem_p_bw 顯示了 IBGDA 在每秒發(fā)送數(shù)百萬條小消息方面的性能優(yōu)勢

另一方面, IBGDA 的 put 速率可以達(dá)到 180 MOPS ,接近 215 MOPS 的峰值 NIC 消息速率限制。該圖還顯示,如果滿足聚結(jié)條件, IBGDA 可以達(dá)到幾乎 2000 MOPS 。

圖 5 顯示,無論 CTA 和 QP 的數(shù)量如何, IBRC 的投入率(單位:百萬次操作/秒( MOPS ))上限為 1.7 MOPS 左右。另一方面, IBGDA 的消息速率隨著 CTA 的數(shù)量而增加,接近 NVIDIA ConnectX-6 InfiniBand NIC 的 215 MOPS 硬件限制,只有 8 個 CTA 。

在該配置中, IBGDA 會根據(jù)nvshmem_double_p操作向 NIC 發(fā)出一個工作請求。這突出了 IBGDA 在涉及大量小消息的細(xì)粒度通信中的優(yōu)勢。

IBGDA 還提供了當(dāng)目標(biāo)地址在同一扭曲內(nèi)連續(xù)時的自動數(shù)據(jù)合并。此功能允許發(fā)送一條大消息,而不是 32 條小消息。對于希望將分散的數(shù)據(jù)直接從 GPU 寄存器傳輸?shù)侥康牡氐倪B續(xù)緩沖區(qū)的應(yīng)用程序來說,它非常有用。

圖 5 顯示了當(dāng)滿足數(shù)據(jù)合并條件時, put 速率可以達(dá)到超過 NIC 峰值消息速率。

Jacobi 方法案例研究

分析了 NVSHMEM Jacobi 基準(zhǔn) 的性能,以證明 IBGDA 在實際應(yīng)用中的性能與 IBRC 相比。該存儲庫包括 Jacobi 解算器的兩個 NVSHMEM 實現(xiàn)。

在第一個實現(xiàn)中,每個線程使用標(biāo)量nvshmem_p操作在數(shù)據(jù)可用時立即發(fā)送數(shù)據(jù)。眾所周知,該實現(xiàn)與 NVLink 配合使用效果良好,但與 IBRC 配合使用效果不佳。

第二種實現(xiàn)在每個 CTA 調(diào)用nvshmem_put_nbi_block以發(fā)起通信之前將數(shù)據(jù)聚合到連續(xù)的 GPU 緩沖器中。這種數(shù)據(jù)聚合技術(shù)與 IBRC 配合使用很好,但增加了 NVLink 上的開銷,其中nvshmem_p操作可以將數(shù)據(jù)從寄存器直接存儲到遠(yuǎn)程 PE 的緩沖區(qū)。這種不匹配突出了優(yōu)化給定代碼以實現(xiàn)放大和縮小時的一個挑戰(zhàn)。

latency-comparisons-jacobi.png 圖 6 .使用 P 和 PUT 以及 IBRC 和 IBGDA 的 Jacobi 實現(xiàn)的延遲比較

圖 6 顯示, IBGDA 對小消息通信效率的改進(jìn)有助于解決這些挑戰(zhàn)。該圖表顯示了強縮放實驗中 Jacobi 內(nèi)核 1000 次迭代的延遲,其中 PE 的數(shù)量增加,同時保持固定的矩陣大小。使用 IBRC ,nvshmem_p版本的 Jacobi 的延遲是 nvshmem _ put 版本的 8 倍多。

另一方面,nvshmem_p和nvshmem_put版本均與 IBGDA 兼容,并與 NVLink 上nvshmem_p的效率相匹配。 IBGDA nvshmem_p版本與nvshmem_put與 IBRC 的延遲相匹配。

結(jié)果表明,與nvshmem_put相比,具有 IBGDA 的nvshmem_p具有略高的延遲。這是因為與發(fā)送許多小消息相比,發(fā)送一條大消息會導(dǎo)致較低的網(wǎng)絡(luò)開銷。

雖然這些開銷是網(wǎng)絡(luò)的基礎(chǔ),但 IBGDA 可以通過并行向 NIC 提交許多小消息傳輸請求來使應(yīng)用程序隱藏這些開銷。

全對全延遲案例研究

latency-comparison-all-to-all.png 圖 7.IBRC 和 IBGDA 之間 32 PE All to All 傳輸?shù)难舆t比較

圖 7 顯示了 IBRC 和 IBGDA 的 NVSHMEM 所有對所有集合操作的延遲,突出了 IBGDA 在小消息性能方面的優(yōu)勢。

對于 IBRC ,代理線程是來自設(shè)備的所有操作的序列化點。代理線程成批處理請求以減少開銷。然而,根據(jù)何時向設(shè)備提交操作,在設(shè)備上幾乎同時提交的操作可能會由代理線程的單獨循環(huán)處理。

代理的操作串行化會產(chǎn)生額外的延遲,并掩蓋 NIC 和 GPU 的內(nèi)部并行性。 IBGDA 結(jié)果顯示總體延遲更為一致,尤其是對于小于 16KiB 的消息。

Magnum IO NVSHMEM 提高了網(wǎng)絡(luò)性能

在本博客中,我們展示了 Magnum IO 如何提高小消息網(wǎng)絡(luò)性能,尤其是對于部署在 HPC 數(shù)據(jù)中心數(shù)百或數(shù)千個節(jié)點上的大型應(yīng)用程序。 NVSHMEM 2.6.0 引入了 InfiniBand GPUDirect Async ,它使 GPU 的 SM 能夠直接向 NIC 提交通信請求,繞過 CPU 在 NVIDIA InfiniBand 網(wǎng)絡(luò)上進(jìn)行網(wǎng)絡(luò)通信。

與管理通信的代理方法相比, IBGDA 可以在更小的消息大小下保持顯著更高的吞吐量。這些性能改進(jìn)對于需要強大擴展性的應(yīng)用程序尤其重要,并且隨著工作負(fù)載擴展到更大數(shù)量的 GPU ,消息大小往往會縮小。

IBGDA 還縮小了 NVLink 和網(wǎng)絡(luò)通信之間的小消息吞吐量差距,使您更容易優(yōu)化代碼,以在當(dāng)今 GPU 加速的 HPC 系統(tǒng)上進(jìn)行擴展和擴展。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • NVIDIA
    +關(guān)注

    關(guān)注

    14

    文章

    5085

    瀏覽量

    103884
  • AI
    AI
    +關(guān)注

    關(guān)注

    87

    文章

    31834

    瀏覽量

    270598
收藏 人收藏

    評論

    相關(guān)推薦

    模版工程中新建了一個目錄components,在這個目錄中新建了.c和.h文件文件中有包含idf的庫文件,為什么找不到?

    模版工程中新建了一個目錄components,在這個目錄中新建了.c和.h文件,文件中有包含idf的庫文件,從頭文件跳轉(zhuǎn)是可以跳轉(zhuǎn)過去的,但是編譯結(jié)果卻報錯,顯示找不到此文件。 目錄結(jié)構(gòu) 報錯
    發(fā)表于 06-06 07:43

    PADS9.3中新建元件封裝問題

    新手在學(xué)PADS .在看視頻教程“深圳智博電子”,在破解版pads9.3中新建了CAE封裝,保存后新建part type,然后editelectrical 出現(xiàn)不能編輯引腳數(shù)量,我看視頻教程中可以編輯的,不知道問題出在哪里了,請大家?guī)兔纯矗x謝。如紅色所示部分,
    發(fā)表于 12-11 14:03

    LabVIEW自動Excel中新建一個sheet

    LabVIEW自動Excel中新建一個sheet
    發(fā)表于 07-22 11:34

    介紹一種提高RS485總線通信速度的設(shè)計方法

    本文介紹了一種提高RS485總線通信速度的設(shè)計方法。
    發(fā)表于 06-02 06:29

    怎樣MDK5中新建一個STM32工程

    怎樣MDK5中新建一個STM32工程?
    發(fā)表于 10-09 08:04

    怎樣STM8的C語言編程環(huán)境中新建一個工程呢

    使用STM8的C語言編程有哪些好處?怎樣STM8的C語言編程環(huán)境中新建一個工程呢?
    發(fā)表于 11-26 07:58

    怎樣STM32cubeIDE中新建一個帶hal庫的空工程呢

    為什么關(guān)機時才寫flash,而不是系統(tǒng)正常運行過程中寫?Ecc校驗是什么意思?怎樣STM32cubeIDE中新建一個帶hal庫的空工程呢?
    發(fā)表于 11-29 06:33

    介紹一種多串口通信編程方法

    [導(dǎo)讀] 本文介紹了以LPC2365為核心處理器、嵌入式實時操作系統(tǒng)μC/OS-II下的多串口通信編程方法。對于固定長度的短字節(jié)幀數(shù)據(jù),通過設(shè)置合適的字節(jié)觸發(fā)深度,一次中斷完成數(shù)據(jù)接收任務(wù);對于變長
    發(fā)表于 12-15 09:06

    Keil中新建項目的方法

    Keil中新建項目1.Project 新建項目2.選擇AT89C513.Target標(biāo)簽頁屬性修改4.C51標(biāo)簽頁屬性修改5.Debug標(biāo)簽頁屬性修改6.點擊New,生成一個Text1文件7.按
    發(fā)表于 01-18 07:45

    ORCAD PSPICE 9中新元件的創(chuàng)建方法

    ORCAD PSPICE 9中新元件的創(chuàng)建方法 序言  電子設(shè)計自動化EDA技術(shù)的發(fā)展和應(yīng)用對電子設(shè)計的發(fā)展起了巨大的推動作用。EDA技
    發(fā)表于 03-22 18:15 ?1697次閱讀
    ORCAD PSPICE 9<b class='flag-5'>中新</b>元件的創(chuàng)建<b class='flag-5'>方法</b>

    ORCAD/PSPICE 9中新元件的創(chuàng)建

    ORCAD/PSPICE 9中新元件的創(chuàng)建 電子設(shè)計自動化EDA技術(shù)的發(fā)展和應(yīng)用對電子設(shè)計的發(fā)展起了巨大的推動作用。EDA技術(shù)的深入發(fā)展和廣泛應(yīng)用,帶給電子設(shè)計師更完善的設(shè)計方法,
    發(fā)表于 02-09 10:04 ?3483次閱讀
    ORCAD/PSPICE 9<b class='flag-5'>中新</b>元件的創(chuàng)建

    無線通信自由空間傳播時的距離計算方法

    無線通信自由空間傳播時的距離計算方法 本文介紹自由空間傳播時的無線通信距離的計算方法:所謂自
    發(fā)表于 03-10 11:41 ?2859次閱讀

    無線通信產(chǎn)品FCC認(rèn)證及測試方法介紹

    無線通信產(chǎn)品FCC認(rèn)證及測試方法介紹 通過對FCC法規(guī)的解讀與研究,簡單介紹了無線通信產(chǎn)品進(jìn)行FCC認(rèn)證和測試的要求和
    發(fā)表于 03-12 17:24 ?1015次閱讀

    短波通信盲區(qū)現(xiàn)象解決方法介紹

    短波通信盲區(qū)現(xiàn)象解決方法介紹短波通信盲區(qū)現(xiàn)象解決方法介紹短波
    發(fā)表于 11-10 17:13 ?5次下載

    Windows CE下實現(xiàn)串口通信

    文章首先簡單介紹WIndows CE下設(shè)備驅(qū)動程序的訪問 方式, 然后詳細(xì)介紹WIndows CE下實現(xiàn)串口通信
    發(fā)表于 04-18 14:12 ?6次下載
    主站蜘蛛池模板: 久久久久国产一级毛片高清片 | 国产午夜久久影院 | 精品国产污网站在线观看15 | 成人小视频在线 | 天天躁狠狠躁狠狠躁夜夜躁 | 奇米777me| 人人成人免费公开视频 | 最新欧美一级视频 | 天堂资源在线种子资源 | 亚洲最大黄色网址 | 天天操天天操天天干 | 中文字幕一区二区三区有限公司 | 美女免费视频一区二区三区 | 最近高清在线视频观看免费 | 亚洲黄色录像 | 欧美大片一区 | 天天干夜夜噜 | 羞羞答答xxdd影院欧美 | 22sihu国产精品视频影视资讯 | 午夜三级a三点 | 狠狠色噜噜狠狠狠狠888奇米 | 毛片其地| 国产成+人+综合+亚洲欧美丁香花 | 99久久精品免费观看国产 | 免费成人黄色 | 国产一级特黄生活片 | 九色视频在线看 | 男人女人真曰批视频播放 | 日韩一级片免费在线观看 | 四虎必出精品亚洲高清 | 日韩毛片大全 | 翘臀白浆| 性欧美高清精品videos | 日韩毛片网 | 色福利视频 | 日日操夜夜操狠狠操 | 额去鲁97在线观看视频 | 新版天堂资源中文在线 | 91桃色国产线观看免费 | 亚洲国产精品综合久久久 | 国产午夜精品不卡片 |