n-by-m 행렬이 주어지면 각 행 행의 최소값을 포함하는 n 크기의 벡터를 CUDA로 작성하고 싶습니다.CUDA에서 최소 배열 행
지금까지 나는이를 통해 왔어요 :
__global__ void OnMin(float * Mins, const float * Matrix, const int n, const int m) {
int i = threadIdx.x + blockDim.x * blockIdx.x;
if (i < n) {
Mins[i] = Matrix[m * i];
for (int j = 1; j < m; ++j){
if (Matrix[m * i + j] < Mins[i])
Mins[i] = Matrix[m * i + j];
}
}
}
이라고 불리는 :
OnMin<<<(n + TPB - 1)/TPB, TPB>>>(Mins, Matrix, n, m);
좀 더 최적화 된 무언가가 존재할 수 있다고 생각하지만.
루프에서 cublasIsamin
을 호출하려했지만 속도가 느립니다.
어떤 아이디어 (sm_35을 compute_35 컴파일 에러를 발생합니다 ... 나는 GTX670이)?
감사합니다.
어쩌면 당신의 매트릭스를 먼저 transposing하여 그것을 개선 할 수 있습니다 (나는 기본적으로 수학이 없기 때문에 메모리가 바운드 된 것 같습니다). 문제는 메모리 액세스 패턴이 합쳐지지 않는다는 것입니다 (지정된 워프의 스레드는 연속적인 메모리 항목을 읽습니다. 메모리에 연속적으로 나타나지는 않습니다). 또한, 당신은 nvvp의 결과를 보았습니까? – leo
[CUDA로 행렬 줄이기] 가능한 중복 (http://stackoverflow.com/questions/17862078/reduce-matrix-rows-with-cuda) –