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