2017-12-07 21 views
0

CUDAは、アライメントされていないロードとストアをサポートしていますか? addr%k!= 0となるように、アドレスaddrからサイズkバイトの(単一の)値を純粋に読み取ることはできますか?CUDAでアライメントされていないロードとストアを作成できますか?

unsigned* p = (unsigned*) ((char *) my_aligned_ptr + 1); *p = 0xAABBCCDD; 

または

unsigned* q = (unsigned*) ((char *) my_aligned_ptr + 11); unsigned x = *q; 

は、期待した効果がありますよう

より具体的には、アクセスするのだろうか?

+3

今すぐ削除された回答でリンクしたドキュメントは、この質問に既に回答しています。それはできません。単純にコードを試してみたら、 'cuda-memcheck'が整列していないエラーを報告するでしょう。それは、あなたが読んだかどうか、また、そのドキュメンテーションを読んだかどうかにかかわらず、それがうまくいかないという証拠です。答えはいいえだ。ポインターの非参照は、ポインターの自然に整列した境界で発生することが予想されます。これが確実に行われることはプログラマーの責任です。そして、私はあなたの2番目の例で 'unsigned x = * q; 'を意味すると仮定します。 –

+3

誰かがこの制限を回避する必要がある場合、私はこの答えのサンプルコードを提供しました(https://stackoverflow.com/a/40198552/1662425)を同様の質問に変換します。 – tera

答えて

1

CUDAプログラミングガイドのSize and Alignment Requirement subsectionが多少あいまいですが、回答はです。いいえ、整列していないアクセスはサポートされていません。コードはコンパイルされますが、結果はまるで近くに整列されたアドレスが使用されたようになります。それ以外の場合は未定義です。

@teraには、回避コードがthis answerにあります。

関連する問題