【发布时间】:2021-09-09 15:05:59
【问题描述】:
我正在尝试使用 Apple Accelerate 库通过 LAPACK 反转 400x400 矩阵。我使用?getrf_ 和?getri 创建了一个矩阵求逆方法。
void invert() {
aligned_buffer<int> pivot(get_num_rows()*get_num_columns());
int info = 0;
int num_rows = get_num_rows();
int num_columns = get_num_columns();
if constexpr (std::is_same<T, float>::value) {
sgetrf_(&num_rows, &num_columns, const_cast<T *> (get()),
&num_rows, pivot.data(), &info);
} else {
dgetrf_(&num_rows, &num_columns, const_cast<T *> (get()),
&num_rows, pivot.data(), &info);
}
assert((info == 0) && "Error factorizing matrix.");
aligned_buffer<T> work(work_size);
if constexpr (std::is_same<T, float>::value) {
sgetri_(&num_rows, const_cast<T *> (get()), &num_rows,
pivot.data(), work.data(), &work_size, &info);
} else {
dgetri_(&num_rows, const_cast<T *> (get()), &num_rows,
pivot.data(), work.data(), &work_size, &info);
}
assert((info == 0) && "Error inverting matrix.");
}
但是,在两台不同的机器上运行代码时,我似乎得到了不同的结果。一台机器配备四核 Intel Core i7,另一台机器配备四核 Intel Core i5。当我比较倒置矩阵的结果时,除了第 49,50 97,98、148,149 197,198 行等之外,结果是相同的。差异很小但仍然存在。
对于使用相同的 LAPACK 库或不同的 lapack 库的两个不同的处理器架构,期望这些精度与此级别的精度相同是合理的吗?
【问题讨论】:
标签: macos lapack accelerate-framework