memory-fences

    0

    1答えて

    C++の初期化処理のメモリセマンティクスは不明です。 次のプログラムがあるとします。 #include <iostream> #include <thread> using namespace std; void func(int* arr, int s) { for (int i = 0; i < s; ++i) { cout << arr[i] <<

    5

    1答えて

    を並べ替え防ぐ:特定 マイクロソフトに /揮発性のとき:MSのコンパイラオプションを使用-によってれるARM以外の アーキテクチャがあり、デフォルト他のグローバル オブジェクトへの参照への順序付けを維持することに加えて、 コードを生成して、 の揮発性オブジェクトへの参照の間で順序を維持します。特に: 揮発性オブジェクトへの書き込み(揮発性書き込みとも呼ばれます)にはリリースセマンティクスがあります

    0

    1答えて

    私はopenCL Cプログラミングを開始しました。ワークグループのすべての作業項目は、ローカルメモリの固有の場所を更新します。その後、作業項目のプライベート変数は、2つの他の作業項目によって更新されたローカルデータに基づいて更新されます。このような何か:それは内部的にフェンシングをするよう __kernel MyKernel(__global int *in_ptr) {

    1

    3答えて

    インターネットでは、パラレルプログラミングでvolatileキーワードを使用することに関する多くの議論があり、時には矛盾する議論があります。 このトピックのより信頼できる議論の1つは、this article by Arch Robisonのようです。彼が使用している例は、あるスレッドから別のスレッドに値を渡すタスクです。 スレッド1.は、行列積を計算し、スレッド2に与えます。行列は変数Mであり、

    5

    2答えて

    インテル64およびIA-32アーキテクチャー・ソフトウェア・デベロッパーズ・マニュアルによると、LOCKシグナル・プレフィックスは、シグナルがアサートされている間、プロセッサーが共有メモリーを排他的に使用することを保証します。これは、バスまたはキャッシュロックの形で行うことができます。 しかし、これが私がこの質問をしている理由です。この接頭辞がメモリバリアを提供するかどうかは私には分かりません。

    6

    1答えて

    この質問に関して、私はx86とx86-64だけに興味があります。 MSVC 2005 、__faststorefenceのドキュメントは言う:「保証のすべての直前店が後続店前に、グローバルに表示されていること。」 「ロードとストアメモリ参照の両方を含むすべての前メモリ参照は、任意の後続メモリ参照前に、グローバルに可視であることを保証する。」: はMSVC 2008および2010の場合、それに変更し

    6

    1答えて

    アトミック変数が取得リリース・ペアで古い値をロードすることが可能かどうかを考えています。 原子変数xがあるとしましょう。その変数をリリースセマンティクスで保存し、後で獲得セマンティクスでロードすると、理論上は古い値を読み取ることができますか? std::atomic<int> x = 0; void thread_1() { x.store(1, std::memory_order

    11

    3答えて

    にしても、単純な2スレッドの通信たとえば、私は適切なメモリ順序を得るために、C11原子とmemory_fenceスタイルでこれを表現する難しさを持っている: 共有データ: volatile int flag, bucket; プロデューサスレッド: while (true) { int value = producer_work(); while (atomic_load_

    0

    1答えて

    私はメモリを解放する前にCPUキャッシュからメモリ範囲を取り除いています。理想的には、これらのキャッシュラインをメモリに保存せずに放棄するだけです。誰もその値を使うつもりはなく、そのメモリ範囲(malloc()/new/_mm_malloc()などの後)を再度取得する人は、まず新しい値でメモリを埋めるでしょう。 this question suggestsとして、現在のx86_64で理想を達成する