Yürütme devre dışı biti dikkate alınarak, yerel işlemciye, VB.NET 2008 veya C# gibi yüksek düzeyde yönetilen bir ortamdan yönergelerin uygulanması için önerilen yol nedir. Buna ek olarak, grafik işlemciye karşı GPU komutlarını yürütme konusunda da benzer bir sonuç elde edildi mi?Yönetilen koddan CPU/GPU yönergelerini yürütme
cevap
Kendi C++ sarmalayıcılarını P/Invoke geri dönerek veya yazmadan doğrudan erişim için C# için bir kaç GPU seçeneği vardır:
- Brahma oldukça ilginç. Özelleştirilmiş bir LINQ sağlayıcısı aracılığıyla GPU'ya doğrudan erişim sağlar. Bu kod, GPU üzerinde çalışan ve C# ile LINQ üzerinden yazılmış çok sayıda hesaplama yöntemini içerir.
- SlimDX, tüm büyük DirectX işlevselliğine güzel bir .NET sarıcısı sağlar. Özel gölgelendiricilerle, DirectX üzerinden GPU'da hesaplama yapabilirsiniz. Ayrıca DX11 desteğini de içerir, bu yüzden hesaplama gölgelendiricilerini doğrudan kullanabilirsiniz (bunun için donanımınız varsa).
- CUDA'ya CUDA.NET aracılığıyla erişebilirsiniz.
- OpenCL'yi OpenCL.NET aracılığıyla kullanabilirsiniz.
CPU yönergeleriyle ilgili olarak, bu genellikle assembler komutuyla daha düşük düzeydeki yerel koda düşmeyi gerektirir. Muhtemelen, tamamen yönetilen (en azından kısmen ilgili) en ilginç seçenek, Mono yığınında çalışırken yönetilen koddaki CPU'daki SIMD komutlarına doğrudan erişim sağlayan Mono.Simd'un kullanılmasıdır.
Mono.Simd link müthiş teşekkür ederim – PeanutPower
İstediğiniz talimatları içeren yönetilmeyen .dll kitaplığı oluşturun ve bunu çağırmak için P/Invoke kullanın.
Bu bir seçenek değil. MASM tarafından oluşturulan veya inline derleme veya intrinsics kullanarak yönetilmeyen C/C++ ile yazılmış DLL'de bir işlevi çağırmanız gerekir. Veya C++/CLI derleyicisini kullanın ve #pragma tarafından yönetilen karma mod kodu oluşturun.
Artık, işletim sistemi için uygun olan herhangi bir platform kodu oluşturan JIT derleyicisine artık güvenemeyeceğinizden emin olun. Mimariyi yönetilmeyen kodunuza uyacak şekilde zorlamak için Project + Properties, Build sekmesi, Platform Target'ı kullanın.
Yönetilen GPU kodu için CUDA'ya bakın.
Gerçek soru şudur: Neyi başarmaya çalışıyorsunuz? GPU'yu CUDA.NET ile kullanabilirsiniz (http://www.hoopoe-cloud.com/Solutions/CUDA.NET/Default.aspx). –
Amaç, özel hesaplamaları mümkün olduğunca çıplak metale yakın olarak çalıştırmak ancak yönetilen bir ortamdan başlatılmaktır. – PeanutPower
Mümkün [c ile GPU'yu Kullanma] (http://stackoverflow.com/questions/375011/utilizing-the-gpu-with-c-sharp) –