[英]Thread Safety of Matrix<> Vector<>in MathNet
我已經搜索了這個站點和 Math.Net 2 站點,但是我找不到任何關於線程安全的確切信息。
MathNet 對象是線程安全的嗎? 例如,如果我創建一個對象MathNet.Numerics.LinearAlgebra.Matrix
或MathNet.Numerics.LinearAlgebra.Vector
可以在我的應用程序的多個線程中使用 MathNet 函數,例如Add()
、 At()
等? 像MathNet.Numerics.Control.UseMultiThreading()
這樣的東西怎么樣?
需要明確的是,我不是在詢問 MathNet 函數中的多線程,而是使用在我的應用程序中創建的多個線程的對象本身的線程安全性。
謝謝
如果您查看后備存儲( DenseVectorStorage
、 SparseVectorStorage
和與矩陣相關的存儲)的來源,它們使用簡單的 arrays 來存儲索引和數據,沒有線程安全檢查。
例如SparseVectorStorage.At()
包含一個簡單的return itemIndex >= 0? Values[itemIndex]: Zero;
return itemIndex >= 0? Values[itemIndex]: Zero;
缺乏線程安全是可以理解的,因為該庫的目標是快速,用戶可以自由地放慢速度並在需要時自行添加線程安全。
至於您關於Control.UseMultiThreading()
的問題(以及它缺乏文檔),這似乎主要用於加速計算,特別是因為線性代數計算的性質是高度可並行的,而無需修改現有結構。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.