cuda 编 程(7)cuda 实现向量加法
实现 向量 CUDA 加法
2023-09-14 09:15:52 时间
#include <math.h>
#include <stdio.h>
#include <iostream>
using namespace std;
const double EPSILON = 1.0e-15;
const double a = 1.23;
const double b = 2.34;
const double c = 3.57;
void __global__ add(const double *x, const double *y, double *z, const int N);
void check(const double *z, const int N);
int main(void)
{
const int N = 1001;
const int M = sizeof(double) * N;
double *h_x = (double*) malloc(M);
double *h_y = (double*) malloc(M);
double *h_z = (double*) malloc(M);
for (int n = 0; n < N; ++n)
{
h_x[n] = a;
h_y[n] = b;
}
double *d_x, *d_y, *d_z;
cudaMalloc((void **)&d_x, M);
cudaMalloc((void **)&d_y, M);
cudaMalloc((void **)&d_z, M);
cudaMemcpy(d_x, h_x, M, cudaMemcpyHostToDevice);
cudaMemcpy(d_y, h_y, M, cudaMemcpyHostToDevice);
const int block_size = 128;
const int grid_size = (N + block_size - 1) / block_size;
add<<<grid_size, block_size>>>(d_x, d_y, d_z, N);
cudaMemcpy(h_z, d_z, M, cudaMemcpyDeviceToHost);
check(h_z, N);
for (int n = 0; n < N; ++n)
{
cout<<h_z[n]<<endl;
}
free(h_x);
free(h_y);
free(h_z);
cudaFree(d_x);
cudaFree(d_y);
cudaFree(d_z);
return 0;
}
void __global__ add(const double *x, const double *y, double *z, const int N)
{
const int n = blockDim.x * blockIdx.x + threadIdx.x;
if (n < N)
{
z[n] = x[n] + y[n];
}
}
void check(const double *z, const int N)
{
bool has_error = false;
for (int n = 0; n < N; ++n)
{
if (fabs(z[n] - c) > EPSILON)
{
has_error = true;
}
}
printf("%s\n", has_error ? "Has errors" : "No errors");
}
nvcc add3if.cu -o add3o
./add3o
相关文章
- 向量数据库入坑:传统文本检索方式的降维打击,使用 Faiss 实现向量语义检索
- php-实现微信回复天气情况
- C#实现约瑟夫环数学问题
- Elastic 5分钟教程:使用向量相似性实现语义搜索
- 全面数字化PDF管理 实现高效办公Adobe Acrobat DC+全版本安装包
- MySQL添加字段并实现自增索引(mysql添加字段并自增)
- Linux实现在线编程,抢先一步!(linux在线编程)
- Linux后台运行命令:实现无间断操作(linux后台运行命令)
- Linux操作系统移植:实现技术的深度探索(linux操作系统移植)
- 策略Java与Redis结合,实现过期策略(redisjava过期)
- 处理利用Redis与Java实现过期处理(redisjava过期)
- Mac用Linux技术实现创新发展(mac基于linux)
- 利用Redis主从架构实现监控的自动化(redis 主从监控)
- 符Oracle中用数字通配符实现天马行空的匹配功能(oracle中数字通配)
- 利用Oracle中分区表实现高效管理(oracle中分区表使用)
- Oracle两表联合修改实现数据同步(oracle 两个表修改)
- 利用Redis实现远程批量删除操作(redis远程批量删除)
- Redis实现的精妙词向量(redis词向量)
- javascript图片相似度算法实现js实现直方图和向量算法
- 使用jquery实现的一个图片延迟加载插件(含图片延迟加载原理)
- PHP冒泡算法详解(递归实现)
- C++实现一维向量旋转算法