2016-12-12 20 views
0

SSE命令を使用する特殊なコードセットを作成する会社と協力しています。彼らはQt Creator IDEを使用しています。私はそれらにXCodeとVisual StudioでコンパイルされたCヘッダファイルと対応する* .cファイルを提供しました。 Qt Creatorではコンパイルされません。Qt CreatorのSIMD命令

SSE命令がQt Creatorでコンパイルされるように、適切なコンパイラ設定を変更するにはどうすればよいですか?

次のように最初のエラーの原因となる行は次のようになります。

_mm_store_ps(outData, _mm_add_ps(*l, *r)); 

エラー文を読む:

SSE vector return without SSE enabled changes the ABI [-Wpsabi] 

ありがとう:我々はまた、この警告を取得している

Inlining failed in call to always_inline ‘__mm_add_ps’: target specific option mismatch 
Inlining failed in call to always_inline ‘_mm_store_ps’: target specific option mismatch 

すべてあなたの助けになります。

+5

Qt Creatorはコンパイラではなく、IDEです。コンパイラとIDEは異なるものです。人々が分析できるように、いくつかのエラーメッセージと問題のあるコードを表示してください。 – Velkan

+0

@Velkanありがとうございました。私は今それをやった(私は思う)。 – user24205

+0

選択されたビルドシステム、コンパイラフラグの受け渡し方法によって異なります。それはqmake、cmake、普通の手書きMakefile、またはどんなプロジェクトですか?実際には、コマンドラインからも使えるビルドシステムと、QtCでビルドするときにビルドシステムを使用するQt Creatorプロジェクトの2つのレベルがあります。可能であれば、おそらく最初のものに必要なコンパイラフラグを追加するべきです。 – hyde

答えて

2

gccやclangのようなコンパイラでは、組み込み関数とベクトル型を使用するコードをコンパイルするときに、関連する命令セット拡張を有効にする必要があります。例えば-msse2。これにより、コンパイラはSSE2で自動ベクトル化することもできます。

SSE2はx86-64のベースラインなので、何らかの理由で32ビットバイナリを構築していると思いますか?

コンパイラ(おそらくMSVC)は、コンパイラが自動的に命令を生成できるようにすることなく、組み込み関数を使用できるようにすると思います。

SSE4.1またはAVXを使用するいくつかの機能を備えているため、SSE4とAVXの機能を別々のファイルに置くことでプログラムがコンピュータで動作する必要があるため、ランタイムCPUディスパッチを実行するには-msse4.1-mavxでコンパイル単位を作成します。

それは(それはあなたが望むものの場合)も-mpopcntようなものを有効にする-march=nehalemまたは-march=haswellを有効にするには、通常は良いアイデアだし、もっと重要なのは、それがサポートする拡張機能を使用して可能性の高いターゲットCPU用に最適化するだけでなく、ために-mtune=haswellを設定します。

関連する問題