Şebekemden daha fazla işlem gücü elde etmeye çalışıyorum.
Tüm cpus / çekirdeklerini kullanıyorum, GPU'yu C # ile kullanmak mümkün mü?
Herkes herhangi bir kütüphane biliyor veya herhangi bir örnek kod var mı?
Şebekemden daha fazla işlem gücü elde etmeye çalışıyorum.
Tüm cpus / çekirdeklerini kullanıyorum, GPU'yu C # ile kullanmak mümkün mü?
Herkes herhangi bir kütüphane biliyor veya herhangi bir örnek kod var mı?
Yanıtlar:
[ Bu cevap bile oldukça eski olduğu için Ekim 2017'yi düzenleyin ]
Bu cevapların çoğu oldukça eski, bu yüzden her bir projenin nerede olduğunu düşündüğümün güncel bir özetini vereceğimi düşündüm:
GPU.Net (TidePowerd) - Bunu 6 ay önce denedim ve biraz çalışma gerektirse de işe başladım. C # çekirdek kodunu derleme zamanında cuda'ya dönüştürür. Ne yazık ki kendi web sitesi kapatıldı ve github birkaç yıldır güncellenmedi, bu projenin öldüğünü gösterebilir ....
Cudafy - Açık kaynak kodlu ve kullanımı çok kolay. C # çekirdek kodunu çalışma zamanında cuda'ya dönüştürür (serileştirme ve önbellekleme özelliği ile). CPU'da aynı çekirdek kodunu kolayca çalıştırabilir (çoğunlukla hata ayıklama için). Birden fazla GPU'yu destekler. Burada diğerlerinden daha fazla örnek. Diğer cevaplar tarafından atıfta bulunulan ortak kod en az düzeydedir ve benim durumumda en azından kodun nasıl çalıştığını anlamamda yardımcı oldu. Cuda / Nvidia sadece. Ne yazık ki, çözümlerini birkaç yıl boyunca güncellemedikleri görülüyor (2015'teki son taahhüt - cuda 7.0 desteği).
Hibridizatör . C # 'dan CUDA' ya derlenen ticari çözüm. Visual studio pazarında ücretsiz bir topluluk baskısı ve github'da örnekler sunar .
AleaGPU Tüketici GPUS'u için ücretsiz topluluk sürümüne sahip ticari çözüm. Ayrıntılar için Daniel'in yorumlarına bakın.
Brahma - LINQ ifadelerini OpenCL aracılığıyla çalıştırır (bu nedenle AMD'yi de destekler). Çok fazla belge / örnek yok. Son güncelleme 2011.
C $ - son gelişme 10 yıl önce oldu ...
Microsoft Accelerator - benzer şekilde artık aktif olarak geliştiriliyor gibi görünmüyor.
bazıları ( C ++ AMP , OpenTK - Ölü / Cloo ) - yani C # dan GPU aramaya izin yok, ama (aslında GPU üzerinde çalıştırılan code) çekirdek kodu ile yazılmış gerekiyor - bunların çoğunun sadece bağlamaları vardır C veya OpenCL, başka bir dili kullanmanız (ve öğrenmeniz) anlamına gelir.
Dediğim gibi Cudafy tüm diğerleri üzerinde tavsiye ederim - OpenCL yanı sıra Cuda üzerinde çalıştırmak mükemmel olurdu.
SEP 2013 EDIT Cudafy artık hem CUDA hem de OpenCL için derlemenize izin veriyor , bu nedenle tüm GPU'larda aynı C # kodunu çalıştıracak. OpenCL derlemesini henüz test etmeme rağmen bu harika görünüyor.
Microsoft Research Accelerator bir .NET GP GPU kitaplığıydı.
Brahma buldum ... Aynı zamanda GPU üzerinde çalışan yöntemlere izin veren bir GPGPU sağlayıcısı var ... Soru için teşekkürler ... Bugün yeni bir şey öğrendim. :)
XNA Game Studio'yu keşif için olası bir yol olarak önerebilir miyim? Açıkçası oyun yazmak için hazırlanmıştır, ancak grafik kartınıza yönetilen erişim ve daha önce yönetilen DirectX'te mevcut olandan daha fazla kapasite numaralandırma işlevlerine ve gölgelendirici geliştirmeye daha iyi erişim sağlar. WinForms ve XNA'yı hibrit uygulamalarda birleştirmenin yolları da vardır:
http://www.ziggyware.com/news.php?readmore=866
Gölgelendirici programlamayı öğrenmek için biraz çaba harcamalısınız (XNA, HLSL'yi destekler), ancak bu, nVidia'nın CUDA gibi satıcıya özgü bir çözümü öğrenmekten daha basit bir yaklaşım olabilir. Avantajı% 100 yönetilen bir ortamda programlayabilmenizdir. İşte bazı HLSL bağlantıları:
http://www.ziggyware.com/weblinks.php?cat_id=9
GPGPU sitesi ayrıca genel amaçlı GPU programlama için önerilen bir hedeftir:
İyi şanslar!
Http://www.tidepowerd.com/ GPU.NET'e ne dersiniz?
İşte bir tane daha: CUDAfy . GPU.Net gibi geliyor, çünkü bir yöntem özniteliği kadar basit bir şey tüm yöntemin GPU'da çalışmasına neden olabilir. Ancak GPU.Net'in aksine, CUDAfy ücretsiz ve açık kaynaklıdır.
GPU.Net olsa hiçbir Demirbaş kodu gerektirdiği görülmektedir (kendi docs göre, "yap-araç tarafından otomatik olarak enjekte" oluyor) CUDAfy yapar iken,.
İşte CUDAfy ile bir uygulama oluşturmaya bir örnek.
Bu oldukça eski bir soru ve sorulduğu için işler çok değişti. Alea GPU'daki
yanıtlarda hiç kimsenin bahsetmediği GPU kodu yazmak için .Net'i kullanmak için başka bir seçenek . C #, F # ve VB'yi kapsar.
.NET ve Mono için profesyonel GPU yazılım geliştirme ortamı. Gerçekten çapraz platform
F # resmi sitesinde, Alea GPGPU programlamasında F # kullanmak için ilk seçenektir .
Bu çerçeveyi tanımak için kapsamlı örnek listesine bir göz atmanızı öneririm .
Brahma'ya ek olarak, C $ ' a göz atın ("C Bucks" olarak telaffuz edilir). CodePlex sitelerinden :
[C $] 'ın amacı, modern GPU'lar ve CPU'larda kesintisiz paralel programlama için birleşik bir dil ve sistem oluşturmaktır.
Tembel olarak değerlendirilen C # tabanlıdır ve çoklu hızlandırıcı modellerini hedefler:
Şu anda amaçlanan mimarilerin listesi GPU, Çok çekirdekli CPU, Çok GPU (SLI, CrossFire) ve Çok GPU + Çok CPU Hibrit Mimarisini içermektedir.
Şehirde yeni bir Microsoft çözümü var - C ++ AMP ( buraya giriş ).
Masaüstü uygulamaları için burada ve (çağırmayın) Metro uygulamaları için burada gösterildiği gibi C # ile kullanım P / Invoke aracılığıyla olacaktır .
Düzenleme: C ++ AMP, mutlaka MS derleyici için veya sadece Windows için değil anlamına gelir açık bir belirtime sahip olduğunu not etmeliyim .
Düzenleme: Görünüşe göre, teknoloji şimdi "bakım modunda", yani onlar hataları düzeltmek, ama aktif olarak gelişmekte değil demektir.
CenterSpace Software, NMath kütüphanelerinde C # projesine ekleyebileceğiniz GPU destekli hesaplamaya sahiptir . Ticari bir üründür.
Özel çekirdeklere ihtiyaç duyan kendi algoritmalarınızı uygulayacaksanız:
Kısa süre önce bu github deposuna açık kaynaklı bir proje yükledim OpenCL kullanan .
Yaptığı şey (wiki sayfasından da kontrol edebilirsiniz), birden fazla OpenCL özellikli cihaz ve kullanıcıdan bir çekirdek dizesi seçmek ve C # veya C ++ dizi sarmalayıcıları oluşturmak ve otomatik yük dengeleyici ve pc dışında iyi verimlilik elde etmek için pipeliner (gecikmeleri gizlemek için).
Kullanımının bir örneği (her biri aynı kodu çalıştıran ancak farklı veri ve threadId kullanan tüm cihazlara bölünmüş 1024 iş öğesi):
// 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
hepsi artık kullanılmadığında, tüm C ++ kaynaklarını yıkıcılarıyla birlikte serbest bırakırlar.
Ama bu olgun değil, bu yüzden github sorunları sekmesine herhangi bir "sorun" eklemek için çekinmeyin. Çoklu pc-küme ile ilgili sınıflar çalışmıyor ve henüz İngilizce'ye çevrilmiyor, ancak en azından tek bir bilgisayardaki tüm cihazları kullanabilir.
WPF ayrıca GPU kullanır ve HLSL kullanarak özel gölgelendiriciler ekleyebilirsiniz.