4

Anxn行列で、xが次元nベクトルある場合、xAx_GEMVxybeta=0

私は特に、Cインターフェイスを使用したCublasの実装に興味があります。

4

2 に答える 2

6

いいえ。Fortranの場合、実装とは何の関係もありません。Fortranでは、引数がIntent(In)でない限り、言語標準に違反するため、サブプログラムの実際の引数にエイリアスを設定することは言語標準に違反します。したがって、インターフェイスにIntent(Out)、Intent(InOut)のダミー引数がある場合、またはIntentがない場合は、サブプログラムを呼び出すときに、対応する実際の引数に常に個別の変数を使用する必要があります。

于 2012-03-29T12:52:02.307 に答える
1

いいえ。

出力の各要素は、入力ベクトルのすべての要素に依存しますx

例:xが入力で、yが出力、Aが行列の場合、のith要素はy次の方法で生成されます。

y_i = A_i1*x_1 + A_i2 * x_2 ... + A_in * x_n

x_iしたがって、上記の結果で上書きすると、x_r依存する他のいくつかx_iは適切な入力を受け取らず、不適切な結果を生成します。

編集

これをコメントするつもりでしたが、大きくなりすぎていました。したがって、ここで、上記の推論が並列実装にも当てはまる理由を説明します。

各並列グループ/スレッドが元のデータのローカルコピーを作成しない限り、その場合、元のデータが破棄される可能性がありますが、この推論の行は成り立ちます。

ただし、そうすること(ローカルコピーを作成すること)は、次の場合にのみ実用的で有益です。

  1. 各並列スレッド/ブロックは、かなりのオーバーヘッドがなければ元の配列にアクセスできません。
  2. 並列スレッド/ブロックごとに個別のコピーを保持するのに十分なローカルメモリ(キャッシュ、共有メモリ、またはMPIの場合は通常のメモリと呼びます)があります。

ノート:

  • (1)単一のマシン上の多くのマルチスレッドアプリケーションには当てはまらない場合があります。
  • (1)CUDAには当てはまるかもしれませんが、(2)CUDAには絶対に当てはまりません。
于 2012-03-29T19:46:59.113 に答える