cuda统计直方图

栏杆上的红宝石 2017-02-15 01:20:12
#include "cuda_runtime.h"
#include "device_launch_parameters.h"

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>

typedef struct
{
BYTE r;
BYTE b;
BYTE g;
}RGB;


__global__ void func(BYTE *gray, RGB **img, int width)
{
int i = threadIdx.x;
for (int j = 0; j < width; j++)
{
gray[(img[i][j].r * 38 + img[i][j].g * 75 + img[i][j].b * 15) >> 7]++;
}
}

int main()
{
BITMAPFILEHEADER fileHeader;
BITMAPINFOHEADER infoHeader;
FILE* pfin;
BYTE gray[256] = { 0 };
RGB img[256][256] = { 0 };

cudaError_t cudaStatus;

pfin = fopen("1.bmp", "rb");
//ReadtheBitmapfileheader;
fread(&fileHeader, sizeof(BITMAPFILEHEADER), 1, pfin);
//ReadtheBitmapinfoheader;
fread(&infoHeader, sizeof(BITMAPINFOHEADER), 1, pfin);
//the size of the picture
int size = infoHeader.biWidth*infoHeader.biHeight;
//read the file
fread(img, sizeof(RGB), size, pfin);
int width = infoHeader.biWidth;

BYTE *dev_gray;
RGB **dev_img;


cudaStatus=cudaMalloc((void **)&dev_gray,width*sizeof(BYTE));
if (cudaStatus != cudaSuccess) {
fprintf(stderr, "cudaMalloc failed!");

}
cudaStatus=cudaMalloc((void **)&dev_img,sizeof(img[256][256]));
if (cudaStatus != cudaSuccess) {
fprintf(stderr, "cudaMalloc failed!");

}

cudaMemcpy(dev_gray, gray, width*sizeof(BYTE), cudaMemcpyHostToDevice);
cudaMemcpy(dev_img, img,sizeof(img[256][256]),cudaMemcpyHostToDevice);

func<<<1,width>>>(dev_gray,dev_img, width);

cudaMemcpy(gray, dev_gray, width*sizeof(BYTE),cudaMemcpyDeviceToHost);

cudaFree(dev_gray);
cudaFree(dev_img);

getchar();
return 0;
}
这是我代码 为什么最后结果gray数组里面什么都没有啊
...全文
920 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

2,408

社区成员

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

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