c++ - 矩阵初始化不适用于更高的值
问题描述
我必须初始化一个矩阵,该矩阵必须稍后传递给 Cuda 内核。但是当我初始化矩阵时出现分段错误。代码如下 -
#include <iostream>
int main(){
size_t m = 512;
size_t k = 32;
size_t n = 32;
float* a = (float*) malloc(m * k * sizeof(float));
if(a == nullptr){
std::cout<<"Nullptr returned, Check Memory Hardware"<<std::endl;
exit(-1);
}
for(size_t i=0; i<m; i++){
std::cout<<i<<std::endl;
for(size_t j=0; j<k; j++){
std::cout<<j<<" ";
a[i*m + j] = 1.0f;
}
std::cout<<std::endl<<"=-=-=-=-=-=-=-=- ||||| =-=-=-=-=-=-=-=-=-=-=-=-=-"<<std::endl;
}
}
该代码仅在m < 100
;
对于m < 100
,它会在 处引发分段错误i = 97
。
我能够使用完全相同的代码使用 2^12 边的矩阵。
我的系统配置 - RAM 16GB 2667 MT/s、i7 9750h 和 RTX 2070。
解决方案
a[i*m + j] = 1.0f;
这个数学是错误的。使用i
表示行和j
表示列的术语,每行都有k
值,因此应该是:
a[i*k + j] = 1.0f;
推荐阅读
- apache-spark - PySpark:(广播)在最近的日期时间/unix 上加入两个数据集
- node.js - 从 sdk_aws 获取依赖项
- python - 使用 pip 安装 numpy 安装时出错
- mysql - 使用 docker 容器的错误时间戳:时区设置无效
- r - 地图中一组特定国家的边界线
- java - 从 RecyclerView 中的项目触发单击和拖动操作
- java - 在 java 中使用 restTemplate 将 text/html 解析为 application/json
- vue.js - 每次按下按钮时如何进行v-card的扩展过渡
- python - 使用 openpyxl 在工作簿之间复制数据
- python - 对具有一些相交索引的数据帧求和