我有一个python SubProcess调用,它运行一个可执行文件并将输出传递给我的子进程stdout.
在stdout数据相对较小(约2k行)的情况下,逐行读取和读取作为块(stdout.read())之间的性能是可比较的... stdout.read()稍快一些.
一旦数据变得更大(比如30k +行),逐行读取的性能就会明显提高.
这是我的比较脚本:
proc=subprocess.Popen(executable,stdout=subprocess.PIPE)
tic=time.clock()
for line in (iter(proc.stdout.readline,b'')):
tmp.append(line)
print("line by line = %.2f"%(time.clock()-tic))
proc=subprocess.Popen(executable,stdout=subprocess.PIPE)
tic=time.clock()
fullFile=proc.stdout.read()
print("slurped = %.2f"%(time.clock()-tic))
Run Code Online (Sandbox Code Playgroud)
这些是读取~96k行(或50mb磁盘存储器)的结果:
line by line = 5.48
slurped = 153.03
Run Code Online (Sandbox Code Playgroud)
我不清楚为什么性能差异如此极端.我的期望是read()版本应该比逐行存储结果更快.当然,在实际情况下我期望更快的逐行结果,其中在读取期间可以进行显着的每行处理.
任何人都可以让我深入了解read()性能成本吗?
我有一个从matlab 2012b生成的.mat文件.它包含一个带有用户定义的matlab类的变量.
在python 3.3中使用scipy.io.loadmat加载文件时,我得到以下内容:
mat=scipy.io.loadmat('D:\test.mat')
mat
{'__header__': b'MATLAB 5.0 MAT-file, Platform: PCWIN64, Created on: Fri Feb 22 15:26:28 2013', '__function_workspace__': array([[ 0, 1, 73, ..., 0, 0, 0]], dtype=uint8), '__globals__': [], '__version__': '1.0', 'None': MatlabOpaque([ (b'futureDS', b'MCOS', b'cStream', [[3707764736], [2], [1], [1], [1], [1]])],
dtype=[('s0', 'O'), ('s1', 'O'), ('s2', 'O'), ('arr', 'O')])}
Run Code Online (Sandbox Code Playgroud)
我希望访问类型为"cStream"的"futureDS"对象,但似乎无法使用mat ['None']这样做.调用mat ['None']简单导致:
MatlabOpaque([ (b'futureDS', b'MCOS', b'cStream', [[3707764736], [2], [1], [1], [1], [1]])],
dtype=[('s0', 'O'), ('s1', 'O'), ('s2', 'O'), ('arr', 'O')])
Run Code Online (Sandbox Code Playgroud)
我被困在这里.我是python的新手,并试图从matlab移植我的旧工作.任何帮助,将不胜感激.
谢谢.
我的程序的初始阶段将大量数据加载到STL容器中.我发现需要几分钟时间才能达到程序的真正含量.
经过一番搜索,我发现我可以在我的VS2012配置属性 - >调试 - >环境变量中设置_NO_DEBUG_HEAP == 1 ...关闭Windows调试堆的利用率.这使我的调试速度提高了10倍.我还没有找到任何描述我这样做失去了什么调试功能.
总结:使用Windows调试堆完成了哪些检查以及生成了哪些调试信息?
谢谢.
我不认为我是Cuda的完全新手,但显然我是.
我最近将我的cuda设备升级到1.3到2.1(Geforce GT 630).我还想完全升级到Cuda toolkit 5.0.
我可以编译一般的cuda内核,但是即使设置-arch = sm_20,printf也不能工作.
码:
#include <stdio.h>
#include <assert.h>
#include <cuda.h>
#include <cuda_runtime.h>
__global__ void test(){
printf("Hi Cuda World");
}
int main( int argc, char** argv )
{
test<<<1,1>>>();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译:
Error 2 error MSB3721: The command ""C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\bin\nvcc.exe" -gencode=arch=compute_10,code=\"sm_20,compute_10\" --use-local-env --cl-version 2010 -ccbin "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include" -I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include" -G --keep-dir "Debug" -maxrregcount=0 --machine 32 --compile -arch=sm_20 -g -D_MBCS …Run Code Online (Sandbox Code Playgroud) 我需要非常关注当前多线程项目中的速度/延迟.
缓存访问是我想要更好地理解的东西.而且我不清楚无锁队列(例如boost :: lockfree :: spsc_queue)如何在缓存级别访问/使用内存.
我已经看到了使用队列中需要操作的大对象的指针的队列.
如果消费者核心从队列中弹出一个元素,我认为这意味着元素(在这种情况下是一个指针)已经加载到消费者核心的L2和L1缓存中.但是要访问该元素,是否需要通过从L3缓存或互连中查找和加载元素(如果另一个线程位于不同的cpu套接字上)来访问指针本身?如果是这样,简单地发送可由消费者处理的对象副本可能更好吗?
谢谢.