2011-02-11 74 views
0

據我所知,JIT不會將MSIL編譯爲將使用x86上的MMX指令的本機機器碼。如果這是真的(因爲我很難找到關於此問題的最新信息),那麼我想要一種在我的代碼中使用MMX的方法。我正在研究一個將要做幾乎所有單精度浮點數乘法(它是人工神經網絡)的應用程序。我基本上有這個問題的幾個問題。使用託管C++的MMX

我的第一個問題是,如果我在同一個項目中混合使用託管代碼和非託管代碼,是不是所有編譯到MSIL都是因爲「It Just Works」?如果我將非託管部分製作爲靜態或動態庫,編譯它們,並將它們用於託管項目,我會獲得最佳性能嗎?

我也研究過使用我的GPU與OpenCL(或CUDA,但它不會在ATI :()上工作,但如果我這樣做,編譯的GPU代碼不會被調用總之,我只是尋找最好的方式來獲得最快的浮點關節,同時仍然能夠使用我的託管GUI和多線程,並使用像MMX這樣的擴展似乎是我最好的選擇(如果我只需要使用CPU)。什麼是最好的方式有可能會去這樣做這樣的事?

感謝。

+0

我沒有你的問題的直接答案,但我想知道你是否可能不改進神經網絡算法或其使用,以提高性能?你可能需要更多的速度,但是我問,因爲我看到許多神經網絡項目都遭受了糟糕的神經架構,參數過度探索,數據設計較弱等等。 – Predictor 2011-02-11 11:37:22

回答

3

MMX是一個整數指令集,而不是浮點數。它只支持64位打包的字節,字和雙字整數。上證所有浮點支持。使用代碼中管理的#pragma在機器代碼和MSIL代之間切換。

0

你可以混合米非持久代碼和非託管代碼。只有託管編譯到MSIL。其餘的是本地的。

管理和非管理之間的成本...但不是太糟糕。

所以我會寫一個原生lib,完成所有高性能的東西,然後從託管代碼中使用它。

0

我的第一個是,如果我混合託管,並在同一個項目非託管代碼,是不是所有的編譯成MSIL,因爲「這只是工作」

號如果你沒有編譯與/clr:pure,本機代碼可以保持本機並與.NET代碼混合在一起。這被稱爲混合模式組裝。 (使用/clr:pure時,一切都變爲IL,並且根本無法使用本機代碼。)本機代碼將保持原生狀態。