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;
}
야 감사 : 여기
은 초보적인 평 평화와 호스트의 2 차원 배열을 보여주는 가공 한 예이다. 실제로 저는 모든 커널 함수가 접근 할 수있는 전역 메모리에 20 개 이상의 2D 배열을 가지고 있습니다. 나는 추력 라이브러리에있어 내가 가지고있는 커널 함수의 수를 줄이고 대신에 추력 inbuilt 함수를 사용한다. – user1891682내가 링크 한 추력 빠른 시작 가이드를 읽었습니까? 'thrust :: sequence' 호출 대신에'thrust :: fill (d.begin(), d.end(), 27); –
예를 사용할 수 있습니다. Visual Studio에서 대부분의 추력 코드에 대한 출력을 시도하고 출력했습니다. 하지만 2D 배열에 대한 코드를 찾지 못했습니다. – user1891682