質問があります。私は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コードからwrapperfunctionを呼び出すたびに、プログラムは静的配列を割り当て、最後にそれを解放し、それには多くの時間がかかり、実際には非常に大きな静的配列を扱います.この関数を呼び出すたびに、非常に時間がかかります。そのため、プログラムの開始時に一度静的配列を割り当て、プログラム(アプリケーション)の最後にそれらを解放する方法が必要です。お願いします。どんな助けでも。
ありがとう。