회 반복 횟수와 L 메모리 위치가 있습니다. 각 반복은 0 ~ (L-1) 개의 메모리 위치 중 하나에 기록합니다.최소 반복 횟수를 반복 한 루프의 값만 저장
전역 메모리에 반복 번호에 따라 데이터를 저장하려고합니다. 반복 K와 K-1이 모두 같은 위치에 기록한다고 가정하십시오. 전역 메모리의 최종 결과는 K가되어야합니다. 스레드 K-1은 스레드 K의 결과를 무시해서는 안됩니다.
아래 해결 방법을 시도했습니다. 각 메모리 위치에 대해 최대 반복을 사용하여 배열을 만들고 -1로 초기화하십시오. 그런 다음 반복 횟수가 현재 값보다 많은지 확인합니다. 그렇다면 값을 저장하고 최대 반복을 업데이트합니다.
이것은 현재 코드이지만 큰 반복에서는 올바른 결과를 제공하지 않습니다.
int main()
{
int A[10]={10,20,30,40,50,60,70,80,90,100};
int maxIndex[10]={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
int lock[10]={0,0,0,0,0,0,0,0,0,0};
int index[8192];
srand(0);
for(int ii=0;ii<8192;ii++)
{
index[ii]=rand()%10;
}
int *index1;
int *A1,*maxIndex1;
int *lock1;
cudaMalloc((void**)&lock1,sizeof(int)*10);
cudaMalloc((void**)&A1,sizeof(int)*10);
cudaMalloc((void**)&index1,sizeof(int)*8192);
cudaMalloc((void**)&maxIndex1,sizeof(int)*10);
cudaMemcpy(A1,&A,sizeof(int)*10,cudaMemcpyHostToDevice);
cudaMemcpy(lock1,&lock,sizeof(int)*10,cudaMemcpyHostToDevice);
cudaMemcpy(maxIndex1,&maxIndex,sizeof(int)*10,cudaMemcpyHostToDevice);
cudaMemcpy(index1,&index,sizeof(int)*8192,cudaMemcpyHostToDevice);
fun<<<16,512>>>(A1,maxIndex1,index1,lock1);
cudaMemcpy(&A,A1,sizeof(int)*10,cudaMemcpyDeviceToHost);
cudaMemcpy(&maxIndex,maxIndex1,sizeof(int)*10,cudaMemcpyDeviceToHost);
printf("\nindex \n");
for(int i=0;i<8192;i++)
{
printf("%d\n",index[i]);
}
for(int i=0;i<10;i++)
{
printf(" %d max is %d\n",A[i],maxIndex[i]);
}
}
질문 텍스트를 수정할 수 있습니까? 그것은 혼란스럽고 불분명합니다. 여기 사람들이 당신을 이해한다면, 그들은 분명 당신을 도울 것입니다. – Farzad
실제로 n 회 반복이 있고 전역 메모리에있는 하나의 배열에 데이터를 저장하고 커밋하고 싶습니다.이 경우 nth 반복과 n-1 둘 다 i 번째 인덱스에 쓰고 최종은 n 번째이므로 n 번째 결과를 유지해야한다고 가정해야합니다 그리고 n-1 iteration.take에 의해 작성된 결과를 오버라이드 루프와 루프의 예 실제로 o/p에서 원하는 최종 결과는 무엇입니까 – user3279286
someone.i 도움을 요청하십시오 – user3279286