문제는 Matlab의 GPU 프로그래밍의 내장 기능이 병렬 실행을 위해 데이터를 올바르게 나눌 수 있도록 코드를 작성하는 것입니다. 특히, N '입자 이미지를 GPU의 메모리로 보내고 각 이미지를 나타내는 3 차원 배열로 구성된 3 차원 배열로 구성한 다음 N 개의 이미지 각각을 대상을 나타내는 단일 이미지와 비교하려고 시도합니다. GPU 메모리에서. 이 업로드 된 이미지의 각각의 FFT를 복용 후입니다Matlab GPGPU와의 상호 상관 관계, 3D 배열 인덱싱
particle_ifft = ifft2(particle_fft.*target_fft);
참고 :
내 현재 구현
정말 더 많거나 내가 그것을 구현보고 싶어요 방법 이하, 한 줄의 코드로입니다. 여기에는 인덱싱 문제가 있습니다.이 문은 '. *'연산자를 사용하기 위해 동일한 크기의 "particle_fft"및 "target_fft"행렬이 필요합니다. 각 입자 이미지와 비교하기 위해 동일한 대상 이미지의 사본을 여러 개 갖는 것은 메모리 사용 측면에서 비효율적입니다. 이 비효율적 인 방법을 사용하여 좋은 성능 결과를 얻었지만 GPU에 업로드 할 수있는 입자 이미지의 수에 큰 영향을줍니다.입자 이미지 3d 배열 (각 이미지)의 각 2D 요소를 단일 대상 이미지와 비교하도록 matlab에 알려줄 수 있습니까?
for 루프를 사용하여 3D 배열에 색인을 지정하고 각 입자 이미지에 개별적으로 액세스하려고했지만 Matlab은 GPU에서이 유형의 작업을 병렬 처리하지 않습니다. 즉, 거의 1000 번 실행됩니다. 메모리 비효율적 인 대상 배열을 사용하는 동일한 코드보다 느립니다.
이 인덱싱 문제를 해결할 수있는 자체 커널을 작성할 수 있음을 알고 있지만 matlab의 기존 기능 (특히 fft2 및 ifft2 기능을 다시 작성하지 않음)을 활용하는 방법을 찾는 데 관심이 있습니다. 아이디어?