Я працював над деяким ДУЖЕ інтенсивним розрахунковим кодом у (ах!) C #.
Я будую реалізацію FDTD для оптичного моделювання GPGPU . На невеликому (128 процесорному) кластері, для багатьох наших моделей потрібні тижні. Однак реалізація GPU, як правило, працює приблизно в 50 разів швидше - і це на картці NVidia споживача. Зараз у нас є сервер з двома двопроцесорними картами GTX295 (кілька сотень ядер), і ми скоро отримуємо кілька Teslas.
Як це стосується вашої мови? Так само, як C ++ FDTD-код, який ми використовували раніше, був пов'язаний з процесором, це пов'язані з графічним процесором, тому ( дуже мала) різниця кінських сил від керованого проти нативного коду ніколи не вступає в дію. Додаток C # виконує функцію провідника - завантажує ядра OpenCL, передає дані до та з графічних процесорів, забезпечує користувальницький інтерфейс, звітування тощо - всі завдання, які завдають біль дупі в C ++.
У минулі роки різниця в продуктивності між керованим і некерованим кодом була досить значною, що іноді варто було миритися зі страшною об'єктною моделлю C ++, щоб отримати додаткові кілька відсотків швидкості. У наші дні вартість розробки C ++ проти C # набагато переважає переваги для більшості програм.
Крім того, більшість різниць у вашій ефективності відбуватимуться не з вибору мови, а з майстерності вашого розробника. Кілька тижнів тому я перемістив операцію єдиного поділу зсередини циклу потрійного вкладення (обхід 3D-масиву), що скоротив час виконання для даного обчислювального домену на 15%. Це результат архітектури процесорів: поділ повільний, що є одним із тих облич, які вам просто потрібні, десь підібрані.