Study/CUDA

CUDA를 C#에서 사용해보자

BlueBright 2019. 7. 8. 10:22

 

방법 1) DLL import

 

http://blog.naver.com/sogangori/220514920009

 

CUDA와 C# 같이 사용하기

C#에서 CUDA를 사용하는 방법입니다. C#과 CUDA를 같이 사용하는 방법은 많겠지만 저는 그중 몇...

blog.naver.com

 

추가! PTX 파일 만들기

(PTX로 컴파일 된 파일을 라이브러리로 읽음)

 

https://blog.naver.com/pkk1113/221362455788

 

Visual Studio에서 cuda 파일을 ptx 파일로 바꾸기

(서론) NVIDIA에서 제공하는 Ray Tracing 엔진 OptiX를 사용하기로 하였다. 인터넷에 돌아다니는...

blog.naver.com

위 블로그에서 Generate GPU Debug Information 부분은 '예'로 설정 해도 됩니다.

 

 

https://blog.naver.com/pjm2108/220269762506

 

 

C#에서 CUDA를 써보자? -1

CUDA Toolkit, Nsight, Visual Studio 2013 Community 등등의 설치가 끝났다면, 쿠다를 써볼 수 ...

blog.naver.com

 

방법 2) C++/CLI를 이용한다.

※ 현재 코드 연구중...

https://kesio.tistory.com/77

 

 

방법 3) 무료 라이브러리

 

ManagedCuda

http://kunzmi.github.io/managedCuda/

https://github.com/kunzmi/managedCuda

https://www.nuget.org/packages/ManagedCuda-80/

 

개발 상태

19.07.08. 시점 Last commit 18.11.02.

CUDA 버전 최대 10.0
라이선스 LGPL-2.1
특징
  • Nuget package 설치가능
  • Cuda 10.1 지원 계획은 아직 없음 (개발자가 많이 바쁘다고함 ... https://github.com/kunzmi/managedCuda/issues/79)
  • 해당 프로젝트에 대한 Fork가 많음.
  • Swigged.CUDA 개발자가 언급에 의하면, .Net Standard 와 .Net Core로 된 앱과 라이브러리와 호환되지 않는다고함.
  • 커널 함수 부분을 PTX 또는 CUBIN으로 컴파일한 후, 해당 모듈을 불러오는 구조 (dll과 유사)
    즉, 별도의 PTX를 파일 또는 하드코딩으로 입력해야함.
  •  

 

Unmanageable
Cuda

https://github.com/kaby76/managedCuda

https://www.nuget.org/packages/UnmanageableCuda/

 

개발 상태

Last commit 2019.01.21. v10.130.1

CUDA 버전 최대 10.0
라이선스 LGPL-2.1 (부모의 것을 따름)
특징

 

ILGPU

http://www.ilgpu.net/

https://github.com/m4rs-mt/ILGPU.Samples

https://github.com/m4rs-mt/ILGPU

개발 상태 19.12.01. v0.7.0
CUDA 버전  
라이선스 자체적으로 작성, 라이브러리 사용시 라이선스 문을 고지해야됨.
특징
  • Nuget package 설치가능
  • API 및 사용방법에 대한 문서가 잘 정리되어 있음 
  • Example 프로젝트가 존재
  • C#으로 바로 작성 가능 (별도의 프로젝트 생성이 필요 없음)
  • 변수명에 혼동이 올 수 있기 때문에 주의해야함 (https://github.com/m4rs-mt/ILGPU/issues/8)
    (예를 들면 이런식...)
    더보기
    var threadIdx = index.GroupIdx;
    var blockIdx = index.GridIdx;
    var blockDim = Group.Dimension.X;

    var start = blockIdx * blockDim + threadIdx;
    var stride = Grid.Dimension.X * blockDim;
  • GPU 변수, 레지스터, 메모리 검사는 아직 지원되지 않음 (v0.7.0) (GPU 디버깅 불가)

 

Campy https://github.com/kaby76/Campy

http://campynet.com/

개발 상태

0.0.16 Last commit 19.02.04. 개발 진행 중 (Swigged.cuda와 개발자가 동일)

CUDA 버전  
라이선스 MIT
특징
  • Nuget package 설치가능
  • Target : Windows 10 (x64), Ubuntu 16.04 (x64)
    Net Framework >= 4.6.1, Net Core 2.0;
    CUDA GPU Toolkit 9.2.148 (Maxwell or better GPU) 
  • 아직 개발중인 라이브러리 (지원항목이 매우 적음)
  • 설치가 되지 않아서 테스트를 해보지 못함...
  •  

 

Swigged.cuda https://github.com/kaby76/swigged.cuda
개발 상태

Ver 9.2148.3 Last updated 18.09.27. (Campy와 개발자가 동일)

CUDA 버전  
라이선스 MIT
특징
  • Nuget package 설치가능
  • Target : Windows 10 (x64), Ubuntu 16.04 (x64)
    CUDA GPU Computing Toolkit 9.x NET Core 2.0/Framework 4.6.1+/Standard 2.0.
  • C#에서 커널을 작성하기 위한 API가 아니라고 함. 젠장... (C#용은 Campy를 사용해라)
  • ManagedCuda의 호환성을 개선하기 위해 만들었다고 함.
  • PTX, CUBIN, OBJ 파일 지원 (CUDA Runtime API는 다른 것을 찾으세요.)

 

CSCuda https://github.com/DNRY/CSCuda

https://www.nuget.org/packages/CSCuda

개발 상태

Ver 0.1.23 Last update 18.11.09.

CUDA 버전  
라이선스 MIT
특징
  • Nuget package 설치가능
  • 별도 자료는 없음

 

 

방법 4) 유료 라이브러리

 

 

CUDAfy.Net http://www.hybriddsp.com/Products/CUDAfyNET.aspx
개발 상태

개발 중단 v1.29 (마지막 릴리즈 15.04.08.)

CUDA 버전 최대 CUDA 7.0
라이선스

무료 : LGPL / 유료 : 별도

특징

 

Altimesh Hybridizer Essentials

https://github.com/altimesh/hybridizer-basic-samples

http://www.altimesh.com/hybridizer-essentials/

VS market

https://devblogs.nvidia.com/hybridizer-csharp/

개발 상태

19.09.05. 시점 Ver 1.2.10616

CUDA 버전

8.0 ~ 10.0 10.0 권장

라이선스 MIT
특징
  • 강의 및 학술 연구 용도로 강사와 학생에게 무료

 

Alea GPU

https://devblogs.nvidia.com/accelerate-net-applications-alea-gpu/

http://www.aleagpu.com/release/3_0_4/doc/license.html

개발 상태

19.12.10. 시점 Ver 3.0.4

CUDA 버전  
라이선스

무료 버전 : CC BY / 유료 버전 : 각 별도문서

특징
  • Nuget package 설치가능
  • 유무료의 따라서 사용할 수 있는 GPU개수 제한이 있다.

 

 

추가 참고

기사 : https://sigma.software/about/media/gp-gpu-computing-c

 : 

 

 

 

 

'Study > CUDA' 카테고리의 다른 글

CUDA를 C++/CLI로 만들어보자  (0) 2020.02.04
CUDA  (0) 2019.02.20