Saya mencoba untuk mendapatkan lebih banyak kekuatan pemrosesan dari jaringan saya.
Saya menggunakan semua cpus / core, apakah mungkin menggunakan GPU dengan C #.
Adakah yang tahu perpustakaan atau punya kode sampel?
Saya mencoba untuk mendapatkan lebih banyak kekuatan pemrosesan dari jaringan saya.
Saya menggunakan semua cpus / core, apakah mungkin menggunakan GPU dengan C #.
Adakah yang tahu perpustakaan atau punya kode sampel?
Jawaban:
[ Edit OCT 2017 karena jawaban ini sudah cukup lama ]
Sebagian besar jawaban ini cukup lama, jadi saya pikir saya akan memberikan ringkasan terbaru tentang di mana menurut saya setiap proyek:
GPU.Net (TidePowerd) - Saya mencoba ini 6 bulan yang lalu atau lebih, dan berhasil melakukannya meskipun butuh sedikit kerja. Mengubah kode kernel C # menjadi cuda pada waktu kompilasi. Sayangnya situs web mereka tidak aktif dan github mereka belum diperbarui selama beberapa tahun, yang mungkin menunjukkan bahwa proyek tersebut sudah mati ....
Cudafy - Open source dan sangat mudah digunakan. Mengonversi kode kernel C # menjadi cuda saat runtime (dengan kemampuan untuk membuat serial dan cache). Dapat dengan mudah menjalankan kode kernel yang sama pada CPU (kebanyakan untuk debugging). Mendukung banyak GPU. Lebih banyak contoh tersedia daripada yang lain di sini. Kode boilerplate yang dirujuk oleh jawaban lain minimal, dan dalam kasus saya setidaknya membantu pemahaman saya tentang cara kerja kode. Cuda / Nvidia saja. Sayangnya, tampaknya mereka juga tidak memperbarui solusi mereka selama beberapa tahun (komit terbaru pada tahun 2015 - dukungan cuda 7.0).
Hibridizer . Solusi komersial yang menyusun C # ke CUDA. Menyediakan edisi komunitas gratis di pasar studio visual dan sampel di github .
Solusi AleaGPU Komersial dengan edisi komunitas gratis untuk GPUS konsumen. Lihat komentar Daniel untuk detailnya.
Brahma - menjalankan ekspresi LINQ melalui OpenCL (sehingga mendukung AMD juga). Tidak banyak dokumentasi / contoh. Pembaruan terakhir pada tahun 2011.
C $ - pengembangan terakhir lebih dari 10 tahun yang lalu ...
Microsoft Accelerator - juga tidak terlihat seperti sedang dikembangkan secara aktif lagi.
beberapa lainnya ( C ++ AMP , OpenTK - dead / Cloo ) - banyak di antaranya hanya binding - yaitu memungkinkan Anda memanggil GPU dari C #, tetapi kode kernel Anda (kode yang sebenarnya dijalankan di GPU) perlu ditulis di C atau OpenCL, artinya Anda harus menggunakan (dan mempelajari) bahasa lain.
Seperti yang saya katakan, saya akan merekomendasikan Cudafy daripada yang lain - jika itu bisa berjalan di OpenCL dan juga Cuda, itu akan sempurna.
EDIT September 2013 Cudafy sekarang memungkinkan Anda untuk mengkompilasi untuk kedua CUDA dan OpenCL, sehingga akan berjalan C # sama kode pada semua GPU. Kedengarannya fantastis, meskipun saya belum menguji kompilasi OpenCL.
Microsoft Research Accelerator adalah pustaka GPU GP .NET.
Saya menemukan Brahma ... Ia juga memiliki penyedia GPGPU yang memungkinkan metode untuk dijalankan pada GPU ... Terima kasih atas pertanyaannya ... Mempelajari sesuatu yang baru hari ini. :)
Bisakah saya merekomendasikan XNA Game Studio sebagai jalan yang memungkinkan untuk eksplorasi? Ini jelas disiapkan untuk menulis permainan, tetapi memberi Anda akses terkelola ke kartu grafis Anda dan akses yang jauh lebih baik ke fungsi enumerasi kemampuan dan pengembangan shader daripada yang sebelumnya tersedia di, katakanlah, Managed DirectX. Ada juga cara untuk menggabungkan WinForms dan XNA ke dalam aplikasi hybrid:
http://www.ziggyware.com/news.php?readmore=866
Anda harus berusaha mempelajari pemrograman shader (XNA mendukung HLSL), tetapi ini mungkin pendekatan yang lebih sederhana daripada mempelajari solusi khusus vendor seperti CUDA nVidia. Keuntungannya adalah Anda dapat memprogram dalam lingkungan yang 100% terkelola. Berikut beberapa tautan HLSL:
http://www.ziggyware.com/weblinks.php?cat_id=9
Situs GPGPU juga merupakan tujuan yang disarankan untuk pemrograman GPU tujuan umum:
Semoga berhasil!
Bagaimana dengan http://www.tidepowerd.com/ GPU.NET?
Ini satu lagi: CUDAfy . Kedengarannya seperti GPU.Net, karena sesuatu yang sederhana seperti atribut-metode dapat menyebabkan seluruh metode berjalan di GPU. Tetapi tidak seperti GPU.Net, CUDAfy gratis dan open-source.
GPU.Net tampaknya tidak memerlukan kode boilerplate, meskipun (Menurut dokumen mereka, itu "disuntikkan secara otomatis oleh build-tool") , sementara CUDAfy membutuhkannya.
Berikut adalah contoh membangun aplikasi dengan CUDAfy.
Ini adalah pertanyaan yang cukup lama, dan sejak ditanyakan banyak hal telah berubah banyak.
Opsi lain untuk menggunakan .Net untuk menulis kode GPU, yang belum disebutkan oleh siapa pun dalam jawaban di Alea GPU . Ini mencakup C #, F # dan VB.
Lingkungan pengembangan perangkat lunak GPU profesional untuk .NET dan Mono. Benar-benar lintas platform
Di situs resmi F #, Alea adalah opsi pertama untuk menggunakan F # dalam pemrograman GPGPU.
Untuk mengetahui kerangka kerja ini, saya sarankan untuk melihat daftar contoh lengkapnya .
Selain Brahma, lihat C $ (dibaca "C Bucks"). Dari situs CodePlex mereka :
Tujuan dari [C $] adalah menciptakan bahasa dan sistem terpadu untuk pemrograman paralel yang mulus pada GPU dan CPU modern.
Ini didasarkan pada C #, dievaluasi dengan malas, dan menargetkan beberapa model akselerator:
Saat ini daftar arsitektur yang dimaksud mencakup GPU, Multi-core CPU, Multi-GPU (SLI, CrossFire), dan Multi-GPU + Multi-CPU Hybrid Architecture.
Ada solusi Microsoft baru di kota - C ++ AMP (intro di sini ).
Penggunaan dari C # akan melalui P / Invoke, seperti yang didemonstrasikan di sini untuk aplikasi desktop, dan di sini untuk aplikasi Metro (jangan ditelepon).
Sunting: Perlu saya perhatikan bahwa C ++ AMP memiliki spesifikasi terbuka , yang berarti tidak harus hanya untuk kompiler MS, atau hanya untuk Windows.
Sunting: Rupanya, teknologi sekarang dalam "mode pemeliharaan," yang berarti mereka memperbaiki bug, tetapi tidak berkembang secara aktif.
Jika semua GPU Anda adalah merek yang sama, Anda mungkin bisa mendapatkan dukungan GPGPU dari vendor, baik melalui Nvidia's CUDA atau ATI's Stream. AFAIK, mereka menyediakan DLL, yang dapat Anda gunakan melalui P / Invoke.
CenterSpace Software memiliki komputasi bertenaga GPU di perpustakaan NMath mereka, Anda dapat menambahkan proyek C #. Ini produk komersial.
Jika Anda akan menerapkan algoritma Anda sendiri yang membutuhkan kernel khusus:
Saya baru-baru ini mengunggah proyek open-source saya ke repositori github ini yang menggunakan OpenCL.
Apa yang dilakukannya (Anda dapat memeriksa dari halaman wiki-nya juga) adalah, memilih beberapa perangkat yang mendukung OpenCL dan string kernel dari pengguna dan membuat pembungkus array C # atau C ++ kemudian menghitung menggunakan semua, dengan bantuan penyeimbang beban otomatis dan pipeliner (untuk menyembunyikan latensi) untuk mendapatkan efisiensi yang baik dari pc.
Berikut adalah contoh penggunaannya (1024 workitems dipartisi ke semua perangkat, masing-masing menjalankan kode yang sama tetapi menggunakan data dan threadId yang berbeda):
// select all GPUs and all CPUs in same pc
ClNumberCruncher gpuCpu = new ClNumberCruncher(AcceleratorType.GPU | AcceleratorType.CPU, @"
__kernel void distributeTanh(__global float * data,__global int * data2)
{
int threadId=get_global_id(0);
data[threadId]=tanh(data[threadId]);
data2[threadId]=threadId;
}
");
// a wrapper that can hold C# or C++ arrays
ClArray<float> data = new ClArray<float>(1024);
ClArray<int> data2 = new int[1024];
// load-balances "distributeTanh" on all devices more fairly
// at each repeatation of this line with same compute-id(1 here)
data.nextParam(data2).compute(gpuCpu, 1, "distributeTanh", 1024);
// threadId in kernel receives unique continuous id value for all work
// either it is in cpu or gpu doesn't matter
// compute method also has parameters to enable pipelining to
// elliminate buffer copy latencies or compute latencies
ketika semua tidak digunakan lagi, mereka melepaskan semua sumber daya C ++ dengan penghancurnya.
Tapi itu tidak terlalu dewasa, jadi silakan tambahkan "masalah" apa pun di tab masalah github. Kelas relevan multi-pc-cluster tidak berfungsi dan belum diterjemahkan ke bahasa Inggris tetapi setidaknya dapat menggunakan semua perangkat di satu pc.
WPF juga menggunakan GPU dan Anda dapat menambahkan shader kustom menggunakan HLSL.