[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本帖最后由 523066680 于 2019-3-21 19:28 编辑
  1. use Time::HiRes qw/time/;
  2. STDOUT->autoflush(1);
  3. my $ta = time();
  4. my @upper = ('A'..'Z');
  5. my @eles = ('a'..'z', 'A'..'Z', '0'..'9');
  6. my $e_len = scalar(@eles);
  7. my $key;
  8. for my $i (1..1000000)
  9. {
  10.    $key = $upper[rand(26)] . join("", map { $eles[rand($e_len)] } (1..6) ) ;
  11.    printf "%s\n", $key;
  12. }
  13. printf STDERR "time usage %.2f", time()-$ta;
复制代码
genCode.pl >F:/temp/a.txt
输出到机械硬盘,100W个,4秒

join "", map {} () 改成末尾append形式,100W个,3秒
  1. for my $i (1..1000000)
  2. {
  3.    $key = $upper[rand(26)];
  4.    grep { $key .= $eles[rand($e_len)] } (1..6);
  5.    printf "%s\n", $key;
  6. }
复制代码
CPU 频率 4GHz
1

评分人数

    • xczxczxcz: 历害,我的写法还要改进,多线程1000000个要 ...技术 + 1

TOP

回复 3# xczxczxcz
我们的代码实质是差不多的,是解释器的优化不同。

回复 4# 老刘1号
如果解释器有对这类操作优化,内部实现对应的功能模型,执行速度就会接近编译型语言。
举个例子,CLGO 绘图,
基于CLGO的COOL解释器
对于图形程序,如果大部分指令调用都在解释层挨个执行,不要说GPU,CPU也是无法充分利用的。
OpenGL是怎么实现快速渲染的呢?DrawArrayElemensts 函数,我告诉GPU,我要三角形,把包含数十万个三角形坐标的数组指针传递过去,
然后把转换平移等通用的操作通过矩阵数组传递,GPU就会并行处理这些三角形的光栅化操作(空间变换、投影、深度测试、像素化、抗锯齿等),每秒是数十甚至上百帧。
如果每一个三角形都调用一次而不是传指针,CPU是吃不消的。所以那个帖子我记得有个作品的动图,画的圈并不多(不过万),但却是卡顿的。

如果要对这些批次的三角形做特殊效果,水墨描边、素描风格等,可以使用着色语言(Shader Language),一套直接和GPU核打交道的指令。
这也是行业发展的结果,硬件厂商知道你会大量执行这些操作,所以直接提供更合适的接口。

当时我也没什么建议,这里面解释器的学问太多了,我不懂。另外全套操作下来会感觉,还是用现成的吧,连硬件厂家都帮你考虑好了。

说完掏出硬件属性看了一下,看来还得学,不然挂着这个显卡太浪费
5

评分人数

TOP

一个段子,
用Java的人都戴墨镜。

因为……
They can't see sharp.

TOP

返回列表