在構造函數中,我在設備端填充數組。爲什麼反轉此功能不起作用
但現在我想對陣列執行反轉功能。
using namespace std;
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
__global__ void generateVector(int *data,int count){
int tid = blockIdx.x;
data[tid] = -tid;
}
__global__ void reverseArray(int *data,int count){
int tid = blockIdx.x;
data[tid] = tid;
}
class FData{
private:
int *data;
int size;
public:
FData(int sizeP){
size = sizeP;
data = new int[size];
int *devA;
cudaMalloc((void**) &devA, size * sizeof(int));
generateVector<<<size,1>>>(devA,size);
cudaMemcpy(data,devA, size * sizeof(int),cudaMemcpyDeviceToHost);
cudaFree(devA);
}
~FData(){
delete [] data;
}
int getSize(){
return size;
}
int elementAt(int i){
return data[i];
}
void reverse(){
int *devA;
cudaMalloc((void**) &devA, sizeof(int));
reverseArray<<<size,1>>>(devA,size);
cudaMemcpy(data,devA,size * sizeof(int),cudaMemcpyDeviceToHost);
cudaFree(devA);
}
};
int main(void) {
FData arr(30);
cout << arr.elementAt(1);
arr.reverse();
cout << arr.elementAt(1);
return 0;
}
它仍然打印我在構造函數中填充的值。這裏有什麼問題?我如何解決它?出了什麼問題?
也許它工作正常,什麼是之前的元素和 – greedybuddha
後它無關,但你有內存泄漏(你需要在析構函數中調用'刪除[]'您'data'成員變量)。你還需要釋放你所有的CUDA內存,你不是在做 – alrikai
嘗試一些cuda錯誤檢查? –