- 主题:c++有没有空转(dry run)的办法?
不跟你抬杠,你觉得无所谓就无所谓吧
【 在 here080 的大作中提到: 】
: 怎么个有所谓法?计算误差有所谓,那岂不是整个算法都不合格?
:
--
FROM 73.170.143.*
我倒是希望编译器能给我自动生成这样一个配套的程序或者库,记录所有的malloc和dealloc,跳过所有的计算步骤,这样不仅能让我在正式计算前知道消耗多少内存,查泄露也方便多了
【 在 cybereagle 的大作中提到: 】
: 那是 make 自己实现的
: 只计算依赖关系不执行 target 下面的具体指令
: 你要是算法合适自己也能实现一个
: ...................
--
FROM 73.170.143.*
我说的计算设备指的是能执行汇编指令的东西,常见的就是CPU和GPU,但不常见的也有很多,包括自己烧的片子。换了台电脑,如果CPU还是一样的,结果当然也是一样的。但如果CPU的arch换了,或者intel改amd了,也很有可能不一样。至于GPU,从来就跟CPU不一样。
这没什么不好理解的,就是告诉你在产线上不同计算设备不能混用
【 在 here080 的大作中提到: 】
: 我不是抬杠,是你这基本问题没有描述清楚。
: 运行程序的机器换一台,或者网速变一变,或者月亮圆了,结果就不同。这就算了,这个不同还会造成无法接受的影响。
: 我是不理解你是个什么系统了。
: ...................
--
FROM 73.170.143.*
我说过了,只要计算设备不混用就没这个问题
【 在 here080 的大作中提到: 】
: 不管混不混用,你的结果随便就可以变化,逻辑上为什么这可以接受这个无法被接受的变化?
: 还是说结果是什么无所谓,但是你的程序内部必须结果有某种一致性?
:
--
FROM 73.170.143.*
不行啊,不把任务跑一遍没法知道到底new了多少内存。可如果new失败,正在设备上跑的任务也要crash
。
你说的确实有道理,耗费的内存不光是new的那些。不过这个好办,在new的总量上加点冗余就行了。
【 在 gluon521 的大作中提到: 】
: 不能加个计数器之类的东西实时统计吗,看着快满了就处理一下。
: 否则应用场景不同的话,也许你空转一遍的内存和真实场景的内存量也会不同。
:
--
FROM 73.170.143.*
放到一个优先队列里,一旦设备上有空闲了就先看看优先队列有没有能提交的,没有再去普通队列里看看
【 在 ad6623 的大作中提到: 】
: 好奇问一下,假设存在这样的空转机制,你来了一个新任务,先做空转,然后发现没有足够的内存,那你会怎么处理这个新任务?
--
FROM 73.170.143.*
1. 如果计算设备被多个进程使用,内存池怎么办?
2. 不像服务器内存,爆掉了还能写swap。计算设备没有swap,爆了就死给你看
【 在 z16166 的大作中提到: 】
: 服务程序没法确保内存不会爆掉吧,尤其是大数据量的,必须要处理内存不足的情况(预分配一个池子也是个办法),不处理的话只能是在服务程序的外部加watchdog。
: 内存不足是可以模拟的,直接让malloc/new失败就行,一般的allocator库或者profiler工具应该能模拟的,即使不能模拟,都是开源的,改改malloc就行了。
--
FROM 73.170.143.*
当然不行,16G的设备上不能跑15G的任务会被用户骂死的
【 在 solrex 的大作中提到: 】
: 为进程设置内存硬限不行吗?
: 发自「今日水木 on iPhone XR」
--
FROM 73.170.143.*
有道理。。。确实只能用在一些特殊情况。。
【 在 solrex 的大作中提到: 】
: 你的方法对c++来说是不现实的,因为程序内部的状态变化也依赖于分配的内存里数值的变化。比如你先new一个数组,然后根据这个数组计算的值再new另一个数组。如果你第一个数组只计数不alloc,程序就会出错,根本得不到你想要的结果。
: 发自「今日水木 on iPhone XR」
--
FROM 73.170.143.*