我有一个程序(嗯,PHP脚本),它做了一些非常沉重的文本search – 它加载了一个2MB和40MB的文件,并通过searchfind每个单词出现在第一个出现在第二个。
我有一个4核心的CPU(个人电脑)。 当我启动进程运行时,cpu使用率跳转到25%,加载为1.我开始在一个单独的文件上再次运行进程,CPU使用率降低到50%,负载降低到2。这是否会降低单个进程的效率? 即。 使每个人花费更长的时间完成比分开运行? 如果我运行了4个进程,把CPU使用率提高到100%呢? 他们会跑慢吗?
我假设并行运行这两个进程的速度要比连续运行这两个进程的速度快,这是正确的吗? 如果我跑了两个以上,比如说三四,那还会是真的吗? 或者更多? 这里的瓶颈在哪里 – 我假设只要我保持进程的数量等于或less于内核的数量,那么CPU就可以处理它,但内存访问呢? 读取内存时,进程是否需要等待?
简短的回答:基准。
长答案:每个单独的进程将花费更长的时间来完成(由于频率缩放),但总体上最有效的做法是将每个内核加载到100%。
这取决于很多事情,并行运行会提高性能或降低性能。 喜欢:
所以,这是一个案例情况。 但是就你而言,我相当肯定,如果你平行运行,你的performance只会提高,而且我看不到一个可能会降低效率的情景,除非我错过了一些观点,想想。
这听起来像你没有太多的I / O等待,在硬盘驱动器或networking上。 假设你有GB的RAM,42MB的文件应该很容易地加载到RAM中。 在这一点上,四个并行的过程应该给你最好的结果。 当正常的操作系统进程需要运行时,你会看到小的上下文切换。
在NUMA系统上,每个核心都有一个分配的内存池。 当内核将进程迁移到不同的内核时,性能会降低,因为这些文件仍然在原始内核的内存池中。 老实说,我不确定这适用于个人电脑。
一般 – 是的。 暂时忽略编码部分。
现代多核处理器有一个升压模式,如果只使用less量的核心,将提升一点频率。 因此,使用全部核心使得个体核心更小。 细节取决于处理器。
这样说:总体还是会更高,因为个别增长通常非常小(几百Mhz)相比,获得另一个核心。 因此,你真的更好使用所有的coers。 这种提升主要是针对那些不能很好扩展并且需要较高的每核心频率的情况 – 包括单线程游戏;)
问你关于内存访问的问题。 我希望你已经意识到,现代服务器的内存访问速度超过DRAM每秒50GB(即GB) – 更多来自高速caching。 所以,你打这个不行。 IO可能是一个问题,但是这将是可见的CPU不会超出和IO等待状态上升。 caching在这里帮助很大。