如何解决如何在使用python并发线程池时设置最有效的工作人员计数?
当我在机器上看到/ proc / cpuinfo文件(正在运行Linux Mint,如果这很重要)时,处理器的最后一个条目看起来像
processor : 11
vendor_id : AuthenticAMD
cpu family : 23
model : 113
model name : AMD Ryzen 5 3600 6-Core Processor
stepping : 0
microcode : 0x8701013
cpu MHz : 2224.122
cache size : 512 KB
physical id : 0
siblings : 12
core id : 6
cpu cores : 6
apicid : 13
initial apicid : 13
fpu : yes
fpu_exception : yes
cpuid level : 16
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm constant_tsc rep_good nopl nonstop_tsc cpuid extd_apicid aperfmperf pni pclmulqdq monitor ssse3 fma cx16 sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt tce topoext perfctr_core perfctr_nb bpext perfctr_llc mwaitx cpb cat_l3 cdp_l3 hw_pstate sme ssbd mba sev ibpb stibp vmmcall fsgsbase bmi1 avx2 smep bmi2 cqm rdt_a rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves cqm_llc cqm_occup_llc cqm_mbm_total cqm_mbm_local clzero irperf xsaveerptr wbnoinvd arat npt lbrv svm_lock nrip_save tsc_scale vmcb_clean flushbyasid decodeassists pausefilter pfthreshold avic v_vmsave_vmload vgif umip rdpid overflow_recov succor smca
bugs : sysret_ss_attrs spectre_v1 spectre_v2 spec_store_bypass
bogomips : 7186.62
TLB size : 3072 4K pages
clflush size : 64
cache_alignment : 64
address sizes : 43 bits physical,48 bits virtual
power management: ts ttp tm hwpstate cpb eff_freq_ro [13] [14]
因此,似乎有12个处理器,每个处理器有6个内核。
当我使用python parallel.futures模块时,我会这样设置工作人员计数。
import concurrent.futures
with concurrent.futures.ThreadPoolExecutor(max_workers=os.cpu_count()) as executor:
threadhandler = [executor.submit(model.predict,features) for features in feature_list]
prediction_array = [thread.result() for thread in threadhandler]
这真的是最有效的最大工作数,即每个处理器一个吗?后来的阅读给我的印象是整个过程都在处理器上运行,但是线程在处理器内的每个内核上运行。从python开发人员的抽象级别来看,这是真实的,还是接近真实的?那么如何为每个核心分配一个线程呢?
此外,model.predict方法(基于某些张量流模型)本身是否会产生多个子线程,从而形成一个层次结构?即使代码现在可以正常工作,我还是希望确认在tensorflow中使用的线程是否会在更高级别上与我的线程产生任何冲突。
最后,我对线程与进程的理解以及与内核和处理器之间的区别是否相同,还有一些空白。 (每个进程占用一个处理器,每个线程占用处理器内的一个内核吗?)。作为一名数据科学家,我没有OS或硬件级别机制的详细背景知识,并希望能获得任何参考/链接以适合于机器学习目的的一些高级抽象来阐明这一点!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。