std::vector<std::vector>传递到CUDA中实现并行计算
一、vector内存分配
我们知道std::vector内存分配时连续的,但是对于二维数组或多维数组来说,内部vector不占用外部vector的空间,所以二维数组或多维数组内部每一行的内存都是连续的,外部vector存储内部vector的相关信息,也是连续的。详细内容可参考这篇博客:https://blog.csdn.net/abc_xian/article/details/100164594
二、CUDA存储
在CUDA中存储方式为线性存储,一般使用cudaMalloc()、cudaMemcpy等函数申请拷贝内存,还有二维以及三维内存申请。
三、示例
#include<cuda_runtime.h>
#include<vector>
#include<stdio.h>
#include<stdlib.h>
#define VOXEL_COLS (3)
__global__ void init(double **A, double *A_data, int n, int m)
{
int tid = blockDim.x * blockIdx.x + threadIdx.x;
if (tid<n)
{
A[tid] = &A_data[tid*m];
}
}
__global__ void findNearVoxel(double ** strVector, double pitch)
{
//int y = blockIdx.x*blockDim.x + threadIdx.x;
//int x = blockIdx.y*blockDim.y