MATLAB ヘルプ センター
このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
指定された値のグローバル メモリまたは共有メモリの変数からのアトミックな減算
R2021b 以降
[A,oldA] = gpucoder.atomicSub(A,B)
[A,oldA] = gpucoder.atomicSub(A,B) は、B をグローバル メモリまたは共有メモリの A の値から減算し、結果を A に書き戻します。この演算は、読み取り、変更、書き込みの操作全体が他のスレッドからの干渉なしに実行されることが保証されているという意味でアトミックです。入力引数と出力引数の順序は、構文の規定と一致しなければなりません。
A
B
例
すべて折りたたむ
関数 gpucoder.atomicSub を使用してシンプルなアトミック減算演算を実行し、対応する CUDA® atomicSub() API を呼び出す CUDA コードを生成します。
gpucoder.atomicSub
atomicSub()
1 つのファイル内に、行列入力 a および b を受け入れるエントリポイント関数 myAtomicSub を記述します。
a
b
myAtomicSub
function a = myAtomicSub(a,b) coder.gpu.kernelfun; for i = 1:numel(a) [a(i),~] = gpucoder.atomicSub(a(i),b); end end
コード生成で使用する double の行列の型を作成するには、関数 coder.newtype を使用します。
coder.newtype
A = coder.newtype('int32', [1 30], [0 1]); B = coder.newtype('int32', [1 1], [0 0]); inputArgs = {A,B};
CUDA ライブラリを生成するには、関数 codegen を使用します。
codegen
cfg = coder.gpuConfig('lib'); cfg.GenerateReport = true; codegen -config cfg -args inputArgs myAtomicSub -d myAtomicSub
生成された CUDA コードには、atomicSub() CUDA API の呼び出しを使用する myAtomicSub_kernel1 カーネルが含まれます。
myAtomicSub_kernel1
// // File: myAtomicSub.cu // ... static __global__ __launch_bounds__(1024, 1) void myAtomicSub_kernel1( const int32_T b, const int32_T i, int32_T a_data[]) { uint64_T loopEnd; uint64_T threadId; ... loopEnd = static_cast<uint64_T>(i - 1); for (uint64_T idx{threadId}; idx <= loopEnd; idx += threadStride) { int32_T b_i; b_i = static_cast<int32_T>(idx); atomicSub(&a_data[b_i], b); } } ... void myAtomicSub(int32_T a_data[], int32_T a_size[2], int32_T b) { dim3 block; dim3 grid; ... cudaMemcpy(gpu_a_data, a_data, a_size[1] * sizeof(int32_T), cudaMemcpyHostToDevice); myAtomicSub_kernel1<<<grid, block>>>(b, i, gpu_a_data); cudaMemcpy(a_data, gpu_a_data, a_size[1] * sizeof(int32_T), cudaMemcpyDeviceToHost); ... } ... }
オペランド。スカラー、ベクトル、行列、または多次元配列として指定します。入力 A と入力 B は以下の要件を満たさなければなりません。
同じデータ型。
同じサイズまたは互換性のあるサイズ。たとえば、A が M 行 N 列の行列で、B がスカラーまたは 1 行 N 列の行ベクトル。
M
N
1
データ型: int32 | uint32
int32
uint32
R2021b で導入
gpucoder.atomicAdd
gpucoder.atomicCAS
gpucoder.atomicDec
gpucoder.atomicExch
gpucoder.atomicInc
gpucoder.atomicMax
gpucoder.atomicMin
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
ヨーロッパ
アジア太平洋地域
最寄りの営業オフィスへのお問い合わせ