首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用cuda和CUB的简化示例

使用cuda和CUB的简化示例
EN

Stack Overflow用户
提问于 2013-08-29 04:30:25
回答 1查看 1.5K关注 0票数 1

我试图让我的头在幼崽周围,并遇到了一些麻烦,跟随(相当不完整)工作的例子。幼崽看起来是一个很棒的工具,我只是无法理解示例代码。

我构建了一个简单的原版翘曲还原示例:

代码语言:javascript
复制
#include <cub/cub.cuh>
#include <cuda.h>
#include <vector>
using std::vector;
#include <iostream>
using std::cout;
using std::endl;

const int N = 128;

__global__ void sum(float *indata, float *outdata) {
    typedef cub::WarpReduce<float,4> WarpReduce;
    __shared__ typename WarpReduce::TempStorage temp_storage;
    int id = blockIdx.x*blockDim.x+threadIdx.x;
    if( id < 128 ) {
        outdata[id] = WarpReduce(temp_storage).Sum(indata[id]);
    }
}

int main() {
    vector<float> y(N), sol(N);
    float *dev_y, *dev_sol;
    cudaMalloc((void**)&dev_y,N*sizeof(float));
    cudaMalloc((void**)&dev_sol,N*sizeof(float));
    for( int i = 0; i < N; i++ ) {
        y[i] = (float)i;
    }
    cout << "input: ";
    for( int i = 0; i < N; i++ ) cout << y[i] << " ";
    cout << endl;
    cudaMemcpy(&y[0],dev_y,N*sizeof(float),cudaMemcpyHostToDevice);
    sum<<<1,32>>>(dev_y,dev_sol);
    cudaMemcpy(dev_sol,&sol[0],N*sizeof(float),cudaMemcpyDeviceToHost);
    cout << "output: ";
    for( int i = 0; i < N; i++ ) cout << sol[i] << " ";
    cout << endl;
    cudaFree(dev_y);
    cudaFree(dev_sol);
    return 0;
}

返回所有的零。

我知道这个代码会返回一个缩减,每32个元素都是一个翘曲之和,而其他元素是未定义的--我只想了解CUB是如何工作的。有人能指出我做错了什么吗?

(还有,幼崽配不上自己的标签?)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-29 08:41:35

您的cudaMemcpy参数回到前面,目标放在第一位(与memcpy一致)。

代码语言:javascript
复制
cudaError_t cudaMemcpy ( void* dst, const void* src, size_t count, cudaMemcpyKind kind )

有关更多信息,请参见API参考

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18502307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档