2014-01-21 181 views
4

我想在使用LIBSVM時利用當今的CPU多核功能。我想知道/理解的是我是否可以同時安全地從多個線程調用LIBSVM服務(例如,在參數調優過程中,使用不同參數在8個不同模型上調用svm_train())。LIBSVM是否安全線程

我能找到的唯一的參考是這個在LIBSVM的網站: Q: How can I use OpenMP to parallelize LIBSVM on a multicore/shared-memory computer?

的事情是,它談論並行訓練函數本身的算法(代碼),而是說有關調用培訓職能無關同時多次 - 我寧願這樣做,因爲它使我更好地控制交叉驗證&參數調整/網格搜索過程。

注意:我使用LIBSVM包本身(目前是java實現,也可能是python)。

回答

3

我知道你想對8個不同的問題實例和不同的參數調用svm_train()來獲得不同的模型實例!

當我看到Java源代碼時,我發現只讀取了問題和參數實例,沒有寫入任何內容。該方法創建它需要修改和存儲數據的所有對象,最後返回創建的模型。

這意味着從多個線程調用svm_train()應該沒有問題。

+0

感謝@fatih檢查代碼 - 我自己並沒有這樣做。然而,我在多線程測試時做了測試,而我的有限測試支持您的結論。 我想最好是得到一個確認庫的設計/實現與併發的想法。多線程是一項棘手的任務,如果做得不好(即使看起來合理),也可以很容易地進入雷達。 因爲我找不到任何這樣的確認,或者至少有人在多線程環境中使用它,所以對代碼的信心飛躍是最好的依靠:-) – MLearner

+0

我同意你的意見。你能指出我的實現不支持多線程的特定代碼嗎? – fatih

+0

我認爲你誤解了我 - 我沒有聲稱代碼或其部分不支持多線程。我找不到LibSvm是按設計多線程的確認(甚至是用例)。這樣的確認可以(有希望)保證圖書館:1)已經過測試和驗證,因爲這樣的使用2)將在未來的版本中保持如此 - 代碼審查無法保證的問題。話雖如此,知道代碼沒有提供併發違規(感謝您的努力),肯定會重新確保以這種方式使用它。 – MLearner