vector[index]
は、特定のインデックスに対して128ビットのメモリアラインメントがあることをコンパイラに伝えることはできますか?インデックスでの配列のメモリアライメント
または、indexで行うことはできません。ポインタで行う必要がありますか?
vector[index]
は、特定のインデックスに対して128ビットのメモリアラインメントがあることをコンパイラに伝えることはできますか?インデックスでの配列のメモリアライメント
または、indexで行うことはできません。ポインタで行う必要がありますか?
私はCの質問に答えることができます...しかし、混合言語が役立ちます。
私は、ICCのようなもの/
#pragma assume aligned : 64 ::A
、またはそのようなことがあるならば、彼が求めている...で、それは
!DIR$ ASSUME_ALIGNED :64 :: A
もコンパイラがあるあるのifort(S)だと思います配列アライメントのためのスイッチ、そしてそのすべてはメモリ転送を助けるためのものです。 Ifindそれは良い習慣です。
https://software.intel.com/en-us/node/522571
なたもXeonプロセッサ・ファイとAXV-512用のIntelウェビナーでこのようなものの束であるので、私はgccの同等があることを前提としています。ただ、128をスキップして512に行く(64バイト)、その後、あなたはAVX 512準備ができている;)
を1は256に行くことができるという事実は、AVX 2K
私はMrsの靴をクローゼットの一方の側から他方の側に動かすことの類推を利用したいと思います。 左足(または左足)のshoeAがbox1にあり、右のShoeAがbox2の左手の靴Bの場合、基本的に各靴の左右を含むボックスに靴を戻す必要があります押し入れ。コンパイルや実行/セットアップ時にボックスと整列させるほうがはるかに簡単です。 1つの靴が1つだけの場合は、Ms Marcosのサイズのコレクションのように心配する必要はありません。大規模なSIMDの場合、これはいくつかの違いをもたらします。 – Holmz
の希望を示しているようだ私は、コンパイラがあることを知っているだろうと思います配列によって格納されたデータの型を調べることでそれ自身を調べる –
基本的なアライメントよりも大きなアラインメントをサポートしています(つまり、 'alignof(std :: max_align_t)')。あなたの*型*を整列させている限り、要素も同様になります。一方、型が小さく、いくつかの*要素を整列させたい場合、a)タイプシステムを利用するためにコードを再設計する必要があります。また、b)おそらく手動コードを書く必要があります。 –
@ Osaberima:ちょうど128ビットの要素のベクトルを使用するのですか?コンパイラは、0番目の要素が配置されていることをコンパイラに知らせることができる限り、コンパイラはすべての要素が整列していることを認識します。うーん。どうやってするか? –