rt , 从一顺序生成数字,直到一亿
1
xiadong1994 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 1
@xiadong1994 算得好,你咋算的?
|
4
yousabuk 2022-05-19 01:50:12 +08:00 via iPhone
分配 100M 个 U32 (内存:100M * 4Byte = 400MB )
分成 10 个并行循环赋值各自的内存地址,应该挺快的。 |
5
xiadong1994 2022-05-19 02:08:31 +08:00
@yousabuk #3 For 循环写一个呀。哈哈其实我的意思是这个提问没头没尾的,要快一律按可以预处理理解。
|
6
thedrwu 2022-05-19 03:38:15 +08:00 via Android 1
冷知识:普通 PC 单线程不到 10 分钟就能 print 出所有浮点数。
|
7
Rocketer 2022-05-19 04:45:05 +08:00 via iPhone 1
你的场景是什么?
|
8
msg7086 2022-05-19 07:56:59 +08:00 via Android
for 循环直接写,然后编译的时候打开 simd 矢量化优化和 unroll loop 优化。再上去的话搞个多线程。
|
9
zhuifeng1017 2022-05-19 08:48:54 +08:00 5
是不是问题太简单了,不知有啥应有场景
seq 1 100000000 > seq.txt |
10
whenov 2022-05-19 08:49:21 +08:00 via Android 2
什么叫生成?打印到屏幕?写入到硬盘?保存到内存?
如果允许惰性求值的话,时间接近 0 秒 |
11
luozic 2022-05-19 09:09:01 +08:00
这个数字是什么进制的? 需要输出到哪里?
|
12
DOLLOR 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
刚看完房子那个帖子,看到这个标题,脑补成了如何快速弄到 1 亿,赶快点进一看看。。。。
|
15
ipwx 2022-05-19 11:37:56 +08:00 1
❯ 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 |