求大虾帮忙啊

xubinxuxinyu 2012-07-28 09:44:10
#include<stdio.h>
#include<cuda_runtime.h>
#include<cutil.h>
#include<stdlib.h>
#define DATA_SIZE 256*5//求0~256*5-1的平方和。
#define THREAD_NUM 256
__global__ static void sumOfSquares(int *num, int* result,
clock_t* time)
{
const int tid = threadIdx.x;
const int size = DATA_SIZE / THREAD_NUM;
int sum = 0;
int i;
clock_t start;
if(tid == 0) start = clock();
for(i = tid * size; i < (tid + 1) * size;i ++) {
sum += i*i;
}
result[tid] = sum;
if(tid == 0) *time = clock() - start;
}
int main()
{
int *gpudata,*result,data[DATA_SIZE];
clock_t *time;
cudaMalloc((void**)&gpudata,sizeof(int)*DATA_SIZE);
cudaMalloc((void**)&result,sizeof(int)*THREAD_NUM);
cudaMalloc((void**)&time,sizeof(clock_t));
cudaMemcpy(gpudata,data,sizeof(int)*DATA_SIZE,cudaMemcpyHostToDevice);

sumOfSquares<<<1, THREAD_NUM, 0>>>(gpudata, result, time);

int sum[THREAD_NUM];
clock_t time_used;
cudaMemcpy(sum, result, sizeof(int) * THREAD_NUM,
cudaMemcpyDeviceToHost);
cudaMemcpy(&time_used, time, sizeof(clock_t),
cudaMemcpyDeviceToHost);
cudaFree(gpudata);
cudaFree(result);
cudaFree(time);
long long int final_sum = 0;
for(int i = 0; i < THREAD_NUM; i++) {
final_sum += sum[i];
}
printf("sum: %d time: %d\n", final_sum, time_used);//gpu所算出的结果和运行的时间。

final_sum = 0;
clock_t time1;
time1=clock();
for(int i = 0; i < DATA_SIZE; i++) {
final_sum+= i*i;
}
time1=clock()-time1;
printf("sum (CPU): %d %d\n", final_sum,time1);//cpu所算出的结果和运行的时间。
return 0;
}
但问题是结果倒是一样,但时间gpu所运行时间是2342,而cpu为1,他们的单位是什么,为什么gpu运行时那么多,是不是算错了,求求指教一下,这个已经折磨我好久
...全文
201 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
guoyaning 2012-09-21
  • 打赏
  • 举报
回复
在我看来是时间都浪费到设备与主机间的复制操作上了!你的GPU时间只是一个线程执行的时间,还比CPU执行时多了一条赋值语句!肯定比CPU耗时多!~

353

社区成员

发帖
与我相关
我的任务
社区描述
CUDA高性能计算讨论
社区管理员
  • CUDA高性能计算讨论社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧