c #으로 GPU 활용하기
그리드에서 더 많은 처리 능력을 얻으려고합니다.
모든 CPU / 코어를 사용하고 있으며 C #으로 GPU를 사용할 수 있습니까?
누구나 라이브러리를 알고 있거나 샘플 코드를 가지고 있습니까?
[ 이 답변도 꽤 오래되어 OCT 2017 편집 ]
이 답변의 대부분은 상당히 오래되었으므로 각 프로젝트가 어디에 있다고 생각하는지에 대한 업데이트 된 요약을 제공한다고 생각했습니다.
GPU.Net (TidePowerd)-6 개월 정도 전에 시도해 보았지만 약간의 작업이 필요했지만 작동했습니다. 컴파일 타임에 C # 커널 코드를 cuda로 변환합니다. 불행히도 그들의 웹 사이트는 다운되었고 github은 몇 년 동안 업데이트되지 않았습니다.
Cudafy- 오픈 소스이며 사용하기 매우 쉽습니다. 런타임에 C # 커널 코드를 cuda로 변환합니다 (직렬화 및 캐시 가능). CPU에서 동일한 커널 코드를 쉽게 실행할 수 있습니다 (주로 디버깅 용). 여러 GPU를 지원합니다. 여기에 다른 것보다 더 많은 예제가 있습니다. 다른 답변에서 언급 한 상용구 코드는 최소한이며 제 경우에는 코드 작동 방식에 대한 이해에 도움이되었습니다. Cuda / Nvidia 만 가능합니다. 불행히도, 그들은 2 년 동안 솔루션을 업데이트하지 않은 것으로 보입니다 (2015 년 최신 커밋-cuda 7.0 지원).
하이브리드 라이저 . C #을 CUDA로 컴파일하는 상용 솔루션. Visual Studio 마켓 플레이스 에서 무료 커뮤니티 에디션을 제공하고 github에서 샘플을 제공합니다 .
소비자 GPUS 를위한 무료 커뮤니티 에디션을 갖춘 AleaGPU 상업용 솔루션. 자세한 내용은 Daniel의 의견을 참조하십시오.
브라흐마-OpenCL을 통해 LINQ 표현식을 실행합니다 (따라서 AMD도 지원). 많은 문서 / 예제. 2011 년 마지막 업데이트.
C $ -10 년 전에 마지막 개발이 이루어졌습니다 ...
Microsoft Accelerator- 더 이상 활발히 개발되고있는 것처럼 보이지 않습니다.
일부 다른 것 ( C ++ AMP , OpenTK-dead / Cloo )-이것들 중 다수는 바인딩 일뿐입니다. 즉 C #에서 GPU를 호출 할 수 있지만 커널 코드 (실제로 GPU에서 실행되는 코드)를 작성해야합니다. C 또는 OpenCL은 다른 언어를 사용하고 학습해야 함을 의미합니다.
내가 말했듯이 Cudafy는 다른 모든 것보다 Cudafy를 추천 할 것입니다-OpenCL과 Cuda에서 실행될 수 있다면 완벽 할 것입니다.
Suda 2013 편집 Cudafy에서는 CUDA와 OpenCL 을 모두 컴파일 할 수 있으므로 모든 GPU에서 동일한 C # 코드를 실행합니다. OpenCL 컴파일을 아직 테스트하지는 않았지만 환상적으로 들립니다.
Microsoft Research Accelerator 는 .NET GP GPU 라이브러리입니다.
브라마를 발견했습니다 ... 또한 GPU에서 메소드를 실행할 수있는 GPGPU 제공 업체가 있습니다 ... 질문에 감사드립니다 ... 오늘 새로운 것을 배웠습니다. :)
탐험의 수단으로 XNA Game Studio를 추천 할 수 있습니까? 분명히 게임 작성에 적합하지만 관리되는 DirectX에서 이전에 사용했던 것보다 그래픽 카드에 대한 액세스 권한과 기능 열거 기능 및 셰이더 개발에 대한 액세스 권한이 훨씬 뛰어납니다. WinForms와 XNA를 하이브리드 애플리케이션으로 결합하는 방법도 있습니다 :
http://www.ziggyware.com/news.php?readmore=866
셰이더 프로그래밍을 배우려면 약간의 노력을 기울여야합니다 (XNA는 HLSL을 지원함). 이것은 nVidia의 CUDA와 같은 공급 업체별 솔루션을 배우는 것보다 간단한 접근법 일 수 있습니다. 장점은 100 % 관리 환경에서 프로그래밍 할 수 있다는 것입니다. 다음은 일부 HLSL 링크입니다.
http://www.ziggyware.com/weblinks.php?cat_id=9
GPGPU 사이트는 범용 GPU 프로그래밍을위한 권장 대상이기도합니다.
행운을 빕니다!
방법에 대한 http://www.tidepowerd.com/ GPU.NET?
또 다른 하나는 CUDAfy 입니다. 메소드 속성만큼 간단한 것이 전체 메소드가 GPU에서 실행될 수 있다는 점에서 GPU.Net처럼 들립니다. 그러나 GPU.Net과 달리 CUDAfy는 무료이며 오픈 소스입니다.
CUDAfy는 GPU.Net에 보일러 플레이트 코드가 필요없는 것으로 보입니다 (문서에 따르면 "빌드 툴에 의해 자동으로 주입됩니다") .
CUDAfy를 사용하여 애플리케이션을 빌드하는 예는 다음 과 같습니다.
글쎄, 이것은 꽤 오래된 질문이며, 질문을 받았기 때문에 많은 것이 바뀌 었습니다.
.Net을 사용하여 GPU 코드를 작성하는 또 다른 옵션은 Alea GPU 에서 아무도 언급하지 않았습니다 . C #, F # 및 VB를 다룹니다.
.NET 및 Mono를위한 전문 GPU 소프트웨어 개발 환경. 진정한 크로스 플랫폼
F # 공식 사이트에서 Alea는 GPGPU 프로그래밍에서 F #을 사용 하는 첫 번째 옵션 입니다.
이 프레임 워크를 알기 위해서는 포괄적 인 예제 목록을 살펴 보는 것이 좋습니다 .
브라흐마 외에도 C $ ( "C Bucks"로 발음)을 살펴보십시오 . CodePlex 사이트에서 :
[C $]의 목표는 최신 GPU 및 CPU에서 완벽한 병렬 프로그래밍을위한 통합 언어 및 시스템을 만드는 것입니다.
C #을 기반으로하며 느리게 평가되며 여러 액셀러레이터 모델을 대상으로합니다.
현재 예정된 아키텍처 목록에는 GPU, 다중 코어 CPU, 다중 GPU (SLI, CrossFire) 및 다중 GPU + 다중 CPU 하이브리드 아키텍처가 포함됩니다.
마을에 새로운 Microsoft 솔루션 인 C ++ AMP ( 여기 소개 )가 있습니다.
C #에서 사용하는 방법은 P / Invoke를 통해, 여기 에서는 데스크톱 앱용으로, 여기 에서는 Metro 전화 용 앱 으로 시연 됩니다 .
편집 : C ++ AMP에는 공개 사양 이 있으므로 MS 컴파일러 또는 Windows 전용이 아닙니다.
편집 : 분명히 기술 은 이제 "유지 관리 모드"에 있습니다. 즉, 버그를 수정하고 있지만 적극적으로 개발하지는 않습니다.
관리되는 DirectX가 어떻게 든 작동 할 수 있습니다.
GPU가 모두 동일한 브랜드 인 경우 Nvidia의 CUDA 또는 ATI의 스트림을 통해 공급 업체로부터 GPGPU 지원을받을 수 있습니다. AFAIK는 P / Invoke를 통해 사용할 수있는 DLL을 제공합니다.
CenterSpace Software는 NMath 라이브러리에 C # 프로젝트에 추가 할 수 있는 GPU 기반 컴퓨팅 기능을 제공합니다. 상업용 제품입니다.
사용자 정의 커널이 필요한 자체 알고리즘을 적용하려는 경우 :
최근에 OpenCL을 사용 하는 이 github 저장소 에 내 오픈 소스 프로젝트를 업로드했습니다 .
What it does(you can check from its wiki page too) is, selecting multiple OpenCL-capable devices and a kernel string from user and create C# or C++ array wrappers then compute using all, with help of an auto-load-balancer and a pipeliner(to hide latencies) to get good efficiency out of the pc.
Here is an example of its usage(1024 workitems partitioned to all devices, each running same code but use different data and threadId):
// 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
when all not used anymore, they release all C++ resources with their destructors.
But it's not that mature, so feel free to add any "issue" on github issues tab. Multi-pc-cluster relevant classes are not working and not translated to English yet but it can use all devices in single pc at least.
WPF also uses the GPU and you can add custom shaders using HLSL.
- A Series on GPU-based Effects for WPF (Greg Schechter's Blog)
참고URL : https://stackoverflow.com/questions/375011/utilizing-the-gpu-with-c-sharp
'IT' 카테고리의 다른 글
ng-repeat를 사용한 목록의 페이지 매김 (0) | 2020.07.01 |
---|---|
파이썬으로 디렉토리를 반복 (0) | 2020.07.01 |
Xml 구성 및 주석 기반 구성 (0) | 2020.07.01 |
jQuery를 사용하여 숨겨진 필드에서 가치 얻기 (0) | 2020.07.01 |
DIV 요소에서 키 누르기 (또는 키 다운) 이벤트 캡처 (0) | 2020.07.01 |