4

DSPコードを最適化するためにacceleratedフレームワークを使用しています。ある配列(または配列の一部)の内容を別の配列にコピーしたい場合が何度かあります。

これを行うための適切な関数が見つからないようです。その代わりに、配列に1を掛けて(または0を足して)、その方法でコピーを取得するという、ある種のばかげた作業を行ってきました。

float one = 1;

float sourceArray = new float[arrayLength];
/////....sourceArray is filled up with data

float destArray = new float[arrayLength];

vDSP_vsmul(sourceArray, 1, &one, destArray, 1, arrayLength);

これを行うためのより良い方法が必要です!?ありがとう!

4

5 に答える 5

8

AccelerateのBLAS部分を使用する場合は、JeffBiggusがcblas_scopy()さらに高速であるとベンチマークしていますmemcpy()

于 2013-02-05T05:18:09.377 に答える
7

memcpyはどうですか?

#include <string.h>

memcpy(destArray, sourceArray, arrayLength * sizeof(float));
于 2013-02-04T23:50:43.867 に答える
1

私はもっ​​と悪い方法を考えることができましたvDSP_vsmul(); あなたもすることができますvvcopysign()

于 2013-02-05T02:11:29.527 に答える
0

vDSP_vclr次のように使用できますvDSP_vadd

int sourceLength = 3;
float* source = (float*)malloc(sourceLength * sizeof(float));
// source is filled with data, let's say [5, 5, 5]

int destinationLength = 10;
float* destination = (float*)malloc(destinationLength * sizeof(float));
// destination is filled with ones so [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

// Prepare the destination array to receive the source array
// by setting its values to 0 in the range [initialIndex, initialIndex + N-1]
int initialIndex = 2;
vDSP_vclr((destination+initialIndex), 1, sourceLength);

// We add source[0, N-1] into destination[initialIndex, initialIndex + N-1]
vDSP_vadd(source, 1, (destination+initialIndex), 1, (destination+initialIndex), 1, sourceLength);

または、もっと簡潔に、ブラッド・ラーソンが言ったように「cblas_scopy」を使用することもできます

// Init source and destination
// We copy source[0, sourceLength] into destination[initialIndex, initialIndex + sourceLength]
cblas_scopy(sourceLength, source, 1, (destination+initialIndex), 1);
于 2017-02-24T14:59:08.027 に答える
0

これがコピーするのに最適な方法だと思います。

サブマトリックスの内容を別のサブマトリックスにコピーします。単精度。https://developer.apple.com/documentation/accelerate/1449950-vdsp_mmov

func vDSP_mmov(_ __A: UnsafePointer<Float>, 
             _ __C: UnsafeMutablePointer<Float>, 
             _ __M: vDSP_Length, 
             _ __N: vDSP_Length, 
             _ __TA: vDSP_Length, 
             _ __TC: vDSP_Length)
于 2017-06-29T10:51:34.660 に答える