gpt4 book ai didi

C - 数组函数求值

转载 作者:太空宇宙 更新时间:2023-11-04 04:14:12 26 4
gpt4 key购买 nike

阿罗哈!我在 C 中工作,我在带有 for 循环的数组的所有元素上使用基本函数,我想知道是否有可能加快这个计算(例如使用 cblas 函数)。我正在使用以下库(并且宁愿不添加任何库,因为这个项目不完全在我的控制之下):

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <math.h>
#include <gsl/gsl_statistics_double.h>
#include <gsl/gsl_randist.h>
#include <gsl/gsl_matrix.h>
#include <cblas.h>
#include <float.h>

有问题的代码是这样的:

#use the following functions on every element of the array and add them together
for(ii = 0; ii < k1; ii++) {
val += t[ii]*x[ii] - log(1 + exp(x[ii]));
}

其中 x 是长度为 k1 的双数组,我用 cblas_dgemv(执行矩阵 vector 乘法)和 计算t 是一个相同长度的双数组,仅包含 01(非稀疏)。现在我在这些条目上使用基本函数并将它们加在一起。

问题:

  1. 对于这些非线性函数(explog),是否有类似于 cblas_dgemv 的东西可以加速这个过程?
  2. 我能否通过在循环中仅使用非线性函数、存储结果然后尽可能再次使用 cblas 函数来加快计算速度?

最佳答案

您的计算更像是 BLAS 1 级操作。ddot 第一个短语中的xt 以及日志部分的缩减。

如果您想使用 BLAS,答案是肯定的。然而,它本质上不如 BLAS L3 高效。通过它们的一些并行实现,它可能会为您节省一些时间和精力。

关于C - 数组函数求值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53612546/

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