c# 的线程可以指定运行在指定的cpu核心上吗
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# 的线程可以指定运行在指定的cpu核心上吗相关的知识,希望对你有一定的参考价值。
c# 的线程可以指定运行在指定的cpu核心上吗
比如双核的 我指定运行在第一个上面
如果需要这样的功能,需要编写非托管代码调用win32的API
可参考
http://hi.baidu.com/robinlxzh/blog/item/ba4fb57ec15c5d310dd7da25.html
android如何强制cpu核心离线(关闭核心)
【中文标题】android如何强制cpu核心离线(关闭核心)【英文标题】:android how to force cpu core offline(shut down cores) 【发布时间】:2013-11-26 15:46:36 【问题描述】:我使用的是四核智能手机。
我想知道如何强制三核或两核离线。因此,我可以在运行指定基准的不同频率级别测量不同活动核心数的性能。
我可以通过“用户空间调控器”管理核心频率。但是,我无法关闭核心。当我运行基准测试时,空闲的核心会被唤醒。
我已使用“adb shell”连接到手机。我也可以获得root访问权限。
有人可以帮忙解决这个问题吗?提前致谢。
【问题讨论】:
我不确定这是否可行。您可以将内核设置为非常低的频率,但我认为“关闭”它们会带来安全问题。 【参考方案1】:运行以下命令关闭cpu1、cpu2、cpu3。
adb root
adb shell stop mpdecision
adb shell
echo "0" > /sys/devices/system/cpu/cpu1/online
echo "0" > /sys/devices/system/cpu/cpu2/online
echo "0" > /sys/devices/system/cpu/cpu3/online
【讨论】:
这些命令并非一直有效。在线写入 0 后马上又变成 1。 如果 mpdecision 仍在运行,我可以想象会发生这种情况。 “mpdecision”是高通独有的 CPU 调度机制。【参考方案2】:我必须首先为 Galaxy-S7 设备禁用 hotplug,以防止 CPU 返回在线状态:
echo 0 > /sys/devices/system/cpu/cpuhotplug/enabled
在我的设备上,对该文件的每次写入访问都会导致 CPU 状态重置。因此,先检查现有值以免遇到麻烦:
if [[ 0 != $(cat /sys/devices/system/cpu/cpuhotplug/enabled) ]]; then
echo 0 > /sys/devices/system/cpu/cpuhotplug/enabled
fi
【讨论】:
【参考方案3】:您可以通过更改相应文件的权限来强制“在线”状态:
# Without stopping this service, the following approach will fail
# You can run it after. This will increase battery life. So, I suggest to run it.
stop mpdecision
# Make the file writable
chmod 664 /sys/devices/system/cpu/cpu0/online
# Make the core always offline
echo 0 > /sys/devices/system/cpu/cpu0/online
# Make the file read-only.
# Now "online" status will not be changed by external apps
chmod 444 /sys/devices/system/cpu/cpu0/online
# Run the service again
start mpdecision
您必须为每个 cpu 内核运行所有这些东西。 我建议创建一个 bash 脚本,如下所示:
...
set_core_offline ()
local core=$1
chmod 664 /sys/devices/system/cpu/cpu$core/online
echo 0 > /sys/devices/system/cpu/cpu$core/online
chmod 444 /sys/devices/system/cpu/cpu$core/online
# Works for 4-core CPUs
set_cores_offline ()
set_core_offline 0
set_core_offline 1
set_core_offline 2
set_core_offline 3
...
当然,这个解决方案并不完美。再看一遍,代码sn-p:
echo 0 > /sys/devices/system/cpu/cpu0/online
chmod 444 /sys/devices/system/cpu/cpu0/online
这是两个独立的命令。执行第一个后,外部应用程序可能会再次将“在线”状态更改为“1”。之后,第二个命令将将此状态修复为不可更改。因此,最清晰的解决方案是将这 2 个命令包装成一个循环并检查状态,直到我们得到所需的结果。
【讨论】:
以上是关于c# 的线程可以指定运行在指定的cpu核心上吗的主要内容,如果未能解决你的问题,请参考以下文章