GPUで次のことを行っています
float decPart = valAtIndex - (int)valAtIndex;
int docID = decPart * numDocs;
ここで、型の場合は valAtIdex 、型float
も numDocsfloat
です。私の場合、decPart は 0.2 で、numDocs は 10 でした。ただし、docID を印刷すると、1 として印刷されます (2 のはずです)。誰かが私がどこで間違いを犯しているのか教えてもらえますか?
以下は、役立つ場合の完全な方法です
__global__
void finalNc(float* scSortedCounts, int* pos, int* maxCountEx, float numDocs,
int lengthStreamCompacted, int* finalNc, int actualLengthPos,
float* val, int* docIndex, int* acV ,int* ptwrite,int* diff,
int* posIndex)
{
int index = blockDim.x * blockIdx.x + threadIdx.x;
if(index < lengthStreamCompacted){
float valAtIndex = scSortedCounts[index];
float decPart = valAtIndex - (int)valAtIndex;
int docID = decPart * numDocs;
int actualCount = (int)valAtIndex;
int placeToWrite = maxCountEx[docID] + actualCount;
if( index == (lengthStreamCompacted -1 )){
finalNc[placeToWrite] = actualLengthPos - pos[index];
}else{
finalNc[placeToWrite] = pos[index + 1] + pos[index];
}
}
}