ベクトル化されたコードを iOS アプリケーションに実装することを目標に、初めて Accelerate フレームワークをいじっています。Objective C または C でベクトルを操作することに関して、私は何もしようとはしませんでした。MATLAB の経験があるので、Accelerate を使用することは実際にそれほど苦痛なことなのだろうかと思います。次の計算をしたいとします。
b = 4*(sin(a/2))^2
ここで、a と b はベクトルです。
MATLAB コード:
a = 1:4;
b = 4*(sin(a/2)).^2;
ただし、ドキュメンテーションをざっと見てみると、Accelerate を使用すると状況が大きく異なります。
私のC実装:
float a[4] = {1,2,3,4}; //define a
int len = 4;
float div = 2; //define 2
float a2[len]; //define intermediate result 1
vDSP_vsdiv(a, 1, &div, a2, 1, len); //divide
float sinResult[len]; //define intermediate result 2
vvsinf(sinResult, a2, &len); //take sine
float sqResult[len]; //square the result
vDSP_vsq(sinResult, 1, sqResult, 1, len); //take square
float factor = 4; //multiply all this by four
float b[len]; //define answer vector
vDSP_vsmul(sqResult, 1, &factor, b, 1, len); //multiply
//unset all variables I didn't actually need
正直なところ、ここで何が最悪なのかわかりません。すべての中間ステップを追跡すること、VecLib に関して vDSP で引数がどのように渡されるかを記憶しようとすること (まったく異なります)、または非常に些細なことをするのに非常に時間がかかることです。
ここで何かが欠けていて、ほとんどのステップをマージまたは短縮できることを本当に願っています. コーディング リソース、良いコーディング習慣 (難しい方法や本から学んだもの) などに関する推奨事項は大歓迎です! 複数行のベクトル計算をどのように処理していますか?