rt , 从一顺序生成数字,直到一亿
1 trn4 2022-05-19 01:30:10 +08:00 读取预先在内存中生成好的一亿个数字。占用 400M*4Byte=400MB 内存。 |
![]() | 2 westoy 2022-05-19 01:41:16 +08:00 via Android mmap+seek+tell ? |
![]() | 3 yousabuk 2022-05-19 01:41:51 +08:00 via iPhone ![]() @xiadong1994 算得好,你咋算的? |
![]() | 4 yousabuk 2022-05-19 01:50:12 +08:00 via iPhone 分配 100M 个 U32 (内存:100M * 4Byte = 400MB ) 分成 10 个并行循环赋值各自的内存地址,应该挺快的。 |
![]() | 6 thedrwu 2022-05-19 03:38:15 +08:00 via Android ![]() 冷知识:普通 PC 单线程不到 10 分钟就能 print 出所有浮点数。 |
![]() | 7 Rocketer 2022-05-19 04:45:05 +08:00 via iPhone ![]() 你的场景是什么? |
![]() | 8 msg7086 2022-05-19 07:56:59 +08:00 via Android for 循环直接写,然后编译的时候打开 simd 矢量化优化和 unroll loop 优化。再上去的话搞个多线程。 |
9 deep89381 2022-05-19 08:48:54 +08:00 ![]() 是不是问题太简单了,不知有啥应有场景 seq 1 100000000 > seq.txt |
![]() | 10 whenov 2022-05-19 08:49:21 +08:00 via Android ![]() 什么叫生成?打印到屏幕?写入到硬盘?保存到内存? 如果允许惰性求值的话,时间接近 0 秒 |
11 luozic 2022-05-19 09:09:01 +08:00 这个数字是什么进制的? 需要输出到哪里? |
![]() | 12 AV1 2022-05-19 09:23:17 +08:00 一击脱离? |
![]() | 13 xuanbg 2022-05-19 09:27:19 +08:00 看你用什么存储了,如果是数组、链表、栈、位图这些有序的数据结构,那就压根不需要生成。用的时候根据数据结构直接就算出来了。 |
14 coolmenu 2022-05-19 11:34:28 +08:00 ![]() 刚看完房子那个帖子,看到这个标题,脑补成了如何快速弄到 1 亿,赶快点进一看看。。。。 |
![]() | 15 ipwx 2022-05-19 11:37:56 +08:00 ![]() time seq 1 100000000 > /dev/null seq 1 100000000 > /dev/null 15.53s user 0.02s system 99% cpu 15.553 total |
17 ispinfx 2022-05-19 12:27:59 +08:00 `list(range(100000000))` -> 2 秒 |
18 yfugibr 2022-05-19 12:38:59 +08:00 |
19 jaysonmac 2022-05-19 12:57:15 +08:00 via Android @yousabuk 100M 个 4Byte 不等于 400MB 哦,除非按 1000 进制算。按 1024 算大概 381.5MB |
21 Chaconne 2022-05-19 13:18:20 +08:00 crunch 0123456789 0 9 -o test.txt |
![]() | 22 BeautifulSoap 2022-05-19 13:19:09 +08:00 lz 简直是一击脱离的典范 也不说这一亿个数字是拿来干嘛的,如果只是放内存里需要的时候用一下,连计算都不需要计算,直接按照规律要的时候自动计算出指定位置的数就行了。这样连空间分配都不需要了 如果要存到文件的话,一亿个 64 位整数需要 763MB 来存储,瓶颈不会在 cpu 或内存上,而在你硬盘上 |
![]() | 23 jessun1990 2022-05-19 14:19:06 +08:00 time seq 1 100000000 > /dev/null ________________________________________________________ Executed in 612.18 millis fish external usr time 588.62 millis 125.00 micros 588.50 millis sys time 23.32 millis 50.00 micros 23.27 millis @ipwx 请问你用的是 mac 吗? 我的输出格式与你的不一样,我用的是 manjaro 。 |
![]() | 24 ipwx 2022-05-19 15:04:25 +08:00 @jessun1990 是 mac 。看起来 Linux 做了优化,>/dev/null 不用过系统调用。mac 实打实系统调用花了 17 秒 |
![]() | 25 suyuyu 2022-05-19 15:11:10 +08:00 我想看看阿 3 的想法 |
26 084 2022-05-19 15:45:55 +08:00 (base) ~/ time seq 1 100000000 > /dev/null seq 1 100000000 > /dev/null 19.66s user 0.06s system 99% cpu 19.807 total |
28 ipwx 2022-05-19 15:54:57 +08:00 @jessun1990 顺便我的 Linux Mint 主机: $ time seq 1 100000000 > /dev/null real 0m0.544s user 0m0.536s sys 0m0.008s |
![]() | 29 sunmker 2022-05-19 15:58:17 +08:00 ubuntu@VM-16-14-ubuntu:~$ time seq 1 100000000 > /dev/null real 0m0.860s user 0m0.812s sys 0m0.048s |
![]() | 30 dangyuluo 2022-05-19 16:08:25 +08:00 定义快速 |
![]() | 31 wangweiggsn 2022-05-19 17:22:25 +08:00 我来个 Excel 版本的吧,2007 及以上版本都 ok 。 左上角地址栏写 A:EA ,回车,这片区域被选中,编辑栏写公式:=ROW()+1048576*(COLUMN()-1) 然后按 ctrl+Enter ,我 i5-10210U+16G 内存配置,等 30 秒左右 OK ,1.37 亿个数据纵向整齐排列了。要横向的改下公式就行,很容易。需要的话保存文件为自己需要的格式即可。过程中电脑内存和 cpu 会基本占满,建议 公式-计算选项,选手动,否则算完后 CPU 占用率仍然较高。 |
![]() | 32 tramm 2022-05-19 17:38:17 +08:00 我也来一个: 申请 1 亿个长度的 char 数组. 其每个元素的内存地址就是你要的. |
![]() | 33 documentzhangx66 2022-05-20 08:17:46 +08:00 time seq 1 100000000 > x.log real 0m25.580s user 0m2.975s sys 0m4.955s |