也许是个愚蠢的问题,但不知何故,我的印象是多核意味着防病毒扫描程序能够通过将多个文件分配到不同的核来同时处理多个文件。
事实证明我错了。尝试同时扫描两个不同的文件夹会显示一条消息,表明扫描仪已被占用。所以我很好奇(+:
在真正的双处理器板上,我的病毒扫描程序是否能够同时扫描多个文件,或者这只是扫描程序的设计怪癖?
Mathematica 8 中的许多命令(Integrate、Simplify等)似乎只在我的系统上使用单个内核。有什么方法可以改变亲和力,以便它利用所有核心进行计算?
我有一台 4 核 i7 计算机,它死机了。显示保持不变,但不会再移动。这个问题不是关于获得特定问题的帮助,而是关于计算机如何冻结的一般问题。
它也不是关于蓝屏。我说的是系统突然完全停止。虽然永远无法确定,但这里是我所说的完全冻结的意思:
回到过去,如果遇到意外情况,您的单核 CPU 可能会停止。也许是未知的操作码。计算机会突然冻结。如果你有一个 ICE 调试器连接到它,你可以看到导致 CPU 冻结的跟踪。我在 Z80、6800 和 8086 CPU 上(也)经常看到这种情况。
有多个核心,为什么计算机不能在剩余的核心上运行,如果只是写一个核心转储?换句话说,多核计算机上还有哪些其他单点故障?
如果我有一个系统,假设启用了两个四核 CPU 和超线程,我怎么知道物理和虚拟内核是如何排序的?例如,如果我强制一个进程在“CPU 0”上运行,如何知道这到底是哪个核心?我记得关于这个的复杂绘图,但没有发现任何有用的东西。
更新:在与程序员讨论后,我确信将程序/线程绑定到特定核心是没有意义的。在大多数情况下,最好让操作系统决定使用哪个内核。然而,枚举的工作方式仍然很有趣。
我正在寻找一种在 Linux 中动态禁用内核的机制,以最大限度地减少功耗。
不幸的是,根据Watts Up?的读数,使用以下简单方法禁用内核实际上会增加功率。Pro测量系统总功率:
echo 0 > /sys/devices/system/cpu/cpu7/online
Run Code Online (Sandbox Code Playgroud)
我的经验似乎得到了其他人的证实(尽管这个错误已被标记为“CLOSED PATCH_ALREADY_AVAILABLE”): https://bugzilla.kernel.org/show_bug.cgi ?id=5471
由于机器已卸载,我希望除了一个核心之外的所有核心(或者可能是两个“核心”,因为 CPU 是超线程的)都处于尽可能深度的睡眠状态。根据 acpitool 的输出,这似乎不会单独发生:
Processor ID : 7
Bus mastering control : no
Power management : yes
Throttling control : no
Limit interface : no
Active C-state : C0
C-states (incl. C0) : 3
Usage of state C1 : 899 (99.3 %)
Usage of state C2 : 6 (0.7 %)
Run Code Online (Sandbox Code Playgroud)
顺便说一句,令我困惑的一点是 acpitool 和 /proc/acpi 似乎对可用的 C 状态不一致,或者它们可能使用不同的命名方案。
$ cat /proc/acpi/processor/CPU7/power
active state: C0 …Run Code Online (Sandbox Code Playgroud) 如果我想使用只能使用一个内核的命令“do_something”处理大量文件,假设每个文件都可以独立处理,那么使用所有可用内核的最佳方法是什么?
此刻我做这样的事情:
#!/bin/zsh
TASK_LIMIT=8
TASKS=0
for i in *(.)
{
do_something "$i"&
TASKS=$(($TASKS+1))
if [[ $TASKS -ge $TASK_LIMIT ]]; then
wait; TASKS=0; fi
}
wait
Run Code Online (Sandbox Code Playgroud)
显然,这效率不高,因为在达到 $TASK_LIMIT 后,它会等待所有“do_something”完成。例如,在我的真实脚本中,我使用了大约 500% 的 8 核 CPU,而不是 >700%。
不使用 $TASK_LIMIT 运行不是一种选择,因为“do_something”可能会消耗大量内存。
理想情况下,脚本应该尝试将并行任务的数量保持在 $TASK_LIMIT:例如,如果 8 个任务中的第 1 个完成并且至少还有一个文件要处理,则脚本应该在下一个“do_something”运行而不是等待剩余的 7 个任务完成。有没有办法在 zsh 或 bash 中实现这一点?
我听说一个处理器一次只能运行一个进程。这是真的?如果是这样,那么单个进程如何同时在多个处理器中执行呢?这可能吗?
提前致谢!
我知道,模糊的问题标题,但我的主要问题是,1 个核心一次只能执行一个程序吗?CPU 级别的“多任务处理”是否通过在任务之间切换来工作,如果是,为什么?为什么 CPU 不能同时处理多个任务?他们有数十亿个晶体管,为什么有些晶体管不能解决一个问题,而另一些则不能解决另一个问题?是硬件限制,还是操作系统限制?
我知道有人问过类似的问题,但我认为我的情况有点不同。
假设我有一台带有 Linux 操作系统的 8 核和无限内存的计算机。
我有一个名为 Gaussian 的计算软件,它可以利用多线程。因此,我将其线程数设置为 8,以便进行最大速度的单次计算。但是,当我需要同时运行 8 个计算时,我真的无法决定该怎么做。在这种情况下,我应该将每个作业的线程数设置为 1(在 8 个进程中产生的总共 8 个线程)还是保持为 8(在 8 个进程中产生的总共 64 个线程)?真的很重要吗?一个相关的问题是操作系统是否会自动为每个线程执行不同内核的内核停放?
编辑:我知道基准测试是最好的了解方式。问题是,电脑是我大学的,所以他们一直很忙。换句话说,它的工作量对我来说以一种无法控制的方式变化,因为其他人也在使用这些计算机进行计算,因此无法进行实验。此外,该软件非常昂贵(1500 美元左右)并且每台计算机都获得许可,因此我不能简单地在我的个人计算机上运行基准测试...
我有一台配备 AMD EPYC 7401P 24 核/48 线程 CPU、128GB DDR4 RAM 和 Intel P4800x PCIe NVMe 的高端 HPE ProLiant DL325 G10 服务器。我尝试运行 ffmpeg 将视频 (MKV) 转换为 MP4 以进行在线流式传输,但它并未利用所有 24 个内核。在编码过程中,根据top. 下面是顶部输出的示例。
我在 stackexchange 网站上读过类似的问题,但都没有得到答复,而且都已经 6-8 岁了。我尝试-threads在-i选项 0、24、48 和其他各种选项之前和之后添加参数,但它似乎忽略了此输入。我也没有缩放视频。
我也在 H.264 中编码。下面是我使用过的一些命令。我无法弄清楚我做错了什么或瓶颈到底是什么。
有什么建议我可以怎么做吗?
使用的命令:
ffmpeg -threads 24 -i input.mkv -c:v libx264 -preset medium -c:a copy -vf subtitles=input.mkv output.mp4
Run Code Online (Sandbox Code Playgroud)
我也使用-sws_flags fast_bilinear&-x264-params sliced-threads=1但两者都没有太大变化。我确实注意到-tune zerolatency某些内核的 CPU 使用率略有增加,但总体 CPU 使用率低于 15%。
顶部输出:
top - …Run Code Online (Sandbox Code Playgroud) multi-core ×10
cpu ×3
linux ×2
process ×2
anti-virus ×1
bash ×1
ffmpeg ×1
freeze ×1
mathematica ×1
scheduling ×1
shell-script ×1
threads ×1
ubuntu ×1
zsh ×1