Я разрабатываю код Lattice Boltzmann (Fluid dynamic), используя F #. Теперь я тестирую код на 24 ядрах, 128 ГБ сервере памяти. Код в основном состоит из одной основной рекурсивной функции для эволюции времени и внутри цикла System.Threading.Tasks.Parallel.For для трехмерной пространственной итерации пространства. 3D-пространство 500x500x500 больших и один временной цикл берет навсегда:).
let rec timeIterate time =
// Time consuming for loop
System.Threading.Tasks.Parallel.For(...)
Я ожидаю, что сервер будет использовать все 24 ядра, то есть 100% использования. То, что я наблюдаю, составляет от 1% до 30% использования.
И мои вопросы:
- Является ли F # подходящим инструментом для вычислений HPC на таких серверах?
- Реально ли использовать до 100% процессора для реальной проблемы?
- Что мне делать, чтобы получить высокую скорость? Все находится в одной большой параллели для цикла, поэтому я ожидаю, что это все, что я должен делать...
- Если F # НЕ является подходящим языком, на каком языке?
Спасибо за любые предложения.
EDIT: Я готов поделиться кодом, если кто-то заинтересован взглянуть на него.
EDIT2: Вот разделенная версия кода: http://dl.dropbox.com/u/4571/LBM.zip Это не делает ничего разумного, и я надеюсь, что я не ввел никаких ошибок, сняв код:)
Загрузочный файл - ShearFlow.fs, а в нижней части файла
let rec mainLoop (fA: FArrayO) (mR: MacroResult) time =
let a = LBM.Lbm.lbm lt pA getViscosity force g (fA, mR)