2013-07-27 2 views
0

나는 컨볼 루션에 크게 의존하는 코드를 가지고 있습니다. 그것은 실행 시간의 80 % 이상을 책임집니다. 나는 훨씬 더 빨리 만들기 위해 GPU를 사용하려면,하지만 난 완전히 이해하지 못하는 몇 가지 경우GPU에 데이터 저장 및 MATLAB 병렬 처리 컨볼 루션

  1. (나는 아직 내 자신이 테스트 할 수있는 권한이없는)가 I (핸들을 상속 한) 클래스의 생성자에있는 정보를 GPU 메모리 (gpuArray)에 저장하려면 그대로 두어야합니까? 함수에 매개 변수로 클래스를 전달하는 데 문제가 있습니까? 데이터 자체에서 수행 작업은 모든 GPU에서 수행 할 수있다 (그리고 난 배열은 단지뿐만 아니라 배열이 저장 상관없이 작동 루핑 같은데요)에서 나는 매트릭스 size(MyMat)=[s, s, b, n]

  2. 을, n 크기의 다른 행렬을 동시에 저장하려고합니다. [s, s, b] (GPU에서 수행 할 수있는 연산 사용) parfor를 사용해야합니까? (오버 헤드로 인해 대부분의 경우에 나쁜 생각이된다는 것을 알고 있습니다) 또는 GPU로 하여금 이렇게 빨리 처리 할 수있는 빠른 방법이 있습니까? 이 경우 수행해야하는 유일한 계산은 회선입니다 (단 하나의 작업으로 모두 수행 할 수는 없습니다)

고마워요!

+0

질문하지 않았지만 fftfilt 사용을 고려해 보셨습니까? 이는 FFT 알고리즘의 도움으로 오버랩 추가 방법을 사용하는 회선이며 직접 회선보다 훨씬 빠릅니다. BTW : 이것은 아마도 GPU에서도 실행될 수 있습니다. –

+0

나는 이것이 대답 일 수있는 또 다른 질문을했습니다. 그러나 거기에서 의견 제시자는 FFT 회선을 테스트했고 내가 사용하고있는 매트릭스 크기가 더 느리다 고 말했다. – user1999728

답변

0

1) 다른 변수와 마찬가지로 gpuArray를 사용하십시오. 코드를 수정해야 할 필요는 없습니다. 그렇지 않으면 문제를 지적하는 예외가 발생합니다.

2) gpuArray와 parfor의 조합이 여러 gpus에서 GPU 계산을 병렬 처리하는 일반적인 방법입니까? 여러 개의 GPU가 있습니까? 그렇다면 parfor를 시도해보십시오. 그렇지 않으면 아마도 한 명의 작업자 만이 gpu를 사용할 수 있고 다른 모든 작업자는 기다려야하기 때문에 느려질 것입니다.

관련 문제