2011-02-11 4 views
4

저는 CUDA를 사용하여 이미지를 처리하는 프로젝트에 있습니다. 프로젝트는 단순히 이미지를 더하거나 뺍니다.CUDA 구현, python (pycuda) 또는 C++을 사용하여 이미지를 처리하고 있습니까?

나는 귀하의 전문적인 의견을 물어볼 수 있습니다. 어떤 것이 가장 좋으며 그 두 가지의 장단점은 무엇입니까?

이 프로젝트가 저에게 아주 중요하기 때문에 모든 사람의 의견 및/또는 제안에 감사드립니다.

답변

6

일반 대답 : 중요하지 않습니다. 더 편하게 사용하는 언어를 사용하십시오. , 또한 버그의 또 다른 잠재적 인 소스를 추가, 최신 항상하지 않을 수 있도록

명심 그러나, 그 pycuda는

파이썬은 ..., 쿠다 C 인터페이스 주변 단지 래퍼입니다 신속한 프로토 타이핑에 큰 도움이되었으므로 개인적으로 파이썬으로 갈 것입니다. 필요한 경우 나중에 언제든지 C++로 전환 할 수 있습니다.

+0

깨달음 주셔서 대단히 감사합니다! – ardiyu07

3

파이프 라인의 나머지 부분이 파이썬에 있고, 이미 Numpy를 사용하여 작업 속도를 높이면 pyCUDA는 값 비싼 작업을 가속화 할 수있는 좋은 보완책입니다. 그러나 이미지 크기와 프로그램 흐름에 따라 pyCUDA를 사용하면 속도가 너무 빨라질 수 있습니다. 큰 데이터 크기로만 구성되는 PCI 버스를 통해 데이터를 앞뒤로 전달하는 데 지연이 있습니다.

귀하의 경우 (더하기 및 빼기)에는 pyCUDA에 기본 제공 작업이 있으므로 이점을 활용할 수 있습니다. 그러나 제 경험상 pyCUDA를 사용하면 CUDA가 처음 작동하는 방식에 대해 많이 알 필요가 있습니다. 쿠다 (CUDA) 지식이없는 사람이라면 pyCUDA가 가파른 학습 곡선이 될 수 있습니다.

2

openCV을 보시면 많은 이미지 처리 기능과 이미지를로드/저장/표시하고 카메라를 조작하는 데 필요한 모든 도우미가 포함되어 있습니다.

또한 CUDA를 지원하기 때문에 이미지 처리 기능 중 일부가 CUDA에서 다시 구현되었으며 자신을위한 훌륭한 프레임 워크를 제공합니다.

+0

놀라운 참조! 감사! – ardiyu07

+0

CUDA 기능은 잘 문서화되어 있지 않지만 원본을 읽을 수 있습니다. 이미지 처리를 처음 사용하는 경우 OpenCV 책이 상당히 좋습니다 –

0

알렉스의 대답은 옳습니다. 래퍼에서 소비되는 시간은 최소화됩니다. PyCUDA에는 유용 ​​할 수도있는 커널을 생성하기위한 멋진 메타 프로그래밍 구조가 있습니다.

이미지의 요소를 더하거나 뺄 때마다 CUDA를 사용해서는 안됩니다. PCI-E 버스를 통해 앞뒤로 전송하는 데 걸리는 시간은 병렬 처리로 얻는 비용 절감 효과를 줄입니다.

CUDA를 다룰 때마다 CGMA 비율 (계산 대 전역 메모리 액세스 비율)에 대해 생각하는 것이 좋습니다. 더하기/빼기는 2 메모리 액세스 (1 읽기 및 1 쓰기)에 대해서만 1 부동 소수점 연산입니다. 이것은 CUDA 관점에서 매우 형편없는 것입니다.