开启日志
MindSpore线程池相关代码主要在mindspore/core/mindrt/src/thread文件夹下的threadpool.cc,actor_threadpool.cc和parallel_threadpool.cc,使用的日志宏如下图:
默认是没有定义"THREAD_POOL_DEBUG"这个宏的,所以日志未开启,那么加上这个宏定义:
这就可以编译出版本了。
编译出版本
我在编译时遇到一个问题,如下:
In file included from /home/jiangdong/workspace/mindspore/mindspore/core/mindrt/include/thread/threadpool.h:31,
from /home/jiangdong/workspace/mindspore/mindspore/core/mindrt/src/thread/threadpool.cc:21:
/home/jiangdong/workspace/mindspore/mindspore/core/mindrt/src/thread/threadpool.cc: In member function ‘void mindspore::Worker::SetAffinity()’:
/home/jiangdong/workspace/mindspore/mindspore/core/mindrt/include/thread/threadlog.h:27:12: error: format ‘%s’ expects argument of type ‘char*’, but argument 4 has type ‘std::string’ {aka ‘std::basic_string<char>’} [-Werror=format=]
27 | { printf("[INFO] %s|%d: " #content "\r\n", __func__, __LINE__, ##args); }
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/jiangdong/workspace/mindspore/mindspore/core/mindrt/src/thread/threadpool.cc:89:3: note: in expansion of macro ‘THREAD_INFO’
89 | THREAD_INFO("Worker pthread_setaffinity_np, mask %s", MaskToStr(&mask_));
做下图红圈中修改即可解决:
然后在mindspore顶层目录下执行bash build.sh -e cpu -S on 重新出版本
执行程序验证
由于产生的日志可能较多,我将日志输出到了文件中,做如下设置即可:
export GLOG_logtostderr=0 (如果是1,日志会输出到控制台)
运行一个基于mindspore的demo程序后,可以看到如下日志,显示了任务执行相关信息:
上图红圈内in multi thread or not:1的意思是使用了多线程。
这样,就可以自己添加日志进一步研究线程池机制了