2017-02-16 2 views
1

cuda::SURF_CUDAcv::xfeatures2d::SURF, but it's challenging으로 비교하기 위해 CUDA 지원 opencv를 빌드하려고합니다.cuda :: SURF_cuda는 cv :: xfeatures2d :: SURF보다 빠릅니까?

그러나 고성능 실시간 응용 프로그램에서 SURF 디스크립터를 가져 오려고한다고 가정 해보십시오. 그래, 내가 알기로 FAST, ORB가 더 적합한 디스크립터이지만 바이너리이고 유클리드 디스크립터가 필요하다.

어쨌든이 두 구현 중 어느 것이 더 빠른지 알고 싶습니다. 이미지가 하나만 있습니다. 누군가가 CUDA가 GPU 메모리에로드 할 시간이 컴퓨팅 설명자의 시간에 비해 작아지기 때문에 많은 이미지를 처리해야하는 경우에만 CUDA를 사용하는 것이 합리적이라고 말했기 때문에 중요하다고 생각합니다. 이것이 사실인지 아십시오.

내가 게시하기 때문에 또 다른 이유는 높은 GPU가 아닌 NVIDIA GT755m이 하나 뿐이므로 결과가 좋지 않을 수 있습니다. 다른 한편, 나는 병렬 섹션을 개선하려고 노력하고있다 cv::xfeatures2d::SURF (그리고 64 코어와 제온 피에 그것을 테스트).

+0

물론 하드웨어에 항상 의존하고 있습니다. gt 755m의 스펙을 찾아서 CPU와 비교해 보았습니까? 그것은 당신에게 힌트를 주어야합니다. 그러나 어쨌든, 나는 CPU 버전이 당신이 가지고있는 64 코어의 이점을 얻을 것이라고 믿지 않습니다. 귀하의 의견에 대해 @ NAmorim 감사합니다. – NAmorim

+0

저는 CUDA 전문가는 아니지만 실제로는 거의 알지 못합니다. GPU 어플리케이션에 관해서 이야기 할 때 우리는 데이터 (이미지 쿼리)를로드하기 위해 오버 헤드 (우리가 제거 할 수없는)를 고려해서는 안됩니다. GPU 메모리 (또는 그와 비슷한 것)? 그런 다음 한 메모리에서 다른 메모리로 물건을로드/저장하는 것에 대해 이야기 할 때 (특히 /에서 HD로) 이것은 매우 비쌉니다. 내가 놓친 게 있니? – justHelloWorld

+0

나는 전문가가 아니기 때문에 나는이 문제를 논의하는 가장 좋은 사람이 아니다. 그러나 당신이 맞습니다. 한 곳에서 다른 곳으로 데이터를 전송하는 오버 헤드가 있습니다. 하지만 CPU/GPU 병렬 처리로 경험 한 경험으로 볼 때 오버 헤드가 낮고 부드러운 병렬 처리 (최대 4 코어 상상)가 있고 GPU에서는 높은 오버 헤드이지만 공격적인 병렬 처리 (300+ 코어의 경우) – NAmorim

답변

1

"는 GPU의 메모리에로드 할 시간이 계산 기술자의 시간에 비해 작아 져"- OP

예 당신이 올바른지 확인합니다. CUDA 커널이 첫 번째 실행에서 느린 이유에 대한 설명은 herehere을 참조하십시오.

응용 프로그램의 경우 코드를 실행하는 CPU와 GPU 및 CPU와 GPU 코드가 얼마나 잘 작성되었는지에 따라 다릅니다. @NAmorim이 말했듯이, 코드가 생성하는 오버 헤드와 활용할 수있는 병렬 처리의 양에 따라 달라질 것입니다.

GPU 오버 헤드의 많은 부분 (GPU에 대한 설명자 업로드/다운로드 생각)과 함께 CPU/GPU 계산 시간을 고려하여 처리하는 기능의 수에 따라 달라질 수 있습니다.

관련 문제