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