gpt4 book ai didi

c - MKL cblas_idamax 中的奇怪行为

转载 作者:行者123 更新时间:2023-11-30 16:40:57 24 4
gpt4 key购买 nike

我正在尝试使用英特尔 MKL 库中的cblas_idamax函数来获取输入矩阵每列的最大值。在某些执行中我得到了正确的答案,但在其他执行中我得到了错误的索引。这是我的 C 代码示例:

const MKL_INT nByRow = 2;
const MKL_INT matrix_size = nByRow*nByRow
double * colMaxs = (double *)mkl_malloc(sizeof(double)*nByRow, 64);
double * matrix = (double *)mkl_malloc(sizeof(double)*nByRow, 64);

// matrix is CblasRowMajor
// 1 2
// 3 4
matrix[0]=1;
matrix[1]=2;
matrix[2]=3;
matrix[3]=4;

for(size_t i=0;i<nByRow;i++){
// calculate the index of the max value in each column
maxPos = cblas_idamax(matrix_size, matrix + i , nByRow);

// save the max value
colMaxs[i] = (*matrix)[i + (maxPos * nByRow)];
}

有时cblas_idamax为每列返回索引1,这是正确的,但其他时候为每列返回3。我认为这是一个与内存相关的问题。如果有人对这里发生的事情有一些线索,我将非常感激:)

我的电脑是 2015 年初的 MacBook Pro Retina

操作系统:Sierra

处理器:Intel 2.7 GHz Intel Core i5

提前致谢!

最佳答案

maxPos 是“vector ”中的绝对位置,而不是行索引。而且您似乎也有太多的间接方式。

要获取元素值,您应该这样做

// save the max value
colMaxs[i] = matrix[i + maxPos];

要获取行索引,您需要计算 (maxPos-i)/nByRow 左右。

关于c - MKL cblas_idamax 中的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46453133/

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