伦伦影院久久影视,天天操天天干天天射,ririsao久久精品一区 ,一本大道香蕉大久在红桃,999久久久免费精品国产色夜,色悠悠久久综合88,亚洲国产精品久久无套麻豆,亚洲香蕉毛片久久网站,一本一道久久综合狠狠老

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

開源隨機數生成器庫OpenRNG助力實現移植到Arm平臺時的最佳性能

Arm社區 ? 來源:Arm ? 2025-02-08 09:24 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

作者:Arm 工程部資深軟件工程師 Kevin Mooney

OpenRNG 是一個開源隨機數生成器 (RNG) 庫,最初隨 Arm Performance Libraries 24.04 一同發布。OpenRNG 旨在提升人工智能 (AI) 框架性能,有助于科學應用及金融軟件的開發,因而廣受歡迎。而在去年晚些時候,Arm 推出了 OpenRNG 的首個開源版本。

OpenRNG 可直接替代英特爾矢量統計庫 (Vector Statistics Library, VSL) 的隨機數生成組件,開發者從而能夠更輕松地將應用移植到 Arm 平臺。VSL 是 OneMKL 的一部分,專為 x86 架構處理器而設計。OpenRNG 有助于提升性能,例如與 Arm 平臺上已有實現相比,OpenRNG 僅需很少的代碼改動,就使 PyTorch 的 Dropout 層的性能提高了 44 倍。OpenRNG 的性能也較 C++ 標準庫提高了 2.7 倍。

雖然起初的優化是針對基于 Arm 架構的系統,但我們的目標是將 OpenRNG 發展成為跨平臺項目,因此我們歡迎針對任何架構的補丁。

英特爾按照知識共享許可協議向我們開放了這個接口。該許可協議使我們能夠為基于 Arm 架構系統的用戶實現這一功能,從而在不修改代碼的情況下實現不同架構之間軟件的可移植性。

源代碼現已公開在 Arm 的 GitLab 上,可查閱 Arm Performance Libraries 參考指南獲取相關信息。

隨機數為什么實用

隨機數在各種應用中都非常重要,可用于模擬本質上不可預測的自然過程。例如,在物理學中,隨機數常用于建立隨機模型,模擬確定性模型無法解決的問題;在金融領域,隨機數常用于模擬金融市場;在游戲中則常用于實現 AI。

物理過程和金融市場錯綜復雜,涉及很多輸入,不可能進行完全的理解、建模和預測。而一些輸入被視為隨機變量,需要快速、可重復地生成;銀行在計算風險敞口時,不應該因為重新運行相同的模型得到不同的隨機數而發生變化。

為游戲開發 AI 時,行為動作應是不可預測的,因此要引入隨機性。隨機數生成的速度越快,同時生成的 AI 就越多。同樣,多人游戲需要在多臺設備上生成相同的隨機數。不同玩家應該在同一個位置看到敵人,隨機性很重要。

庫里有什么?

OpenRNG 實現了多種生成器和分布方式。生成器算法可生成“看似隨機”并具有某些統計特性的序列,我們將在下文進行討論。分布方式會將序列映射到常見的概率分布概念,如高斯分布或二項分布。

OpenRNG 還提供復制和保存序列的工具,以及在不同線程間分發序列的工具。這些工具可實現高效的多線程處理和檢查點等功能。

隨機數生成器

OpenRNG 實現了三種類型的隨機數生成器:偽隨機數生成器、準隨機數生成器、非確定性隨機數生成器。

偽隨機數生成器 (PRNG) 算法生成的數字序列在統計學上看似隨機,但卻能重復生成。PRNG 通常能通過很多隨機性統計測試,但一旦知道當前序列中的位置,就能確定下一個數字;這就是我們說它看似隨機的原因。OpenRNG 采用了多種類型的 PRNG,如線性同余生成器 (LCG)、多重遞歸生成器 (MRG)、梅森旋轉算法(如 MT19937)和基于計數器的生成器(如 Philox)。

準隨機數生成器 (QRNG) 的算法可生成低差異序列。該類工具無法通過隨機性統計測試,但能生成在 n 維超立方體上均勻分布的 n 維向量,從而均勻地填充空間。OpenRNG 提供用于生成低差異序列的 SOBOL 生成器。

大多數現代硬件都配備了非確定性隨機數生成器,也稱真隨機數生成器 (TRNG),OpenRNG 為這些生成器提供了一個接口,以便開發者訪問。TRNG 可以提供高質量隨機數,其序列來自于外部。TRNG 通常比 PRNG 速度慢,且序列不可再現。

我們盡力確保使用的生成器和初始化方式與 oneMKL 文檔中定義的相同。這意味著,在可能的情況下,OpenRNG 和 oneMKL 之間的序列可以按位替換。

概率分布

除了實現 RNG 之外,OpenRNG 還提供了將隨機序列轉換為常見概率分布的便捷方法。OpenRNG 可以生成具有常見概率分布(離散和連續)的隨機數。

連續分布是實數的概率分布,例如 0 和 1 之間的可表示小數。連續分布可以請求為單精度或雙精度浮點數。OpenRNG 支持多種連續分布,包括均勻分布、高斯分布和指數分布。

離散分布是僅限于整數的概率分布。OpenRNG 采用了常見的離散分布,如均勻分布、泊松分布、二項分布和伯努利分布。

OpenRNG 分布生成的確切值可能與 oneMKL 的值略有不同,因為兩個庫之間各種操作的精度不同。

高效多線程

很多應用都需要生成長序列的隨機數。多線程運行時,擁有不同的獨立序列非常重要。OpenRNG 有兩種不同的方法可供選擇:跳過和跳躍。

跳過法讓序列跳過一定數量的元素。此時效率至關重要,這種方法可以跳過很多元素,例如 2 的 32 次方的倍數,單獨生成這些元素會產生大量不必要的開銷。

跳躍法適用于線程交錯消耗元素的情況。例如,在有 n 個線程的情況下,第 k 個線程從“全局”序列的第 k 個元素開始,則該線程序列中的第 i 個元素就是“全局”序列的第 (k + i*n) 個元素。

性能

C++ 標準庫

C++ 標準庫提供三種類型的生成器:線性同余生成器、梅森旋轉算法生成器和帶進位減法生成器。OpenRNG 未采用帶進位減法生成器,而是采用了線性同余生成器和梅森旋轉算法,只需稍加配置,我們就能比較 OpenRNG 和 C++ 標準庫中的 MCG31 和 MT19937 實現情況。C++ 標準庫和 OpenRNG 包含多種常見分布,我們選擇了兩種廣泛使用的分布,即均勻分布和高斯分布(也稱正態分布)。

下圖展示了 AWS Graviton3 上使用 GCC 14 和 -O3 的基準數據。基準測試包括重復填充一個包含 5,000 個元素的緩沖區,并計算每個庫在熱點循環中花費的總時間的比例。我們對所選生成器和分布的所有組合重復執行了基準測試。

對于均勻分布,大部分運行時間都用于生成隨機序列。組合使用 MCG31 生成器與均勻分布實現了更大地提速比,比率高達 2.73。

對于高斯分布,大部分運行時間都用于將隨機序列轉換為高斯分布。與 libstdc++ 相比,使用 MT19937 生成器的最大提速比為 1.88。

df6d3b5c-e53a-11ef-9310-92fbcf53809c.png

柱狀圖展示了 OpenRNG 相較于 C++ 標準庫的性能優勢。每個柱形的高度是使用兩個庫生成隨機數所花時間的比率。大于 1 表示 OpenRNG 的速度更快。

PyTorch

下圖顯示了在 Arm 平臺上使用 VSL RNG 進行 PyTorch 機器學習 (ML) 獲得的優勢。PyTorch 可以配置為在 Dropout 層使用 OpenRNG 的 VSL RNG,從伯努利分布中提取隨機值。例如,當批次大小為 16,輸入張量為 [16, 128, 3072] 時,與使用 PyTorch 中的默認 RNG 相比,順序執行時性能提高了四倍。此外,當啟用 VSL 接口時,PyTorch 會使用跳過法來并行生成隨機值。如果不使用 VSL,隨機值始終是按順序生成的,沒有并行。使用 16 個線程為輸入張量 [16, 128, 3072] 實現并行處理可以進一步提高性能,在 Dropout 層中使用 OpenRNG 的速度比默認的速度快 44 倍左右。

df7cf092-e53a-11ef-9310-92fbcf53809c.png

柱狀圖展示了結合 OpenRNG 與 PyTorch 的性能優勢。每個柱形的高度表示平均耗時。配置速度越快,高度越低。

歡迎提供補丁

我們很高興能發布 OpenRNG 并涵蓋了 VSL 的大部分功能,但仍有一些領域需進一步開發。目前某些功能還未實現。此外,目前所有的優化都專門針對基于 Arm 架構的系統。我們希望 OpenRNG 能成為一個跨平臺項目,因此我們歡迎針對任何架構的新參考實現和性能優化補丁。如果你想提交自己的開發工作、報告錯誤、提交功能請求或其他任何事項,請在 GitLab 上提出問題并與我們聯系。

Arm Performance Libraries 未來將繼續包含 OpenRNG,并在 GitLab 中標記發布的代碼。OpenRNG 倉庫將保持開放,以供開發者使用。GitLab 上有貢獻指南。我們已盡力確保 OpenRNG 采用 MIT 和 Apache-2.0 技術授權許可,讓用戶可以將源代碼添加到自己的項目中,而不會受到繁瑣的限制。

相關鏈接:

[1]Arm GitLab:https://gitlab.arm.com/libraries/openrng

[2] Arm Performance Libraries 參考指南:

https://developer.arm.com/documentation/101004/2404/Open-Random-Number-Generation--OpenRNG--Reference-Guide

[3] Arm GitLab 提問頁面:

https://gitlab.arm.com/libraries/openrng/issues

[4]貢獻指南:

https://gitlab.arm.com/libraries/openrng/-/blob/main/CONTRIBUTING.md

* Arm 原創文章

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • ARM
    ARM
    +關注

    關注

    135

    文章

    9577

    瀏覽量

    393049
  • 生成器
    +關注

    關注

    7

    文章

    322

    瀏覽量

    22767

原文標題:利用隨機數生成器庫 OpenRNG,實現移植到 Arm 平臺時的最佳性能

文章出處:【微信號:Arm社區,微信公眾號:Arm社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    探索ICS9FG104E:PCIe Gen1/2、USB3.0等設備的頻率生成器解決方案

    探索ICS9FG104E:PCIe Gen1/2、USB3.0等設備的頻率生成器解決方案 在電子設備的設計中,頻率生成器扮演著至關重要的角色,它為各種高速接口提供穩定的時鐘信號,確保設備的正常運行
    的頭像 發表于 03-29 17:05 ?856次閱讀

    SBC案例生成器對VisionFive2的支持

    最近收到了我的 VisionFive2,并且是 SBC 模型框架和 SBC 案例生成器的開發人員,我為那些對標準和自定義案例感興趣的人在這兩個應用程序中添加了對 VisionFive2 SBC
    發表于 03-18 08:21

    探索Renesas 9FGV0431:低功耗PCIe時鐘生成器的卓越之選

    PCIe Gen 1 - 4應用設計的4輸出超低功耗時鐘生成器,它的出現為眾多電子工程師提供了新的解決方案。接下來,讓我們一同深入了解這款產品的特點、性能以及應用場景。 文件下載
    的頭像 發表于 03-15 17:25 ?1010次閱讀

    硅臻正式推出QRNG全系列量子隨機數發生器產品

    信息安全是社會穩定的必要條件,數字時代其重要性更是愈發凸顯。無論在經典還是量子加密的過程中,隨機數都是安全性的基石。加密密鑰由隨機數生成,安全性由隨機數的不可預測性保證。與偽
    的頭像 發表于 03-10 16:24 ?316次閱讀
    硅臻正式推出QRNG全系列量子<b class='flag-5'>隨機數</b>發生器產品

    飛凌嵌入式ElfBoard-系統信息與資源之產生隨機數

    整數,作為隨機數生成器的種子值。它決定了 rand() 函數生成隨機數序列的起始點。4.返回值無。5.示例:(使用rand函數產生一組隨機數
    發表于 01-22 08:59

    如何在LTspice仿真中實現隨機數和真隨機數生成

    to reseed the MC generator(使用時鐘重新設置MC生成器隨機種子)選項。文章探討了偽隨機數和真隨機數之間的利弊權衡,同時比較了蒙特卡羅統計仿真與更有針對性的
    的頭像 發表于 01-09 14:08 ?4772次閱讀
    如何在LTspice仿真中<b class='flag-5'>實現</b>偽<b class='flag-5'>隨機數</b>和真<b class='flag-5'>隨機數</b>的<b class='flag-5'>生成</b>

    德思特應用 | 前沿量子隨機數研究:多特蒙德工業大學如何通過高速數字化儀保障信息安全

    在量子信息時代,生成真正隨機的數字對加密與安全至關重要。多特蒙德工業大學研究人員利用高速數字化儀對量子隨機數生成過程進行多通道采集與分析,成功實驗評估竊聽風險,為密碼協議與安全應用提供
    的頭像 發表于 12-22 17:22 ?474次閱讀
    德思特應用 | 前沿量子<b class='flag-5'>隨機數</b>研究:多特蒙德工業大學如何通過高速數字化儀保障信息安全

    如何通過地址生成器實現神經網絡特征圖的padding?

    涉及相應地址的時候,直接輸入零數據,第二種則是在對應padding地址存入零數據,正常讀取數據。 兩種實現方式的主要區別在于:稀疏地址生成器的控制邏輯更為復雜,但其相比于直接輸入零數據的方式可以節省
    發表于 10-22 08:15

    ?基于RNG90的真隨機數生成器技術解析與應用指南

    Microchip Technology RNG90 CryptoAuthentication?器件設計用于需要安全隨機數發生器的系統。RNG90即用型,無需任何定制。Microchip RNG90
    的頭像 發表于 10-10 15:01 ?776次閱讀
    ?基于RNG90的真<b class='flag-5'>隨機數</b><b class='flag-5'>生成器</b>技術解析與應用指南

    非對稱密鑰生成和轉換規格詳解

    )。 h:余因子(cofactor)。 sk:私鑰,是一個隨機整數,小于n。 pk:公鑰,是橢圓曲線上的一個點, pk = sk * g。 當創建非對稱密鑰生成器時,對于指定公/私鑰參數生成ECC密鑰
    發表于 09-01 07:50

    隨機數和偽隨機數的區別

    隨機數在當前程序運行環境中是一種常用參數,目前主要分為兩種,偽隨機數和真隨機數,本期我們就來講一下二者的區別。
    的頭像 發表于 08-27 17:46 ?2792次閱讀

    DS28S60具有ChipDNA的DeepCover加密協處理器技術手冊

    SP800-90B標準的真隨機數生成器(TRNG)用于片內加密操作,并在需要時向主機控制器提供隨機數據和隨機數。通過3.6KB安全閃存支持密鑰、證書、公鑰/私鑰和特定于應用程序的敏感
    的頭像 發表于 05-13 14:39 ?929次閱讀
    DS28S60具有ChipDNA的DeepCover加密協處理器技術手冊

    labview求助:想寫一個labview輸出不重復隨機數的程序,有沒有大佬幫忙看看這個假分支要怎么寫?

    大佬們想寫一個labview輸出不重復隨機數的程序,有沒有大佬幫忙看看這個假分支要怎么寫
    發表于 04-27 08:39

    基于RV1126開發板移植NCNN部署方法

    移動端優化的開源神經網絡推斷。能實現無第三方依賴,跨平臺操作,在手機端CPU運算速度在開源框架中處于領先水平。基于該
    的頭像 發表于 04-16 15:24 ?715次閱讀
    基于RV1126開發板<b class='flag-5'>移植</b>NCNN部署<b class='flag-5'>庫</b>方法

    labview怎么輸出不重復的整數隨機數

    大佬們我想問一下怎么能夠生成不重復的隨機數,labview能夠輸出整數隨機數
    發表于 04-16 11:15