0
using namespace std;
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
const int threadsPerBlock = 256;
const int blocksPerGrid = 1024;
const int N = 64;
__global__ void reverse(int *data, int count){
__shared__ int cache[threadsPerBlock];
int tid = threadIdx.x + blockIdx.x * blockDim.x;
int cacheIndex = threadIdx.x;
int tr = count-cacheIndex-1;
if(tid< count/2)
cache[cacheIndex] = data[cacheIndex];
__syncthreads();
data[cacheIndex] = cache[tr];
}
int main(void){
int a[N];
int *devA;
generate(a,N);
cudaMalloc((void**)&devA, N * sizeof(int));
cudaMemcpy(devA, a, N * sizeof(int), cudaMemcpyHostToDevice);
reverse<<<blocksPerGrid,threadsPerBlock>>>(devA,N);
cudaMemcpy(a,devA, N * sizeof(int), cudaMemcpyDeviceToHost);
cout << a[63];
cudaFree(devA);
}
上面的代碼不反轉我的反向。這個程序有什麼問題?我錯了什麼?我認爲一切都很好。我需要編輯什麼才能正確工作?哪裏不對?Cuda - 不可逆
我編輯了我的內核函數。請看看它。它不工作。 – ehah
爲什麼不使用我在我的答案中鏈接到的alrikai提出的內核?你剛纔編輯內核的問題是你不明白if語句應該做什麼。你沒有使用我暗示的花括號。 *所有你的內核代碼應該以我建議的if語句爲條件。 –
我想用共享內存來做。) – ehah