2013-03-28 3 views
2

추력 라이브러리를 사용하는 새로운 방법입니다. 글로벌 2D 배열을 사용하는 CUDA C 코드가 있습니다. 내 코드에서 커널 함수를 사용하여 초기화하고있다.CUDA에서 추력 라이브러리를 사용하여 2D 배열에 thrust :: device_vector 및 thrust :: fill을 사용할 수 있습니까

thrust::device_vector 또는 thrust::fill을 사용하여 2D 배열을 초기화하고 채울 수 있는지 여부를 알아야합니다. 예를 들어

:

// initialize 1D array with ten numbers in a device_vector 
    thrust::device_vector<int> D(10); 

이 가능 제공하는 것입니다 ..

thrust::device_vector<int> D[5][10]; 

하고 가능하면

는 어떻게 thrust::fill 기능을 사용합니다.

나의 목적은 추력 라이브러리를 사용하여 코드를 최적화하는 것입니다.

답변

3

STL 및 추력에서 vector은 엄격한 선형 순서를 준수하는 데이터 요소의 컨테이너이므로 기본적으로 1-D입니다. 추력에서 이러한 데이터 요소는 일반 유형 및 구조 및 객체 일 수 있지만 STL과 달리 다른 벡터가 될 수 없습니다.

벡터의 배열을 만들 수는 있지만 일반적으로 배열의 각 벡터마다 하나씩 밀어 넣기 작업을 수행해야합니다.

에 대해서는 구문이 작업을 수행 할 수 없습니다

thrust::device_vector<int> D[5][10]; 

그러나이없는 벡터의 2 차원 배열을 생성합니다 :

thrust::device_vector D[5][10]; 

당신은 같은 것을 할 수 있습니다 네가 원하는 것, 나는 생각하지 않아.

대부분의 경우 2D 배열은 마치 1 차원 인 것처럼 처리되도록 "평평하게"배치 할 수 있으며 상황에 대해 알지 못하는 경우 조사를 권합니다. 2D 배열을 마치 포인터 색인을 사용하여 1-D처럼 취급 할 수 있다면, 예를 들어, 하나의 thrust :: fill 호출로 전체를 채울 수 있습니다.

또한 추력 quick start guide에 익숙해지는 것이 좋습니다. 어떻게 추력을 사용하여 2D 배열을 채우기 위해 :: 기능을 채우기 나 제안 answering.Can에 대한

#include <thrust/host_vector.h> 
#include <thrust/device_vector.h> 
#include <thrust/sequence.h> 

#define H 5 
#define W 10 
__global__ void kernel(int *data, int row, int col) { 

    printf("Element (%d, %d) = %d\n", row, col, data[(row*W)+col]); 

} 

int main(void) 
{ 
    int h[H][W]; 
    thrust::device_vector<int> d(H*W); 

    thrust::copy(&(h[0][0]), &(h[H-1][W-1]), d.begin()); 
    thrust::sequence(d.begin(), d.end()); 
    kernel<<<1,1>>>(thrust::raw_pointer_cast(d.data()), 2, 3); 
    cudaDeviceSynchronize(); 

    return 0; 
} 
+0

야 감사 : 여기

은 초보적인 평 평화와 호스트의 2 차원 배열을 보여주는 가공 한 예이다. 실제로 저는 모든 커널 함수가 접근 할 수있는 전역 메모리에 20 개 이상의 2D 배열을 가지고 있습니다. 나는 추력 라이브러리에있어 내가 가지고있는 커널 함수의 수를 줄이고 대신에 추력 inbuilt 함수를 사용한다. – user1891682

+0

내가 링크 한 추력 빠른 시작 가이드를 읽었습니까? 'thrust :: sequence' 호출 대신에'thrust :: fill (d.begin(), d.end(), 27); –

+0

예를 사용할 수 있습니다. Visual Studio에서 대부분의 추력 코드에 대한 출력을 시도하고 출력했습니다. 하지만 2D 배열에 대한 코드를 찾지 못했습니다. – user1891682

관련 문제