小编Gsw*_*fye的帖子

CUDA中的累计总和

有人可以指出我在正确的方向上如何同时进行这种类型的计算,或者告诉我这种方法的一般名称是什么?我不认为这些会返回相同的结果.

C++

for (int i = 1; i < width; i++)
        x[i] = x[i] + x[i-1];
Run Code Online (Sandbox Code Playgroud)

CUDA

int i = blockIdx.x * blockDim.x + threadIdx.x

if ((i > 0) && (i < (width)))
    X[i] = X[i] + X[i-1];
Run Code Online (Sandbox Code Playgroud)

parallel-processing cuda gpgpu numerical-methods

4
推荐指数
1
解决办法
2727
查看次数

CUDA:使用线性化2D共享内存的数组中所有元素的总和

我是CUDA的新手,也是一般的算法.有人可以告诉我,如果我正确地这样做,或者有更好的方法这样做.一个问题是代码的输入和输出应该在GPU上,因此主机和设备之间没有内存复制.

#include "cuda_runtime.h"
#include "device_launch_parameters.h"

#include <stdio.h>
#include <stdint.h>

#include <iostream>

#define TILE_WIDTH 8

__global__ void gpu_sumElements(int height, int width, float *in, float *out){

    extern __shared__ float cache[];

    int w = blockIdx.x * blockDim.x + threadIdx.x; // Col // width
    int h = blockIdx.y * blockDim.y + threadIdx.y;

    int index = h * width + w;
    int cacheIndex = threadIdx.y * blockDim.x + threadIdx.x;

    float temp = 0;

    if ((w < width) && (h < height)){
        temp += in[index];
        //index …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm cuda sum reduction

2
推荐指数
1
解决办法
7807
查看次数