1

我想为每个节点(同一个集群)的每个进程创建不同的 MKL 线程数。以这种方式在输入文件中提供每个进程的线程数。

主机线程

主机名_1 t=4

主机名_2 t=7

主机名_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 回答