首页 > 解决方案 > 矩阵初始化不适用于更高的值

问题描述

我必须初始化一个矩阵,该矩阵必须稍后传递给 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。

标签: c++memorymalloc

解决方案


a[i*m + j] = 1.0f;

这个数学是错误的。使用i表示行和j表示列的术语,每行都有k值,因此应该是:

a[i*k + j] = 1.0f;

推荐阅读