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