5

次のデータがあります。

A = [a0 a1 a2 a3 a4 a5 .... a24]
B = [b0 b1 b2 b3 b4 b5 .... b24]

次に、次のように乗算します。

C = A * B' = [a0b0 a1b1 a2b2 ... a24b24]

これには明らかに 25 回の乗算が含まれます。

ただし、私のシナリオでは、「ループ反復」ごとに 5 つの新しい値のみが A にシフトされます (5 つの古い値が A からシフトアウトされます)。データが完全に新しいものではなく、A を介して移行しているという事実を利用する手っ取り早い方法はありますか? 理想的には、乗算演算の数を最小限に抑えたいと考えています (おそらくより多くの加算/減算/累積を犠牲にして)。私は当初、シストリックアレイが役立つかもしれないと思っていましたが、そうではありません (私は思う!?)

更新 1: 注 B は長期間固定されていますが、再プログラムすることができます。

更新 2: A のシフトは次のようになります: a[24] <= a[19], a[23] <= a[18]... a[1] <= new01, a[0] <= new00. など、各クロックサイクルで

どうもありがとう!

4

3 に答える 3

1

最初の 5 つのデータ セットでは、最大 50 回の乗算を保存できます。しかし、その後は掛け算の平坦な道です。最初の 5 セット以降のすべてのセットについて、新しいデータ セットを乗算する必要があるためです。

すべての配列がゼロに初期化されていると仮定します。全体の掛け算の量を考えると、保存された 50 は何の役にも立たないと思います。

それでも、これらの 50 を保存する方法についてヒントを提供します。おそらく、その拡張機能を見つけることができますか?

到着した最初のデータセット: の最初のデータセットにaの各データセットを掛けbます。にすべて保存し、aにのみコピーa[0]a[4]ますcここで25回の乗算

2 番目のデータ セットが到着a[0]a[4]ましb[0]b[4]。に保存しa[0]a[4]にコピーしa[0->9]ますcここで5つの乗算

3 番目のデータ セットが到着しました。この時間にを乗算a[0]a[9]、対応する にコピーします。ここで 10 の乗算b[0]b[9]a[0->14]c

4 番目のデータセット:に対応する対応するコピー をa[0]掛けます。ここに 15 の乗算がありますa[14]ba[0->19]c

5 番目のデータ セット:に対応する対応するコピー をに乗算a[0]します。ここに 20 の乗算がありますa[19]ba[0->24]c

保存された乗算の合計: 50 回の乗算。

6 番目のデータ セット : 通常のデータ乗算。各25個。これは、配列内の各セットに対してa利用可能な新しいデータ セットがあるため、乗算が避けられないためです。

于 2013-04-11T18:53:54.600 に答える
0

別の配列 D を追加して、A の変更/未変更の値にフラグを付けることはできますか。この配列をチェックするたびに、新しい乗算を行うかどうかを決定します。

于 2013-04-11T16:18:26.620 に答える