[英]how can i overcome memory allocation in cuda
我有個問題。 我正在使用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代碼中調用wrapper函數時,程序都會分配靜態數組並在最后釋放它,這需要很多時間,實際上我要處理非常大的靜態數組每次調用此函數我都會花費很多時間。 所以我想一種在程序開始時一次分配我的靜態數組,並在我的程序(應用程序)結束時釋放它們的方法。 l 任何幫助。
謝謝。
只需在main()中一次為所有數組分配數組,然后將其移至某個.cu文件即可。 然后,將其地址傳遞給包裝函數。
另外,您應檢查此類呼叫的返回。
此外,如果具有等效的C ++頭,請嘗試在C ++程序中不要使用任何C頭。 使用#include <cstdio>
而不是#include <cstdlib>
。
最后,由於您只處理cpp代碼,因此應刪除extern“ C”。
或者,如果您確實想使用CUDA代碼之外的C代碼,請使用.cpp文件擴展名退出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.