#include <stdio.h>
#include <stdlib.h>
#include <hip/hip_runtime.h>
#include <hip/hip_runtime_api.h>
#include <iostream>
#ifdef __HIP_PLATFORM_AMD__
#include <hip/hip_ext.h>
#endif
#define HIP_CHECK(command){\
hipError_t status = command;\
if(status != hipSuccess){\
std::cerr <<"Error:HIP reports"\
<<hipGetErrorString(status)\
<<std::endl;\
std::abort();\
}}
#define WIDTH 16
__global__ void matrix_mul(double* Md, double* Nd, double* Pd, int width)
{
int i = threadIdx.x;
int j = threadIdx.y;
double sum = 0;
for (int k = 0; k < width; k++)
{
double a = Md[j * width + k]; //首先从全局内存读取对应此线程索引的数组元素,储存到浮点型变量f
double b = Nd[k * width + i];
sum += a * b;
}
Pd[j * width + i] = sum;
}
int main(void)
{
double M[16][16], N[16][16], P[16][16];
int Width = 16;
//初始化示例数据
for (int i = 0; i < 16; i++)
{
for (int j = 0; j < 16; j++)
{
M[i][j] = 2;
N[i][j] = 3;
}
}
size_t size = Width * Width * sizeof(double);
//malloc device memory
double *Md;
double *Nd;
double *Pd;
HIP_CHECK(hipMalloc((void**)&Md, size));
HIP_CHECK(hipMalloc((void**)&Nd, size));
HIP_CHECK(hipMalloc((void**)&Pd, size));
HIP_CHECK(hipMemcpy(Md, M, size, hipMemcpyHostToDevice));
HIP_CHECK(hipMemcpy(Nd, N, size, hipMemcpyHostToDevice));
dim3 dimBlock(WIDTH, WIDTH);
dim3 dimGrid(1, 1);
hipLaunchKernelGGL(matrix_mul, dimGrid, dimBlock, 0, 0, Md, Nd, Pd, Width );
HIP_CHECK(hipGetLastError());
//拷贝计算数据-一级数据指针
HIP_CHECK(hipMemcpy(P, Pd, size, hipMemcpyDeviceToHost));
//打印结果
for (int i = 0; i < 16; i++)
{
for (int j = 0; j < 16; j++)
{
printf("%.2f ", P[i][j]);
}
printf("\n");
}
//释放内存
free(M);
free(N);
free(P);
HIP_CHECK(hipFree(Md));
HIP_CHECK(hipFree(Nd));
HIP_CHECK(hipFree(Pd));
return 0;
}
hipcc编译时报错:Error:HIP reportshipErrorInvalidValue
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- CSDN专家-深度学习进阶 2021-09-15 18:42关注
应该是这块有错误,报错说不合法:
#define HIP_CHECK(command){\ hipError_t status = command;\ if(status != hipSuccess){\ std::cerr <<"Error:HIP reports"\ <<hipGetErrorString(status)\ <<std::endl;\ std::abort();\ }}
解决 无用评论 打赏 举报
悬赏问题
- ¥15 电视版的优酷可以设置电影连续播放吗?
- ¥50 复现论文;matlab代码编写
- ¥30 echarts 3d地图怎么实现一进来页面散点数据和卡片一起轮播
- ¥15 数字图像的降噪滤波增强
- ¥15 心碎了,为啥我的神经网络训练的时候第二个批次反向传播会报错呀,第一个批次都没有问题
- ¥15 MSR2680-XS路由器频繁卡顿问题
- ¥15 VB6可以成功读取的文件,用C#读不了
- ¥15 如何使用micpyhon解析Modbus RTU返回指定站号的湿度值,并确保正确?
- ¥15 C++ 句柄后台鼠标拖动如何实现
- ¥15 有人会SIRIUS 5.8.0这个软件吗