c++ - 扩展稀疏式矩阵的推力方式是什么?

标签 c++ cuda thrust

基本上,我有一个“稀疏风格”的数据集,有

thrust::device_vector<int> indexes(smallsize);
thrust::device_vector<float> values(smallsize);

我想把它扩展成一个

thrust::device_vector<float> expanded(fullsize);

我知道如何用内核做到这一点:

template <typename T>
__global__ void AssignByIndex
    (
    T* inval,
    T* outval,
    size_t* keys,
    int Ilength
    )
{
    int index = blockIdx.x * blockDim.x + threadIdx.x;

    if (index < Ilength)
    {
        const size_t key = keys[index];//cross access,slow
        outval[key]=inval[index];
    }
};

但是 1) 这感觉像是 thrust 可以轻松完成的事情,并且 2) 这不允许我使用花哨的迭代器。我认为我只是在搜索中使用了错误的术语,或者只是不够有创意。

最佳答案

这听起来像是典型的分散操作。推力有一个 scatter function这让你可以做这样的事情:

thrust::scatter(values.begin(), values.end(), indexes.begin(), expanded.begin());

这会将 values 分散到 expanded 的索引中。

关于c++ - 扩展稀疏式矩阵的推力方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16017652/

相关文章:

c++ - 我应该让每个函数都是静态的,不接触成员变量吗?

c++ - 使用结构的隐式类型转换

c++ - C++ 中的这种未定义行为是从悬空指针调用函数吗

c - 将 C 代码与 Cuda 代码链接

c - 将 openMp 程序移植到 cuda c : correct grid_size/block_size and reduction

opencv - 映射内存和 gpu::CudaMem 用法

algorithm - CUDA Thrust 查找近邻点

cuda - 将推力与 printf/cout 一起使用

c++ - 为什么我不能用 operator>> 读取 fstream 的二进制数据?

cuda - 无需内存移动即可交换 CUDA 推力设备矢量