gpt4 book ai didi

c - 将整数矩阵输入 cblas_sgemm 返回全 0

转载 作者:太空宇宙 更新时间:2023-11-03 23:53:39 25 4
gpt4 key购买 nike

我正在尝试使用 cblas_sgemm 对两个整数矩阵进行快速矩阵乘法。

现在它正在返回全零。

我运行了一个快速的原始矩阵乘法来仔细检查预期的输出数据,它们不应该为零。

工作 朴素的方法:

typedef int    mm_data_t;

void func1( mm_data_t *in1, mm_data_t *in2, mm_data_t *out, int N ){
int i, j, k;

for(i=0; i<N; i++){
for(k=0; k<N; k++){
int temp = in1[i*N+k];
for(j=0; j<N; j++){
out[i*N+j] += temp * in2[k*N+j];
}
}
}
}

并使用 cblas_sgemm:

void func2( mm_data_t *in1, mm_data_t *in2,  mm_data_t *out, int N ){

cblas_sgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, N, N, N, 1.0, (float*)in1, N, (float*)in2, N, 0.0, (float*)out, N);

}

我正在使用一维数组进行优化。

输入数据是黑盒子,但是是常量。

最佳答案

cblas_sgemm() 旨在乘以单精度 float 值而非整数的矩阵。

所以你的整数被解释为浮点值。小的正整数可能被视为 subnormal numbers .将其中任何一对相乘都将得到零结果。因此,如果您的输入都是小的非负整数,则输出将全为零。

如果您的输入包含小的负整数,您的输出可能会包含很多 NaN s,它看起来像非常大的整数(可能是正数或负数。)

如果你真的需要整数相乘,你需要将它们转换为 & 从 float ,或者使用可以乘以整数矩阵的库(BLAS 不能。)

关于c - 将整数矩阵输入 cblas_sgemm 返回全 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13620349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com