나는 완전히 cuda에 익숙하다. 주어진 입력 행렬, convolution (또는 filter)과 출력 행렬을 주어 convolution을 계산하는 cuda 커널을 작성하고 싶다.convolutions을 위해 cuda 커널을 작성하는 방법은 무엇입니까?
주 : 나는 cuda 커널의 각 스레드가 출력 매트릭스에서 하나의 값을 계산하기를 원합니다.
어떻게하면됩니까?
나는 완전히 cuda에 익숙하다. 주어진 입력 행렬, convolution (또는 filter)과 출력 행렬을 주어 convolution을 계산하는 cuda 커널을 작성하고 싶다.convolutions을 위해 cuda 커널을 작성하는 방법은 무엇입니까?
주 : 나는 cuda 커널의 각 스레드가 출력 매트릭스에서 하나의 값을 계산하기를 원합니다.
어떻게하면됩니까?
필터가 매트릭스의 채우기 범위를 포함하면 cublasSgemm으로 직접 변환 될 수 있습니다.
예를 들어 행렬의 크기가 5 * 4이고 130 개의 필터가 필요하다고 가정하면 훈련 할 필터 행렬의 크기는 130 * 20이고 5 * 4 행렬은 20 * 1.
이렇게 계산 속도가 최적입니다. m1 (130, 20)과 m2 (20, 1) 사이의 행렬 곱셈으로 변환됩니다.
. 문제에 대해 어느 정도 이해가되었습니다. 이를 수행 할 몇 가지 cuda 코드 예제가 있습니까? 가능한 경우 실제 예제로 어떻게 작동하는지 알고 싶습니다. 감사합니다 – Bilgin
나는 항상 "JCuda"와 함께 Cuda 라이브러리를 호출하므로 코드는 C가 아닙니다. 웹에서 cublasSgemm 예제와 Cuda 매뉴얼의 예제를 확인할 수 있습니다. sgemm을 'N'및 'N'으로 조작하고 lda, ldb 및 ldc를 130, 20 및 130으로 설정하십시오. cublasSgemm 메소드 사용에 익숙해지는 데는 약간의 시간이 걸립니다. 덕분에 – Tom
에게 감사드립니다. 물론 내가 확인하고 코드하고 내가 당신을 업데이 트됩니다. – Bilgin
이미지 컨볼 루션 커널을 찾는 경우이 링크가 도움이 될 수 있습니다 (Two Dimensional (2D) Image Convolution in CUDA by Shared & Constant Memory: An Optimized way).
제가 아는 한, 각 스레드를 사용하여 출력에서 픽셀이나 위치를 계산하는 것은 그리 좋은 방법이 아닙니다. 이 컨볼 루션의 하위 영역이로드되는 방법 또는 동일한 워프의 스레드가 각 읽기에서 연속 메모리를 읽는지 여부를 고려하십시오. 그렇지 않으면 수백 개의 스레드가 사용 가능하더라도 커널은 데이터 로딩에 어려움을 겪을 수 있습니다.
따라서 기본적으로 설명 된 코드를 작성하고 추가 최적화 제안을 위해 프로파일 러 (nvvp)를 사용할 수 있습니다.
의견 및 참고 웹 사이트 주셔서 감사합니다. 나는 CUDA를 사용하여 GPU에서 사용하기위한 2 차원 컨볼 루션 커널을 만드는 것을 찾고 있습니다. 결국, 내 코드는 입력, 필터 및 출력 행렬을 인쇄하고 싶습니다. – Bilgin
쿠다 웹 사이트에는 수십 가지 예가있었습니다. 특히 컨볼 루션은 매우 일반적인 작업이라는 점을 고려할 때 특히 그렇습니다. 변경 되었습니까? 아니면 거기에서 아무 것도 찾지 못 했습니까? – CWBudde
@CWBudde 귀하의 의견에 감사드립니다. 예, 웹 사이트 전체에서 많은 어려운 사례가있는 긴 예를 몇 개 발견했지만 아직 불행히도 간단하지 않습니다. 네가 가진다면 나보다 행복해 할 것이다. 귀하의 의견과 예를 들어 주셔서 감사합니다 – Bilgin