2012-05-27 34 views
3

問題

對於一個物理的項目背後的原因,我們要分析兩個表面(由一羣頂點的規定),並計算這些表面之間的體積。爲了能夠做到這一點,我們希望實現一個二維區間搜索樹。總的來說,漸近運行時間將接近於O(n日誌)。值得從matlab中調用java嗎?

問題

總之,我們要實現的算法,這將是相當耗時。此外,該算法不會從matlab中高度優化的數學庫中獲益。因此,我們正在考慮從matlab調用Java。結論我們想知道:

「Java比matlab更快,忽略了matlab中數學庫的高度優化性能?」

「有沒有當重複調用從MATLAB的Java方法的任何顯著延遲?」

例如每次調用該方法時都必須啓動JVM嗎?每次調用該方法時,該jar是否必須加載?

我希望你們中的一些人能夠幫助我(也許還有其他人)處理這個問題。

+0

MATLAB的圖形用戶界面的JVM中運行,所以我認爲它只是使用該JVM來執行調用。我不認爲它很慢,可能與MATLAB調用相當。我會根據哪種語言編碼更容易做出決定。與矩陣操作相比,MATLAB具有更高級別的功能。 – Ansari

回答

1

如果您決定寫在MATLAB中實現,這裏有關於MATLAB OOP性能出色答卷提出了一些非常好的點@AndrewJanke(值得一讀的整個後):

模仿C++或Java MATLAB中的類可能不是最優的。 通常構建Java/C++類,使得對象是最小的構建塊,具體如您所能(即大量不同的類),然後將它們組成數組,集合 對象等,然後迭代他們與循環。要快速完成類,請將該方法從裏面翻出來。有更大的類,其 字段是數組,並在這些數組上調用矢量化方法。

關鍵是要安排你的代碼,以發揮語言的優勢 - 數組處理,向量化數學 - 並避免弱點。

要回答你的問題,我引用文檔:

在MATLAB啓動時,MATLAB的虛擬地址空間的一部分是 由Java虛擬機(JVM)保留的,不能用於 存儲MATLAB數組。

所以它只在啓動時初始化一次。

當調用Java方法而不是M文件時(因爲MATLAB類型必須編組到Java數據類型和從Java數據類型編組),會產生開銷。

現在如果你想擠出的性能每一點,請確保調用Java方法爲:代替

func(obj) 

obj.func() 
2

我曾經多次從MATLAB命令行中使用過Java類。我不知道每次進行Java調用時是否重新啓動JVM,也不知道與執行獨立Java類相比延遲了多少。但是,我還沒有「感覺到」任何緩慢。

您似乎需要爲您的問題創建自定義數據結構,這是您無法輕鬆或有效地用MATLAB做的事情。另一個有助於決定使用哪一個的問題是:使用Java還是使用Matlab,開發速度會更快?如果對此的答案是Java,我肯定會建議與Java一起。

+0

謝謝你,所有的問題的答案確實是Java,所以我會去Java。 – user23127

0

我建議您嘗試以最簡單的方式實現原型,並看看它的表現如何。如果表現顯然不夠好,請嘗試另一種方法,看看它是否更好。

(對於這樣的事情可能很難做出一般預測,因爲真正的答案通常嚴重依賴於問題和設計的細節問題。另一方面,您可能會發現,得到足夠的加速與假設更有效的方法來證明這一努力。)

1

這個問題似乎非常適合並行性。爲什麼Java是您首先考慮的唯一選擇?我想你應該看看你的初始代碼的性能如何,如果有必要的話,看看使用MATLAB的一些內置GPU功能。

+0

我們只考慮Java,因爲我在Mac OSX上開發自己的一部分,其他一些工作在Windows上,所以我們希望我們的程序儘可能跨平臺。此外,我只知道C++是其他主要的編程語言,而我對C++和Mac沒有很好的經驗。 我沒有想到GPGPU計算,這聽起來像一個好主意(並有機會學習如何做到這一點:)) – user23127