我写了一个小基准来比较Python,Ruby,JavaScript和C++的不同解释器/编译器的性能.正如预期的那样,事实证明(优化的)C++胜过脚本语言,但它所做的因素非常高.
结果是:
sven@jet:~/tmp/js$ time node bla.js # * JavaScript with node *
0
real 0m1.222s
user 0m1.190s
sys 0m0.015s
sven@jet:~/tmp/js$ time ruby foo.rb # * Ruby *
0
real 0m52.428s
user 0m52.395s
sys 0m0.028s
sven@jet:~/tmp/js$ time python blub.py # * Python with CPython *
0
real 1m16.480s
user 1m16.371s
sys 0m0.080s
sven@jet:~/tmp/js$ time pypy blub.py # * Python with PyPy *
0
real 0m4.707s
user 0m4.579s
sys 0m0.028s
sven@jet:~/tmp/js$ time ./cpp_non_optimized 1000 1000000 # * C++ with -O0 (gcc) * …Run Code Online (Sandbox Code Playgroud) 我正在修补Python set和frozenset集合类型.
最初,我认为这frozenset将提供更好的查找性能set,因为它是不可变的,因此可以利用存储项的结构.
但是,对于以下实验,情况似乎并非如此:
import random
import time
import sys
def main(n):
numbers = []
for _ in xrange(n):
numbers.append(random.randint(0, sys.maxint))
set_ = set(numbers)
frozenset_ = frozenset(set_)
start = time.time()
for number in numbers:
number in set_
set_duration = time.time() - start
start = time.time()
for number in numbers:
number in frozenset_
frozenset_duration = time.time() - start
print "set : %.3f" % set_duration
print "frozenset: %.3f" % frozenset_duration
if __name__ == "__main__":
n …Run Code Online (Sandbox Code Playgroud) 我想知道如何在R语言中进行赋值.
考虑以下R shell会话:
> x <- c(5, 6, 7)
> x[1] <- 10
> x
[1] 10 6 7
>
Run Code Online (Sandbox Code Playgroud)
我完全理解.创建向量(5,6,7)并将其绑定到符号"x".之后,'x'会反弹到新的向量(10,6,7),因为向量是不可变的数据结构.
但这里发生了什么:
> c(4, 5, 6)[1] <- 10
Error in c(4, 5, 6)[1] <- 10 :
target of assignment expands to non-language object
>
Run Code Online (Sandbox Code Playgroud)
或者在这里:
> f <- function() c(4, 5, 6)
> f()[1] <- 10
Error in f()[1] <- 10 : invalid (NULL) left side of assignment
>
Run Code Online (Sandbox Code Playgroud)
在我看来,只能为命名数据结构(如'x')赋值.
我问的原因是因为我试图实现R语言核心,我不确定如何处理这样的任务.
提前致谢
有没有办法测试R语言中两个对象是否相同?
为清楚起见:在identical函数意义上,我的意思并不相同,它根据某些属性(如数值或逻辑值等)比较对象.
我对对象标识非常感兴趣,例如可以使用isPython语言中的运算符进行测试.
是否可以动态更改Gnuplot脚本中的条形颜色?我有以下脚本
reset
fontsize = 12
set term postscript enhanced eps fontsize
set output "bargraph_speedup.eps"
set style fill solid 1.00 border 0
set style histogram
set style data histogram
set xtics rotate by -45
set grid ytics linestyle 1
set xlabel "Benchmarks" font "bold"
set ylabel "Relative execution time vs. reference implementation" font "bold"
set datafile separator ","
plot 'bm_speedup.dat' using 2:xtic(1) ti "Speedup" linecolor rgb "#00FF00"
Run Code Online (Sandbox Code Playgroud)
这会产生这个情节:

是否可以使零度以下的条形颜色变为红色?
谢谢,
斯文
是否可以在运行时更改R函数中形式参数的默认值?
我们假设,我们有这个功能
f <- function(x=1) {
...
}
Run Code Online (Sandbox Code Playgroud)
我可以以某种方式将x的默认值从1更改为2,例如2吗?
谢谢你,
斯文
我想得到基准测试的结果.我将两个虚拟机相互比较,并具有以下形式的数据:
BENCHMARK VM1_TIME VM1_ERROR VM2_TIME VM2_ERROR
我想从这些数据生成一个条形图,它应该如下所示:

有人可以提供代码如何做到这一点?我知道这种要求是不受欢迎的,但我真的需要这个并用谷歌搜索2小时,没有令人满意的结果.
谢谢你,
斯文
我对R的查找机制感到有点困惑.当我有以下代码
# create chain of empty environments
e1 <- new.env()
e2 <- new.env(parent=e1)
e3 <- new.env(parent=e2)
# set key/value pairs
e1[["x"]] <- 1
e2[["x"]] <- 2
Run Code Online (Sandbox Code Playgroud)
如果我在环境e3中寻找"x",那么我希望得到"2".如果我这样做的话
> get(x="x", envir=e3)
[1] 2
Run Code Online (Sandbox Code Playgroud)
但如果我使用,请不要
> e3[["x"]]
NULL
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下这个区别吗?看起来
e3[["x"]]
Run Code Online (Sandbox Code Playgroud)
不仅仅是语法糖
get(x="x", envir=e3)
Run Code Online (Sandbox Code Playgroud)
谢谢你,
斯文
我正在修改AVX-2指令,我正在寻找一种快速计算__m256i单词中前导零数(具有256位)的方法.
到目前为止,我已经找到了以下方法:
// Computes the number of leading zero bits.
// Here, avx_word is of type _m256i.
if (!_mm256_testz_si256(avx_word, avx_word)) {
uint64_t word = _mm256_extract_epi64(avx_word, 0);
if (word > 0)
return (__builtin_clzll(word));
word = _mm256_extract_epi64(avx_word, 1);
if (word > 0)
return (__builtin_clzll(word) + 64);
word = _mm256_extract_epi64(avx_word, 2);
if (word > 0)
return (__builtin_clzll(word) + 128);
word = _mm256_extract_epi64(avx_word, 3);
return (__builtin_clzll(word) + 192);
} else
return 256; // word is entirely zero
Run Code Online (Sandbox Code Playgroud)
但是,我发现在256位寄存器中找出确切的非零字是相当笨拙的.
有人知道是否有更优雅(或更快)的方法吗?
正如附加信息:我实际上想要计算由逻辑AND创建的任意长向量的第一个设置位的索引,并且我将标准64位操作的性能与SSE和AVX-2代码进行比较.这是我的整个测试代码:
#include <stdio.h> …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 Debian 9 下构建内核模块。我使用以下命令安装了必要的软件包
sudo apt-get install build-essential linux-headers-4.9.0-5-amd64
Run Code Online (Sandbox Code Playgroud)
但当我尝试编译我的模块时收到以下错误消息:
> make
make -C /lib/modules/4.9.0-5-amd64/build M=/home/sven/tmp/kernel modules
make[1]: Entering directory '/lib/modules/4.9.0-5-amd64/build'
make[1]: *** No rule to make target 'modules'. Stop.
make[1]: Leaving directory '/lib/modules/4.9.0-5-amd64/build'
Makefile:6: recipe for target 'all' failed
make: *** [all] Error 2
Run Code Online (Sandbox Code Playgroud)
问题好像是没有Makefile
/lib/modules/4.9.0-5-amd64/build
Run Code Online (Sandbox Code Playgroud)
目录。事实上,这个目录是空的......这可能是初学者的问题,但有人知道如何解决这个问题吗?下面列出了内核模块的源代码以及相应的 Makefile。
非常感谢您的帮助!
模块的 C 代码:
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Homer S.");
MODULE_DESCRIPTION("hmmmm ...");
MODULE_VERSION("1.0")
static int __init
start(void) {
printk(KERN_INFO "\nCHELLAS!\n\n");
return 0;
}
static void __exit
end(void) { …Run Code Online (Sandbox Code Playgroud)