我必须将一个巨大的文件拆分成许多较小的文件.每个目标文件由偏移量和长度定义为字节数.我正在使用以下代码:
private void copy(string srcFile, string dstFile, int offset, int length)
{
BinaryReader reader = new BinaryReader(File.OpenRead(srcFile));
reader.BaseStream.Seek(offset, SeekOrigin.Begin);
byte[] buffer = reader.ReadBytes(length);
BinaryWriter writer = new BinaryWriter(File.OpenWrite(dstFile));
writer.Write(buffer);
}
Run Code Online (Sandbox Code Playgroud)
考虑到我必须将此功能调用大约100,000次,因此速度非常慢.
我的书中有一个关于计算利用率的问题,但是我无法找到关于这个主题的任何实质性信息来解决它.
无论如何,这是问题:
从地球到遥远行星的距离约为9×10 ^ 10米.如果在64 Mbps点对点链路上使用停止等待协议进行帧传输,那么信道利用率是多少?假设帧大小为32KB,光速为3×10 ^ 8m/s.
假设使用滑动窗口协议.对于什么发送窗口大小,链接利用率是100%?您可以忽略发送方和接收方的协议处理时间.
transmission network-protocols utilization network-utilization
可能重复:
多线程Java应用程序是否会很好地利用多核机器?
我有一个简单而简单的Java线程在我的双核机器上运行(Windows XP 32位环境)
public static void main(String[] strs) {
long j = 0;
for(long i = 0; i<Long.MAX_VALUE; i++)
j++;
System.out.println(j);
}
Run Code Online (Sandbox Code Playgroud)
我的期望是它会坚持使用单个CPU来充分利用高速缓存(因为在循环中我们继续使用本地变量j运行,因此一个CPU工具将是100%而另一个将非常闲置.令人惊讶的是,在线程启动后,两个CPU的使用率都在40%~60%左右,而一个CPU的利用率略高于另一个CPU.
我的问题是,是否有任何操作系统负载均衡机制在检测到不平衡时启动?在我的情况下,Windows操作系统可能发现一个CPU几乎达到100%而另一个几乎处于空闲状态,因此它会定期将线程重新安排到另一个CPU?
#EDIT1 我发现了一个可能的解释:http: //siber.cankaya.edu.tr/ozdogan/OperatingSystems/ceng328/node130.html
嘿stackoverflow社区!
我遇到的问题是高度参与的算法程序正在使用TOO LITTLE cpu利用率:介于3%到4%之间.返回结果需要很长时间,而且我认为这还不够努力.
你们中的任何一个天才有任何想法为什么会发生这种情况 - 如果有什么我期望100%利用率.另外一个细节是该程序插入到sqlite3数据库中,因此,我相信通过sqlite3jdbc库有很多JNI调用.(请注意,我希望之前使用PreparedQuery批处理延迟这些插入,但这会导致严重的内存问题 - 这里有大量数据).
提前致谢
更新:已修复.是的,我只是一个doofus,但我没想到sqlite会启动一个新的事务并且做很多开销.
我现在使用PreparedStatement并在插入之前排队32768条目 - 对我来说似乎是一个足够好的数字.
我需要获取进程中所有线程的CPU利用率指标.
constraints =不允许在线程中编写其他代码
我知道你可以使用"top"命令,但还有其他方法吗?是否有"ps"的标志?
提前感谢您的帮助.
有没有办法在Windows Azure中做动态弹性?如果我的工作人员开始变得过载,或者队列开始变得太满,或者太多工作人员没有工作要做,有没有办法通过代码动态添加或删除工作人员,或者只是手动完成(需要人工干预)现在?有没有人知道任何计划添加,如果它目前不可用?
我正在尝试使用ubuntu上的CUDA nsight分析器为内存带宽利用率和GPU加速应用程序计算吞吐量利用率的两个整体度量.该应用程序在Tesla K20c GPU上运行.
我想要的两个测量值在某种程度上与此图中给出的值相当:
问题是这里没有给出确切的数字,更重要的是我不知道如何计算这些百分比.
内存带宽利用率
Profiler告诉我,我的GPU的最大全局内存带宽为208 GB/s.
这是指设备内存BW还是全局内存BW?它是全球性的,但第一个对我来说更有意义.
对于我的内核,分析器告诉我设备内存带宽是98.069 GB/s.
假设最大208 GB/s参考设备内存我可以简单地计算内存带宽利用率为90.069/208 = 43%?请注意,此内核多次执行,无需额外的CPU-GPU数据传输.因此系统BW并不重要.
计算吞吐量利用率
我不确定将Compute Throughput Utilization放入数字的最佳方法是什么.我最好的猜测是使用每循环指令到每循环最大指令比.剖析器告诉我最大IPC是7(见上图).
首先,这究竟意味着什么?每个多处理器有192个内核,因此最多有6个活动warp.这不意味着最大IPC应该是6?
分析器告诉我,我的内核已发出IPC = 1.144并执行IPC = 0.907.我应该计算计算利用率为1.144/7 = 16%或0.907/7 = 13%或者没有这些?
这两个测量(内存和计算利用率)是否给出了我的内核使用资源的效率的第一印象?还是应该包含其他重要指标?
附加图表
我想在一段时间内获得有关GPU(我的是NVIDIA Tesla K20,在Linux上运行)的整体利用率的信息."整体"我的意思是,计划运行多少流多处理器,以及计划运行多少GPU核心(我想如果核心正在运行,它将以全速/频率运行?).如果我可以通过触发器测量整体利用率也会很好.
当然在问这里之前,我已经搜索并调查了几个现有的工具/库,包括NVML(和建立在它之上的nvidia-smi),CUPTI(和nvprof),PAPI,TAU和Vampir.但是,似乎(但我还不确定)他们都没有能够提供所需的信息.例如,NVML可以按百分比报告"GPU利用率",但根据其文档/评论,此利用率是"在GPU上执行一个或多个内核的过去一秒的时间百分比",这显然不够准确.对于nvprof,它可以报告单个内核的触发器(具有非常高的开销),但我仍然不知道GPU的使用情况.
PAPI似乎能够获得指令计数,但它不能与其他浮点运算不同.我还没有尝试过其他两种工具(TAU和Vampir),但我怀疑他们能满足我的需求.
所以我想知道甚至可以获得GPU的整体利用率信息吗?如果没有,估计它的最佳选择是什么?我这样做的目的是为在GPU上运行的多个作业找到更好的计划.
我不确定我是否已经清楚地描述了我的问题,所以如果有什么我可以添加以便更好地描述,请告诉我.
非常感谢你!
所有
我有一个关于pthread_cond_wait()的问题.简而言之,我在一个进程中创建两个POSIX线程,如果我执行以下代码,为什么cpu利用率已满?
我对它进行实验,如果我在bool isNodeConnect3之前删除注释标记,程序似乎没有问题,CPU利用率几乎为0%,换句话说,theads将进入睡眠状态并且不花费CPU资源,这就是我的意思想.
这是一个数据识别问题吗?也许,但我不这么认为,因为我用"#pragma pack(push,1)... #pragma(pop)括起我的结构"你能给我一些建议吗?
环境主机操作系统是win7/intel 64位,客户操作系统是ubuntu 10.04LTS给客户操作系统提供"处理器核心数:4"以下是我的测试代码,你可以用
gcc -o program1 program1.c 构建和运行它- pthread && ./program1获取CPU利用率为25%.结果取决于您的设置.
非常感谢.
码
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <fcntl.h>
#include <string.h>
#include <pthread.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <errno.h>
#include <stdbool.h>
#pragma pack(push,1)
struct BUFF_TX{
pthread_mutex_t mutex_lock;
pthread_cond_t more;
};
struct AtreeNode{
struct BUFF_TX buff_tx;
bool isNodeConnect;
bool isNodeConnect1;
bool isNodeConnect2;
// bool isNodeConnect3; // important
pthread_t thrd_tx;
};
struct AtreeNode treeNode[2];
int tmp[2];
#pragma (pop)
void Thread_TX(int *nodeIdx) …
Run Code Online (Sandbox Code Playgroud) 我在Win10机器上有一个大型数据库,mysqld.exe会执行许多磁盘I / O(100%),并且持续数小时以100MB / s的速度持续写入-主要是写入-多次重启后仍然存在。我怎样才能知道它到底在做什么,并阻止它?我知道数据库目前未被使用,我想弄清楚该I / O来自何处并停止它。我在互联网上找到的唯一解决方案是常规配置建议,我不需要,我现在需要关闭此设备!
show processlist不显示任何内容。
更新:问题是在表上进行大量后台回滚操作。解决方案是:
1) kill mysqld.exe
2) add innodb_force_recovery=3 to my.ini
3) start mysqld.exe
4) export the table (96GB table resulted in about 40GB .sql file)
5) drop the table
6) kill mysqld.exe
7) set innodb_force_recovery=0 to my.ini
8) reboot and import the table back
Run Code Online (Sandbox Code Playgroud)
目前还没有关于数据完整性的想法,但是看起来还不错。
感谢米尔尼。
我的问题很简单 - 具有较少属性的 SQL 查询成本是否会较低?
示例:假设我们的users
表有 10 列,例如userId
, name
, phone
, email
, ...
SELECT name, phone FROM users WHERE userId='id'
Run Code Online (Sandbox Code Playgroud)
比这个便宜
SELECT * FROM users WHERE userId='id'
Run Code Online (Sandbox Code Playgroud)
从资源利用的角度来看是这样吗?
我们在生产中有一个 12 节点的 cassandra 集群。最近,几乎所有节点都在使用高于 85% 的磁盘空间。我们尝试为几个表添加 default_time_to_live、gc_grace_seconds。但似乎对记录数或磁盘空间没有影响。有执行 nodetool 压缩和清理的建议。但这也提到不建议在生产环境中运行。
一些具体问题,
ALTER TABLE my_keyspace.my_item WITH default_time_to_live=8640000
ALTER TABLE my_keyspace.my_item WITH gc_grace_seconds=10800
Run Code Online (Sandbox Code Playgroud)
请分享其他建议,以释放 Cassandra 使用的磁盘空间。
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns (effective) Host ID Rack
UN 10.1.x.x 997.26 GiB 256 24.7% erff8abf-16a1-4a72-b63e-5c4rg2c8d003 rack1
UN 10.2.x.x 1.22 TiB 256 26.1% a8auuj76-f635-450f-a2fd-7sdfg0ss713e rack1
UN 10.3.x.x 1.21 …
Run Code Online (Sandbox Code Playgroud)