我有一个内核,它使用大约2GB的本地内存。我的cudaMalloc试图分配2.5GB内存,如果我以前运行那个kernel_func,它就会失败。
在运行完kernel_func之后,我发现2GB内存仍然被占用,cudaMalloc只剩下1.5GB内存。有人有解决办法或解释吗?
我知道为kernel_func使用全局内存可以解决这个问题,但出于某种原因,我需要为这个巨大的本地静态数组使用本地内存。
__global__ kernel_func() {
// The huge static array goes here
short my_array[50000];
}
in
我正在使用CUDA优化一些代码。我不确定是否应该在__ global __ function (fun1)中使用cudaMalloc (x不是已经在GPU内存中分配了吗?):
__global__ void fun2(double *y)
{
int i=blockIdx.x;
y[i]=...;
}
__global__ void fun1(double *x)
{
//should I cudaMalloc() y for fun2 or just use the x which was already allocated in main?
fun2<
我试图优化我的代码,我只使用OpenACC来加速代码。在下面的示例中插入CUDA是否是一种好方法?在这种情况下,设备只使用u_device和v_device。使用cudaMalloc可以确保我在设备内存上分配内存,而不是在主机内存上分配内存。
int size = NVAR * sizeof(double);
// Declare pointers that will point to the memory allocated on the device.
double* v_device;
double* u_device;
// Allocate memory on the devic
我有一个内核来计算矩阵的不同元素,根据它们的位置(对角线或对角线)。在计算大小矩阵时,内核按预期工作:
14 x 14 (我知道这很小,没有适当利用GPU资源,但这纯粹是为了测试目的,以确保结果正确)
118 x 118,以及
300 x 300
然而,当我试图计算一个大小为2383x2383的矩阵时,内核就会崩溃。具体来说,在cudaMemcpy()行上抛出“未指定的启动失败”错误,以返回设备到主机的结果。从研究中,我了解到这个错误通常出现在越界内存访问(例如在数组中)的情况下,然而,我不知道的是,它适用于前面的三种情况,而不是2383 x 2383的情况。内核代码如下所
我正在尝试cudaMalloc一堆设备指针,如果有任何错误没有工作,我会优雅地退出。我有功能代码-但是膨胀了,因为我必须cudaFree我以前的所有错误,如果失败的话。因此,现在我想知道是否有一个更简洁的方法来完成这一点。很明显,我不能释放一些没有恶意的东西--那肯定会引起问题。
下面是我想要做得更优雅的代码片段。
//define device pointers
float d_norm, *d_dut, *d_stdt, *d_gamma, *d_zeta;
//allocate space on the device for the vectors and an
因此,我尝试分配一个指针列表,每个指针都指向我设备上的一个结构,但我总是得到一个段错误。这在普通的malloc上工作得很好,但是在cudaMalloc上,事情就变得可疑了。
struct body //struct holding information for one body
{
int id;
float m; //mass
float a[3]; //acceleration
float v[3]; //velocity
我有一个C00格式的矩阵,通过以下代码将其转换为CSR格式:
status = cusparseXcoo2csr(handle, cooRowIndex, nnz, n,
csrRowPtr, CUSPARSE_INDEX_BASE_ZERO);
然后,我想将矩阵从CSR格式转换为HYB格式,但我不确定需要为HYB格式的矩阵分配多少内存。我在网上查过了,却找不到任何资料。应该分配多少内存?
下面是我计划用于从csr格式转换为hyb格式的内容:
cusparseScsr2hyb(handle_array[i], m, n,
descr,
cooVal
我正在使用DDT调试一个基于MPI的CUDA程序。当在我的代码中从cudaMalloc和cudaThreadSynchronize (更新:使用cudaDeviceSynchronize )调用时,当CUDA运行时库(libcudart)在(未记录的)函数cudaGetExportTable中抛出异常时,我的代码中止。
为什么libcudart在通过cudaError_t返回值或CHECKCUDAERROR在我的代码中检测到异常之前抛出异常(我使用的是can,而不是C++ API
(我使用的是用于Linux的CUDA 4.2 SDK。)
输出:
Process 9: terminate cal