gpt4 book ai didi

c++ - 使用 Apple Accelerate Framework vForce 库提高性能

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:47:04 25 4
gpt4 key购买 nike

我已成功实现 Apple 的 Accelerate Framework 中的 BLAS 库,以提高我的基本 vector 和矩阵运算的性能。

对此感到满意,我将注意力转向 vForce 来矢量化我的基本数学函数。在这里,与原始实现(使用自动编译器优化 -Os)相比,性能相当差,这让我感到有点惊讶。

作为一个简单的基准测试,我运行了以下测试:Matrix 是基本的 Matrix 类型,使用双指针,AccelerateMatrix 是 Matrix 的子类,它使用 vForce 的求幂函数:

Matrix A(vec_size);
AccelerateMatrix B(vec_size);
for (int i=0; i<vec_size;i++ ) {
A[i] = i;
B[i] = i;
}

double elapsed_time;

clock_t start = clock();
for(int i=0;i<reps;i++){
A.exp();
A.log();
}
clock_t stop = clock();

elapsed_time = (double)(stop-start)/CLOCKS_PER_SEC/reps;

cerr << "Basic matrix exponentiation/log time = " << elapsed_time << endl;


start = clock();
for(int i=0;i<reps;i++){
B.exp();
B.log();
}
stop = clock();

elapsed_time = (double)(stop-start)/CLOCKS_PER_SEC/reps;

cerr << "Accelerate matrix exponentiation/log time = " << elapsed_time << endl;

取幂/对数成员函数实现如下:

void AccelerateMatrix::exp(){
int size =(int)this->getSize();
this->goToStart();
vvexp(this->ptr, this->ptr, &size);}

void Matrix::exp(){
double *ptr = data;
while (!atEnd()) {
*ptr = std::exp(*ptr);
ptr++;
}
}

data 是指向 double 组第一个元素的指针。

下面是性能的输出:

矩阵元素的数量 = 1000000

基本矩阵求幂/对数时间(秒)= 0.0089806

加速矩阵求幂/对数时间(秒)= 0.0149955

我在 Release模式下从 XCode 运行。我的处理器是 2.3 GHz Intel Core i7。内存为 8 GB 1600 MHz DDR3。

最佳答案

看来问题与 vForce 如何操纵内存有关。本质上它不擅长一次性处理大型矩阵。对于 vec_size = 1000; vForce 计算指数/对数的速度是编译器优化的原始版本的两倍。我将较大的示例 vec_size = 1000000 分成了一批,每批 1000 个,你瞧,vForce 实现的速度是原始实现的两倍。不错!

关于c++ - 使用 Apple Accelerate Framework vForce 库提高性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36360464/

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