here 다음과 같습니다.빼기를위한 적절한 추력 호출
dev_X가 벡터라고 가정합니다.
int * X = (int*) malloc(ThreadsPerBlockX * BlocksPerGridX * sizeof(*X));
for (int i = 0; i < ThreadsPerBlockX * BlocksPerGridX; i++)
X[ i ] = i;
// create device vectors
thrust::device_vector<int> dev_X (ThreadsPerBlockX * BlocksPerGridX);
//copy to device
thrust::copy(X , X + theThreadsPerBlockX * theBlocksPerGridX , dev_X.begin());
다음
는 뺄셈을하고있다 :thrust::transform(dev_Kx.begin(), dev_Kx.end(), dev_X.begin() , distX.begin() , thrust::minus<float>());
dev_Kx - dev_X.
나는 그것이 사용되는이 .END하는 .begin에서 이동하기 때문에 (전체 dev_Kx
벡터를 사용하려면()) 및 전체 dev_X
벡터.
위의 코드는 dev_X.begin()
을 사용합니다.
dev_X
벡터 전체를 사용한다는 의미입니까? 처음부터 시작 하시겠습니까? 또는 다른 추가 인수를 사용하여 dev_X.end()
을 가리켜 야합니까? 예를 들어,
또한 (위의 함수 호출에 난 그냥이 추가 인수를 사용할 수 없기 때문에) :
내가
thrust::transform(dev_Kx, dev_Kx + i , dev_X.begin() ,distX.begin() , thrust::minus<int>());
그런 다음
dev_Kx
내가 0에서 갈 것 사용하려면 및
dev_X.begin()
? 그것은 같은 길이를 사용할 것인가? (0 ~ i?) 또는
dev_X
길이를 사용합니까?
API가 있도록 설계되었습니다 ~ 만 하나의 * 전체 범위가 필요하며 (첫 번째 "피연산자"), 나머지는 동일한 길이 (또는 적어도 첫 번째 전체 범위를 커버하기에 충분한)로 가정됩니다. 그런데 처음으로'malloc'과 배열 초기화는 더 많은 관용적이고 에러가 발생하기 쉬운 C++을 작성하고자한다면'std :: vector'와'std :: iota' 호출로 대체 될 수 있습니다. –
@Park Young-Bae : 그럼, 만약 내가 사용하고 싶다면 \t \t thrust :: transform (dev_Kx, dev_Kx + i, dev_X.begin(), distX.begin(), thrust :: minus()); dev_Kx는 0에서 i와 dev_X.begin()으로 갈 것인가? 같은 길이로 될까요? (0 ~ i?) 아니면 dev_X의 길이를 사용합니까? –
George
'dev_Kx.end() - dev_Kx.begin()'과'dev_Kx + i - dev_Kx'의 마지막 예에서'0 '에서'i'까지의 길이를 사용합니다 '예. –