Saya telah mengerjakan beberapa kode intensif perhitungan SANGAT dalam (terkesiap!) C #.
Saya sedang membangun implementasi GPGPU FDTD untuk pemodelan optik. Pada kluster kecil (128 prosesor), banyak dari simulasi kami yang membutuhkan waktu berminggu-minggu untuk berjalan. Implementasi GPU, bagaimanapun, cenderung berjalan sekitar 50x lebih cepat - dan itu pada kartu NVidia kelas konsumen. Kami sekarang memiliki server dengan dua kartu dual-prosesor GTX295 (beberapa ratus core), dan akan segera mendapatkan beberapa Teslas.
Bagaimana hal ini berkaitan dengan bahasa Anda? Dengan cara yang sama bahwa kode C ++ FDTD yang kami gunakan sebelumnya adalah CPU-terikat, ini adalah GPU-terikat, sehingga perbedaan tenaga kuda ( sangat kecil) dari kode dikelola vs asli tidak pernah ikut bermain. Aplikasi C # bertindak sebagai konduktor - memuat kernel OpenCL, meneruskan data ke dan dari GPU, menyediakan antarmuka pengguna, melaporkan, dll. - semua tugas yang menyebalkan di C ++.
Dalam beberapa tahun terakhir, perbedaan kinerja antara kode yang dikelola dan yang tidak dikelola cukup signifikan sehingga kadang-kadang layak untuk bertahan dengan model objek C ++ yang mengerikan untuk mendapatkan kecepatan ekstra beberapa persen. Saat ini, biaya pengembangan C ++ vs C # jauh lebih besar daripada manfaat untuk sebagian besar aplikasi.
Juga, sebagian besar perbedaan kinerja Anda tidak akan datang dari pilihan bahasa Anda, tetapi dari keterampilan pengembang Anda. Beberapa minggu yang lalu, saya memindahkan operasi divisi tunggal dari dalam loop tiga bersarang (3D array traversal) loop, yang mengurangi waktu eksekusi untuk domain komputasi tertentu sebesar 15%. Itu adalah hasil dari arsitektur prosesor: divisi lambat, yang merupakan salah satu wajah yang Anda hanya perlu mengambil di suatu tempat.