如何从cusp库矩阵格式获得原始指针
How to get raw pointer from cusp library matrix format
我需要从cusp库矩阵格式获得原始指针。例如:
cusp::coo_matrix<int,double,cusp::device_memory> A(3,3,4);
A.values[0] = 1;
A.row_indices[0] = 0;
A.column_indices[0]= 1;
A.values[1] = 2;
A.row_indices[1] = 1;
A.column_indices[1]= 0;
A.values[2] = 3;
A.row_indices[2] = 1;
A.column_indices[2]= 1;
A.values[3] = 4;
A.row_indices[3] = 2;
A.column_indices[3]= 2;
我怎么能得到原始指针到row_indexes, column_indexes和值数组?我需要把它们传递给我的内核,如果可能的话,我想避免不必要的数据复制。
有多种方法可以做到这一点。例如,如果您希望从原始设备数据表示开始,而不是从尖端数据表示开始,您可以在尖端视图功能中使用方法。
如果你已经有了cusp数据,并且你想转换成原始数据表示,我们可以使用cusp是建立在推力之上的事实。下面是一个完整的例子:
$ cat t346.cu
#include <cusp/coo_matrix.h>
#include <cusp/print.h>
template <typename T>
__global__ void my_swap_kernel(T *a, T *b, unsigned size){
int idx = threadIdx.x+blockDim.x*blockIdx.x;
if (idx < size){
T temp = b[idx];
b[idx] = a[idx];
a[idx] = temp;}
}
int main(void)
{
// allocate storage for (4,3) matrix with 6 nonzeros
cusp::coo_matrix<int,float,cusp::device_memory> A(4,3,6);
// initialize matrix entries on host
A.row_indices[0] = 0; A.column_indices[0] = 0; A.values[0] = 10;
A.row_indices[1] = 0; A.column_indices[1] = 2; A.values[1] = 20;
A.row_indices[2] = 2; A.column_indices[2] = 2; A.values[2] = 30;
A.row_indices[3] = 3; A.column_indices[3] = 0; A.values[3] = 40;
A.row_indices[4] = 3; A.column_indices[4] = 1; A.values[4] = 50;
A.row_indices[5] = 3; A.column_indices[5] = 2; A.values[5] = 60;
float *val0 = thrust::raw_pointer_cast(&A.values[0]);
float *val3 = thrust::raw_pointer_cast(&A.values[3]);
// A now represents the following matrix
// [10 0 20]
// [ 0 0 0]
// [ 0 0 30]
// [40 50 60]
// print matrix entries
cusp::print(A);
my_swap_kernel<<<1,3>>>(val0, val3, 3);
cusp::print(A);
return 0;
}
$ nvcc -arch=sm_20 -o t346 t346.cu
$ cuda-memcheck ./t346
========= CUDA-MEMCHECK
sparse matrix <4, 3> with 6 entries
0 0 10
0 2 20
2 2 30
3 0 40
3 1 50
3 2 60
sparse matrix <4, 3> with 6 entries
0 0 40
0 2 50
2 2 60
3 0 10
3 1 20
3 2 30
========= ERROR SUMMARY: 0 errors
$
相关文章:
- 如何在openssl-ecc中获取十六进制格式的私钥
- 将"打开的CV图像"中的"颜色"转换为整数格式
- TDateTime格式在C++Builder中不会更改
- 将浮动的heightmap数组导出为16位原始值
- 给定一个向量,如何找到该向量的所有子集和的原始索引
- 如何防止clang格式在流运算符调用之间添加换行符<<
- 检查不带转换的扫描格式
- 当我尝试使用 sstream 和分面将 Boost Time_duration转换为字符串时,我没有得到所需的格式
- 是否可以从格式字符串中检索"width"
- 有没有办法从非C/C++文件中读取C++原始字符串文字的内容
- clang格式:宏的缩进
- clang格式:禁用排序包含
- 在用于格式4的arm模拟器中实现功能时的一个问题
- 将RGB图像保存为PPM格式
- 询问在设计我的手臂模拟器功能表示格式1
- 如何从内存中读取原始图像 (YUV 4:2:2) 格式的图像数据
- 如何将位图字体从 C 标头格式转换为原始位
- 如何在c++中将pvr解压缩为原始格式8888
- 如何保持原始图像格式时插入到一个CRichEditCtrl
- 如何从cusp库矩阵格式获得原始指针