1

ノード(同じクラスター)ごとにプロセスごとに異なる数のMKLスレッドを作成したいと思います。プロセスごとのスレッド数は、このような方法で入力ファイルに提供されません。

ホストスレッド

ホスト名_1t= 4

ホスト名_2t= 7

host_name_3 t = 2

私のコードはそのようなものです:

  #ifdef HAVE_LIBMKL_CORE
  char* subopts = strdup(conf->subopts);
  char* subopts_0 = subopts;
  char* tokens[] = {"t"};
  char* value;
  while (*subopts != '\0') {
    switch (getsubopt(&subopts, tokens, &value)) {
      case 0:
        int threads = atoi(value);
        mkl_set_num_threads(threads);
        break;
    }
  }
  free(subopts_0);
  #endif

各ノードのパフォーマンスモデルを構築するとき。すべての結果が同じです。代わりに、より多くのスレッドを使用するプロセスがより高速になるはずです。mkl_set_num_threads(threads)が正しく機能しない理由を誰かが助けてくれますか。または、その関数の後に必要な数のスレッドが作成されていないことを確認するにはどうすればよいですか?

4

1 に答える 1

0

私はそれを機能させます。誰かが同じ問題を抱えている場合のために、私は私の答えを投稿しています。mkl_set_dynamic(0);を追加するだけです。動的スレッドを無効にすると、機能します:)

于 2013-02-07T10:32:07.050 に答える