我有个问题。我正在使用 4.0 cuda。我有以下代码:
在我的 cudaHeader.h 中:
#include <stdlib.h>
extern "C" void wrapperfunction(int* array);
在我的 cudaCpp.cpp 中:
#include <stdio.h>
......
int main()
{
int array[50] = {0, 1, 2, ..........,49};
...........
while(true)
{
........
wrapperfunction(array);
........
}
return 0;
}
在我的 cuda.CU 中:
__global__ void kernel(int *new_arrayG, int *arrayG,int *const_arrayG)
{
int x = threadIdx.x;
new_arrayG[x] = arrayG[x] + const_arrayG[x];
__syncthreads();
}
extern "C" int wrapperfunction(int* array)
{
static int const_array[50] = {0, 1, 2, ........., 49}; //any constant data
int *arrayG, *new_arrayG, *const_arrayG;
int size = 50 * sizeof(int);
cudaMalloc((void**)&arrayG, size);
cudaMalloc((void**)&new_arrayG, size);
cudaMalloc((void**)&const_arrayG, size);
cudaMemcpy(const_arrayG, const_array, size, cudaMemcpyHostToDevice);
cudaMemcpy(arrayG, array, size, cudaMemcpyHostToDevice);
Kernel<<<1, 50>>>(new_arrayG, arrayG, const_arrayG);
cudaMemcpy(array, new_arrayG, size, cudaMemcpyDeviceToHost);
cudaFree(arrayG);cudaFree(new_arrayG);cudaFree(const_arrayG);
}
这是我的代码中的一个示例,我想说每次我从我的 .cpp 代码中调用包装函数时,程序都会分配静态数组并在最后释放它,这需要很多时间,实际上我处理的是非常大的静态数组每次调用这个函数我都会花很多时间。所以我想找到一种在程序开始时分配我的静态数组并在我的程序(应用程序)结束时释放它们的方法。请。任何帮助。
谢谢。