我有以下代码在GPU上分配全局内存。
__global__ void mallocTest()
{
char* ptr = (char*)malloc(123);
//....
free(ptr);
}
每个线程是否会为单独的ptr分配内存? 所以,如果我有10个线程的2个块,那么分配20个数组(即每个线程分配内存供自己使用)? 我怎样才能每块而不是每个线程分配内存? 即如果我有2个块和10个线程,则只分配2个阵列。 这可能吗?
答案 0 :(得分:3)
如果在compute capability 2.0或2.1设备上执行该代码,则每个线程都将从运行时全局内存堆执行分配。因此,如果您的执行网格有20个线程,您将获得20个分配:每个线程一个。
如果你想要每个块一个数组(并且你希望块中的每个线程访问同一个数组),那么逻辑方法就是使用共享内存,特别是如果内存仅用于块的生命周期并不打算再次使用。