#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <stdio.h>
#include <iostream>
using namespace std;
#define data_size 1000
#define thread_num 256
__global__ void kernel(int *d_idata,int * d_odata)
{
const int tid=threadIdx.x;
int sum=0;
for (int i=tid;i<data_size;i+=thread_num)
{
sum+=d_idata[i]*d_idata[i];
}
d_odata[tid]=sum;
}
int main()
{
int h_idata[data_size];
for (int i=0;i<data_size;i++)
{
h_idata[i]=i;
}
int * d_idata;
int * d_odata;
cudaMalloc(&d_idata,sizeof(int)*data_size);
cudaMalloc(&d_odata,sizeof(int)*thread_num);
cudaMemcpy(d_idata,h_idata,sizeof(int)*data_size,cudaMemcpyHostToDevice);
kernel<<<1,thread_num,0>>>(d_idata,d_odata);
int gpu_sum[thread_num];
cudaMemcpy(&gpu_sum,d_odata,sizeof(int)*thread_num,cudaMemcpyDeviceToHost);
cudaFree(d_idata);
cudaFree(d_odata);
int final_gpu_sum=0;
for (int i=0;i<thread_num;i++)
{
final_gpu_sum+=gpu_sum[i];
printf("gpu_sum[i]%d\n",gpu_sum[i]);
}
printf("final_gpu_sum=%d\n",final_gpu_sum);
int cpu_sum = 0;
for(int i = 0; i < data_size; i++)
{
cpu_sum+= h_idata[i] * h_idata[i];
}
printf("cpu_sum: %d\n", cpu_sum);
cin.get();
}
cuda 1000个数据 开256 线程
最新推荐文章于 2023-12-18 20:57:13 发布