矩阵初始化不适用于更高的值
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;
我必须初始化一个矩阵,该矩阵稍后必须传递给 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;