没什么好说的,对应位置相加,除了零代码复制、控制好最大线程在运作外,应该没什么访存优化的地方(对全局内存一定是读\*2,写\*1)
可能以后我会觉得上面的话有问题,有问题能暴露出来是好事
%%cuda
#include <iostream>
#include <assert.h>
#include <cstdlib>
#include <cmath>
#define VECTOR_LENGTH 1000000
#define MAX_ERR 1e-4
__global__ void dummy_vectorAdd(float *out, float *a, float *b, int n)
{
for(int i = 0; i < n; i++)
{
out[i] = a[i] + b[i];
}
}
__global__ void vectorAdd(float *out, float *a, float *b, int n)
{
int leap=gridDim.x*blockDim.x;
int tid = blockIdx.x*blockDim.x+threadIdx.x;
for(int i = tid; i < n; i+=leap)
{
out[i] = a[i] + b[i];
}
}
double cpuGpu_gap(float *a, float *b, int n) {
double tmp=0;
for (int i=0; i<n; i++) {
tmp += abs(a[i]-b[i]);
}
return tmp;
}
int main() {
// 声明变量
float *a, *b, *cpuout, *out, *out1;
float *d_a, *d_b, *d_out, *d_out1;
a = new float[VECTOR_LENGTH];
b = new fl

最低0.47元/天 解锁文章
1980

被折叠的 条评论
为什么被折叠?



