It seems impossible to pin the threads
維護者通常 1 天內回覆
還沒有人認領這個 Issue。
評估
- 難度
- 4/5
- 預估耗時
- 3-5 天
- 新手友好度
- 35/100
- Issue 類型
- 缺陷
- 描述清晰度
- 需要釐清
- 活躍度
- 停滯
- 技術堆疊
- c
- 領域
- performance
研究方向
首先使用 OpenBLAS 0.3.30 和所示的 hwloc 設定重現該報告,重點關注 openblas_setaffinity 和 openblas_set_num_threads。檢查在報告的組態下,NO_AFFINITY、OPENBLAS_NUM_THREADS 和 affinity 呼叫如何互相作用。確定該行為是誤用還是 bug,並記錄預期的執行緒 affinity 行為,或識別出可重現的缺陷,即視為完成。
由索引模型根據 Issue 內容生成。
描述
I have tried many methods to pin OpenBLAS threads (for microbenchmark purpose), but none of the implied methods work. I have tried every combination of:
NO_AFFINITY=1orNO_AFFINITY=0OPENBLAS_NUM_THREADSGOTOBLAS_MAIN_FREE,OPENBLAS_MAIN_FREEopenblas_set_num_threadsbefore any call, right before set affinity, and after set affinity.openblas_setaffinitywithcpuset_tthat are known to be correct on other microbenchmarks.- Whether I pin the main thread or not.
No matter what I do, OpenBLAS uses more threads than I allow it, except in the one case of setting OPENBLAS_NUM_THREADS. It seems like it just automatically increases the amount of threads to use all hyperthreads on the physical cores, sometimes more.
How exactly does the OpenBlas thread affinity work? Am I supposed to set NO_AFFINITY to 1 or 0? Does openblas_set_num_threads have any effects in run time?
Here's my config:
OpenBLAS 0.3.30 NO_AFFINITY HASWELL MAX_THREADS=28
This is how I pin the threads (using hwloc):
for (int i = 0; i < threads; ++i) {
int core = i;
int ht = pin_offset;
hwloc_obj_t core_obj = hwloc_get_obj_by_type(topo, HWLOC_OBJ_CORE, core);
if (!core_obj) {
fprintf(stderr, "Failed to get core\n");
exit(1);
}
hwloc_obj_t ht_obj = hwloc_get_obj_below_by_type(topo, HWLOC_OBJ_CORE,
core, HWLOC_OBJ_PU, ht);
if (!ht_obj) {
fprintf(stderr, "Failed to get thread\n");
exit(1);
}
fprintf(stderr, "Logical core [%d:%d] is physical [%d:%d]\n", core, ht,
core_obj->os_index, ht_obj->os_index);
cpu_set_t cpu_set;
CPU_ZERO(&cpu_set);
hwloc_cpuset_to_glibc_sched_affinity(topo, ht_obj->cpuset, &cpu_set,
sizeof(cpu_set));
if (openblas_setaffinity(i, sizeof(cpu_set_t), &cpu_set)) {
perror("openblas_setaffinity()");
exit(1);
}
}
Is this a bug? A misuse? I have no idea.
- 主要語言
- C
- 星號
- 7.6k
- 分支
- 1.7k
- 平均合併
- 1 天 7 小時
- 30 天內合併 PR
- 54
環境準備
這個專案沒有提供開發容器、Dockerfile 或貢獻指南,環境需要你自己搭建:先看它的 README,通用步驟見我們的新手貢獻指南。
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
OpenMathLib/OpenBLAS 的其他 Issue
-
難度 5/5 一週以上 新手友好度 35/100
OpenMathLib/OpenBLAS#6073 · 2 則留言 ·
維護者通常 1 天內回覆
-
難度 3/5 1-2 天 新手友好度 68/100
OpenMathLib/OpenBLAS#6069 · 1 則留言 ·
維護者通常 1 天內回覆
-
難度 4/5 3-5 天 新手友好度 52/100
OpenMathLib/OpenBLAS#6059 ·
維護者通常 1 天內回覆
-
難度 4/5 3-5 天 新手友好度 48/100
OpenMathLib/OpenBLAS#6029 · 21 則留言 ·
維護者通常 1 天內回覆
-
難度 3/5 1-2 天 新手友好度 68/100
OpenMathLib/OpenBLAS#6028 · 1 則留言 ·
維護者通常 1 天內回覆
查看 OpenMathLib/OpenBLAS 的全部 Issue
相似的 Issue
-
難度 2/5 1-3 小時 新手友好度 88/100
BasedHardware/omi#20271 ·
維護者通常 1 天內回覆
-
area/ysql kind/bug priority/medium
難度 2/5 1-3 小時 新手友好度 75/100
yugabyte/yugabyte-db#34552 ·
維護者通常 1 天內回覆
-
難度 2/5 1-3 小時 新手友好度 84/100
flux-framework/flux-coral2#509 ·
-
documentation
難度 1/5 1 小時以內 新手友好度 92/100
github/copilot-sdk#2804 · 1 則留言 ·
維護者通常 1 天內回覆
-
難度 1/5 1 小時以內 新手友好度 82/100
MixinNetwork/flutter-plugins#507 ·