在GitHub上找到我
 全部 课程 文件夹 功能 变量  
无序triplets.cu
#包括<推力/排序h>
#包括<推力/减推力.h>
#include<推力/inner_product.h>
#包括<thush/iterator/zip_iterator.h>
//从无序(i,j,v)三元组列表构造稀疏矩阵
//将重复条目汇总在一起。
整数主要(无效)
{
//矩阵的维数
整数num_rows=3;
整数num_cols=3;
//(i,j,v)三元组的数目
整数num_triplets=10;
//为无序三元组分配存储
尖点::数组1dI(num_triplets);//行索引
尖点::数组1dJ(num_triplets);//列索引
//填充三元组阵列
I[0]=2;J[0]=0;V[0]=10;
I[1]=0;J[1]=2;V[1]=10;
I[2]=1;J[2]=1;V[2]=10;
I[3]=2;J[3]=0;V[3]=10;
I[4]=1;J[4]=1;V[4]=10;
I[5]=0;J[5]=0;V[5]=10;
I[6]=2;J[6]=2;V[6]=10;
I[7]=0;J[7]=0;V[7]=10;
I[8]=1;J[8]=0;V[8]=10;
I[9]=0;J[9]=0;V[9]=10;
//使用两种稳定排序(先按j,然后按i),按(i,j)索引对三元组进行排序
推力::stable_sort_by_key(J.begin()、J.end(),推力::make_zip_iterator;
推力::stable_sort_by_key(I.begin()、I.end(),推力::make_zip_iterator;
//计算输出中非零的唯一数量
整数num_entries=推力::inner_product(推力::make_zip_iterator(推力:,
推力::make_zip_iterator(推力::make_tuple(I.end(),J.end(()))-1,
推力::make_zip_iterator(推力::make_tuple(I.begin(),J.begin()))+1,
整数(0),
推力::加<int>(),
推力::not_equal_to<推力::元组<int,int>>())+1;
//分配输出矩阵
尖点::coo_matrix<int,float,尖点:设备内存>A(num_rows、num_cols、num_entries);
//具有相同(i,j)索引的和值
推力::reduce_by_key(推力::make_zip_iterator(推力:,
推力::make_zip_iterator(推力::make_tuple(I.end(),J.end(())),
V.开始(),
推力::make_zip_iterator,
A.values.begin(),
推力::等于to<推力::元组<int,int>>(),
推力::加上<浮动>());
//打印矩阵
尖点::打印(A) ;
返回0;
}