답변:
[ 이 답변조차 꽤 오래되어 OCT 2017 편집 ]
이 답변의 대부분은 상당히 오래되었으므로 각 프로젝트가 어디에 있다고 생각하는지에 대한 업데이트 된 요약을 제공 할 것이라고 생각했습니다.
GPU.Net (TidePowerd)-6 개월 정도 전에 시도해 보았지만 약간의 작업이 필요했지만 작동했습니다. 컴파일 타임에 C # 커널 코드를 cuda로 변환합니다. 불행히도 그들의 웹 사이트는 다운되었고 github은 몇 년 동안 업데이트되지 않았습니다.
Cudafy- 오픈 소스이며 사용하기 매우 쉽습니다. 런타임에 C # 커널 코드를 cuda로 변환합니다 (직렬화 및 캐시 가능). CPU에서 동일한 커널 코드를 쉽게 실행할 수 있습니다 (주로 디버깅 용). 여러 GPU를 지원합니다. 여기에 다른 것보다 더 많은 예제가 있습니다. 다른 답변에서 언급 한 상용구 코드는 최소한이며 제 경우에는 코드 작동 방식에 대한 이해에 도움이되었습니다. Cuda / Nvidia 만 가능합니다. 불행히도 그들은 몇 년 동안 솔루션을 업데이트하지 않은 것으로 보입니다 (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 라이브러리입니다.
탐험의 수단으로 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?
글쎄 이것은 꽤 오래된 질문이며, 질문을 받았기 때문에 많은 것이 바뀌 었습니다.
.Net을 사용하여 GPU 코드를 작성하는 또 다른 옵션은 Alea GPU 에서 아무도 언급하지 않았습니다 . C #, F # 및 VB를 다룹니다.
.NET 및 Mono 용 전문 GPU 소프트웨어 개발 환경. 진정한 크로스 플랫폼
F # 공식 사이트에서 Alea는 GPGPU 프로그래밍에서 F #을 사용 하는 첫 번째 옵션 입니다.
이 프레임 워크를 알기 위해서는 포괄적 인 예제 목록을 살펴 보는 것이 좋습니다 .
CenterSpace Software는 NMath 라이브러리에 C # 프로젝트에 추가 할 수 있는 GPU 기반 컴퓨팅 기능을 제공합니다. 상업용 제품입니다.
사용자 정의 커널이 필요한 자체 알고리즘을 적용하려는 경우 :
최근에 OpenCL을 사용 하는 이 github 저장소 에 내 오픈 소스 프로젝트를 업로드했습니다 .
그것이하는 것 (위키 페이지에서도 확인할 수 있음)은 사용자로부터 여러 OpenCL 가능 장치와 커널 문자열을 선택하고 C # 또는 C ++ 배열 래퍼를 만든 다음 자동로드 밸런서 및 PC에서 좋은 효율을 얻으려면 파이프 레이서 (지연 시간 숨기기).
다음은 사용법의 예입니다 (1024 개의 작업 항목이 모든 장치에 파티션되어 있으며 각각 동일한 코드를 실행하지만 다른 데이터 및 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
모두 더 이상 사용하지 않으면 소멸자와 함께 모든 C ++ 리소스를 해제합니다.
그러나 성숙하지는 않으므로 github 이슈 탭에 "문제"를 추가하십시오. 다중 PC 클러스터 관련 클래스는 작동하지 않으며 아직 영어로 번역되지 않았지만 최소한 단일 PC에서 모든 장치를 사용할 수 있습니다.
WPF는 또한 GPU를 사용하며 HLSL을 사용하여 사용자 지정 셰이더를 추가 할 수 있습니다.