矩阵初始化不适用于更高的值

Matrix initialization not working with higher values

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