Articles of Linux操作系统

Memcpy与memset相同

我想用memcpy来测量内存带宽。 我从这个答案修改了代码: 为什么vector化循环没有使用memset来衡量带宽的性能改进 。 问题是memcpy只比memset稍慢,因为我认为memcpy运行速度是内存两倍以上的两倍。 更具体地说,我运行了超过1 GB的数组a和b (分配将calloc )100次,执行以下操作。 operation time(s) —————————– memset(a,0xff,LEN) 3.7 memcpy(a,b,LEN) 3.9 a[j] += b[j] 9.4 memcpy(a,b,LEN) 3.8 请注意, memcpy只比memset慢一点。 a[j] += b[j] (其中j越过[0,LEN) )的操作应该比memcpy长三倍,因为它操作的数据量是三倍。 但是它只有memset 2.5左右。 然后我用memset(b,0,LEN)将b初始化为零并再次testing: operation time(s) —————————– memcpy(a,b,LEN) 8.2 a[j] += b[j] 11.5 现在我们看到, memcpy大约是memset两倍, a[j] += b[j]大约是memset三倍。 至less我会预期,在memset(b,0,LEN) , memcpy会比较慢,因为 100次迭代中的第一次迭代的延迟分配(第一次触发) 。 为什么我只能在memset(b,0,LEN)之后得到预期的时间? test.c的 #include <time.h> […]

Coqide 8.5:在Linux上没有语法突出显示

我安装了Coqide 8.5 w / nix 。 不幸的是,在所有的面板上的文字是blakc; 没有任何types的语法高亮(否则,8.5似乎是8.4以上的重大改进,我也已经安装了这个function)。 我也得到以下几点: (coqide:17272): GtkSourceView-WARNING **: Unknown parent scheme 'classic' in scheme 'coq_style' (coqide:17272): GtkSourceView-WARNING **: Failed to load '/nix/store/2sxcqfc4q3ls4g2q13n1zwfhnydvgq-coq-8.5pl1/share/coq/coq.lang': could not find the RelaxNG schema file cat ~/.nix-profile/share/coq/coq_style.xml : <?xml version="1.0" encoding="UTF-8"?> <style-scheme id="coq_style" _name="Coq highlighting based on Ssr manual" parent-scheme="classic" version="1.0"> <author>The Coq Dev Team</author> <_description>Coq/Ssreflect color […]

如何获得IPv6主机的范围?

我对IPv6协议没有多less了解,所以如果这个问题听起来很愚蠢,那么很抱歉。 当我检索我的networking中的所有IPv6地址列表时,我会得到一个名为scope的字段,如下所示: inet6 addr: 2001:470:1:82::11/64 Scope:Global inet6 addr: 2001:470:1:82::10/64 Scope:Global inet6 addr: 2001:470:1:82::13/64 Scope:Global inet6 addr: fe80::21d:9ff:fe69:2c50/64 Scope:Link inet6 addr: 2001:470:1:82::12/64 Scope:Global inet6 addr: 2001:470:1:82::15/64 Scope:Global inet6 addr: 2001:470:1:82::14/64 Scope:Global inet6 addr: 2001:470:1:82::5/64 Scope:Global inet6 addr: 2001:470:1:82::17/64 Scope:Global inet6 addr: 2001:470:1:82::6/64 Scope:Global inet6 addr: 2001:470:1:82::16/64 Scope:Global inet6 addr: 2001:470:1:82::7/64 Scope:Global inet6 addr: 2001:470:1:82::19/64 Scope:Global inet6 […]

在bash shell脚本中启动dynamicvariables(variablesvariables)

我通过bash shell使用PHP CLI。 请检查在shell脚本中操作数组(由php-cli打印)以获取详细信息。 在下面的shell代码中,我能够回显我从PHP脚本获得的key对。 IFS=":" # parse php script output by read command php $PWD'/test.php' | while read -r key val; do echo $key":"$val done 以下是这个的输出 – BASE_PATH:/path/to/project/root db_host:localhost db_name:database db_user:root db_pass:root 现在我只想在while循环中启动dynamicvariables,这样我可以像$BASE_PATH那样使用它们,其值为'/path/to/project/root' , $db_host 'localhost' 我来自PHP的背景。 我想要的东西像$$key = $val的PHP

在bash中parsingCSV并分配variables

我有一个csv的格式(在Linux上工作Bash) DN , MAC , Partition , 123 , abc , xyz 321 , asd , asd 我可以使用awkparsing它 eval MAC=($(awk -F "," '{print $1}' random.csv)) 这是为CSV中的每一列完成的,因此我可以单独调用DN[2] , MAC[2]等,这些是手动的,并且可以单独parsing它们。 但是,我怎么可以逐行parsingCSV? 例如:如果我要求DN是123 ,则还应该返回相应的MAC和Partition 。

xlib是否有一个活动的窗口事件?

我正在尝试编写一个程序来跟踪活动窗口使用Xlib时的变化。 我很难找出最好的方法来做到这一点。 这些是我的想法到目前为止: 每秒钟使用_NET_ACTIVE_WINDOW来获取活动窗口,如果它已经改变,然后运行事件的相关代码。 获取所有窗口的列表,并听取他们的重点事件。 我将不得不弄清楚如何保持最新的打开窗口列表。 他们是一个更简单/更好的方法? 我是用Xlib编程的新手。

为什么读取文件再读取速度更快?

SIZE = 1<<16 def justread(file): with open(file, 'rb') as f: while f.read(SIZE): pass 我第一次在一个700MB的文件上运行这个function需要19秒。 当我重复 再次读取相同的文件所花费的时间下降到0.5secs。 我用很多文件重复了这一点,结果是相似的。 这里发生了什么?

在Linux上编译一个基本的OpenCV + Cuda程序

我曾经在linux上使用过opencv,但是没有使用cuda。 我已经努力了几个月的以下编译错误。 在尝试了许多解决scheme后,我放弃了使用windows。 不过,我真的想在Linux上工作。 这是我用来编译opencv_gpu网站上给出的阈值示例的命令。 nvcc `pkg-config –libs opencv` -L. -L/usr/local/cuda/lib -lcuda -lcudart `pkg-config –cflags opencv` -I. -I/usr/local/cuda/include threshold.cpp -o threshold 这里是错误的: /tmp/tmpxft_0000171b_00000000-1_threshold.o: In function `main': threshold.cpp:(.text+0x124): undefined reference to `cv::gpu::Stream::Null()' threshold.cpp:(.text+0x156): undefined reference to `cv::gpu::threshold(cv::gpu::GpuMat const&, cv::gpu::GpuMat&, double, double, int, cv::gpu::Stream&)' threshold.cpp:(.text+0x16d): undefined reference to `cv::gpu::GpuMat::download(cv::Mat&) const' /tmp/tmpxft_0000171b_00000000-1_threshold.o: In function `cv::gpu::GpuMat::GpuMat(cv::Mat const&)': threshold.cpp:(.text._ZN2cv3gpu6GpuMatC1ERKNS_3MatE[cv::gpu::GpuMat::GpuMat(cv::Mat const&)]+0x63): […]

将dateredirectstderr以从Cronlogging文件

一个bash脚本从cron运行,stderr被redirect到一个日志文件,这一切工作正常。 代码是: */10 5-22 * * * /opt/scripts/sql_fetch 2>> /opt/scripts/logfile.txt 我想在日志文件的每一行添加date,这是行不通的, 代码是: */10 5-22 * * * /opt/scripts/sql_fetch 2>> ( /opt/scripts/predate.sh >> /opt/scripts/logfile.txt ) predate.sh脚本如下所示: #!/bin/bash while read line ; do echo "$(date): ${line}" done 所以第二个代码不起作用,有人可以点亮一下吗? 谢谢。

OpenSuse – RubyGems安装 – 错误的文件名称

我有一个全新的安装OpenSuse 13.1安装。 ruby -v – > ruby 2.0.0p247 (2013-06-27) [x86_64-linux] gem -v – > 2.3.0 运行gem env输出如下: EXECUTABLE DIRECTORY : /usr/bin 。 这也是我的$PATH 。 我尝试按照安装指南中的描述安装sass和compass : sudo gem install sass sudo gem install compass (我需要使用sudo因为它没有工作) 唯一的问题:既不运行sass命令也不运行compass 。 过了一会儿,我发现我不得不使用sass2.0和compass2.0来运行它们。 /usr/bin中的ruby脚本在文件名末尾用2.0命名。 为什么最后用2.0命名的ruby脚本? 我怎样才能防止这个? 我想在terminal使用compass和sass 。 我没有得到任何使用谷歌的结果。