x86 一時停止命令のクロス プラットフォーム実装を作成するためのベスト プラクティスは何ですか? C++ 11 プロジェクトの忙しい回転ループで使用する予定です。
gcc ツール チェーンのみを使用している場合は、_mm_pause 組み込み関数を使用できます。この組み込み関数は、ネイティブ プロセッサが x86 の一時停止命令をサポートしていない場合でも正しいことを行いますか? また、自分のコードを clang/llvm ツールチェーンでも動作させたいと考えています。
私は C++ 11 を使用しているので、フォールバックで "std::this_thread::sleep_for" を使用できると思います。
プロジェクトのビルドに cmake を使用していますが、常に同じマシンでビルドおよびデプロイします。そのため、コンパイル中にプロセッサの設定を検出することに問題はありません。
実装例 (疑似コード) は次のとおりです。
void pause() {
// Not sure how to detect if pause is available on the platform.
#if defined(USE_mm_pause)
__asm__ ( "pause;" );
#else
std::this_thread::sleep_for(std::chrono::seconds(0));
#endif
}