V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  nlzy  ›  全部回复第 3 页 / 共 26 页
回复总数  504
1  2  3  4  5  6  7  8  9  10 ... 26  
2022-05-10 08:20:16 +08:00
回复了 void59468 创建的主题 C++ gcc 可变长度数组
-Werror=vla
2022-05-08 14:25:01 +08:00
回复了 chanlk 创建的主题 Java Java Happens-before 的疑问
@chanlk 上完整代码
2022-05-08 07:26:21 +08:00
回复了 chanlk 创建的主题 Java Java Happens-before 的疑问
直接给结论:如果语句 4 执行了,4 一定能保证读到 a 的值是 42 。A 和 B 线程的执行顺序不影响这个结论。

反对楼上说法的说法:“Happens Before 原则,只提到同一个线程内的连续上下文,并没有提跨方法、跨线程的问题。”

Java 8 语言规范 Threads and Locks 那一章对 Happens-before Order 的第一句介绍偏偏就是:“Two actions can be ordered by a happens-before relationship.”。而 action 一词在那章规范中就专指跨线程:“We will usually refer to inter-thread actions more succinctly as simply actions.”
2022-04-08 23:40:15 +08:00
回复了 dangyuluo 创建的主题 C++ CPU 指令重排是 cache 同步太慢的表征么?
“这种重排是不可能发生的”,“CPU 某个核心上的指令重排现象”。我认为此处“重排”楼主意指内存乱序。

“多核 CPU 也是可以对指令进行重排的”,“CPU 是可以把指令重排成如下顺序”。我认为此处“重排”楼主意指乱序执行。

仅仅是“重排”这一词的使用就出现了混乱,主楼的其他部分就更不值得细细推敲了。我以为此处的混乱,正是楼主感到迷惑的根源:即使没有乱序执行,store buffer 就足以导致写读乱序。即使指令集架构保证读读连贯,也不能说明微架构没有投机加载。这两个东西就是风马牛不相及。更何况内存顺序是指令集架构定义的,而乱序执行是微架构的具体特性,连抽象层面甚至都不是一个层级。把两个根本不相干的事物混淆在一起,不感到迷惑才奇怪呢!不仅迷惑了自己也迷惑了读者,所以也不怪楼下有老哥留下“一顿胡扯”,“看着头大”的暴躁回复。

一个混乱的问题真的很难去回答,建议楼主可以把自己帖子里的“重排”一词,换成指代更清晰的“编译器重排”、“乱序执行”或“内存乱序”后再重新提问。同时诚挚向楼主安利《 A Primer on Memory Consistency and Cache Coherence, Second Edition 》一书以正视听。
@LeeReamond 外层循环的运行次数肯定少于内层循环。这也是没考虑 sqrt() 对性能的影响的原因,它们的运行次数都远远少于那两个表达式。
看了眼源码,是用试除法计算素数。那汇编都不用细看了,只要编译器不作妖,程序的瓶颈肯定是 l <= t 和 if (c % l == 0) 这两句。和缓存、访存关系都不大了。

虽然有一个 if ,但是这个分支比较好预测:即使是静态预测,每个不同的 c 也只会预测失败一次,所以和分支也没什么关系。循环条件同理。

同一个 c 的每一轮试除,l 是循环变量,而 c 和 t 是不变的,所以上述良好的分支预测再加上投机执行,是可以掩盖掉他们的延迟的,所以程序的瓶颈大概就是 l <= t 和 c % l 这两句的吞吐了。前者是整型转浮点然后比较,后者是一个除法。

上网查资料,zen2 的 div 吞吐率倒数是 13-44 ,zen3 是 7-12 。而 cvtsi2sd 和 comisd 在 zen2 和 zen3 上都是 1 。瓶颈在前者,后者可以忽略掉,而前者在 zen2 和 zen3 的性能差距正好大约是三倍。(浮点和整数除法的执行单元应该不冲突吧)

这大概就是楼主想要的答案了。

至于 mov %rdx, %rax ,寄存器重命名阶段就已经处理掉了,不会是瓶颈。

(唉,我为什么要大半夜不睡觉去分析这种编译器优化都没开,代码也没有仔细写的程序呢)
2022-01-24 19:23:22 +08:00
回复了 amiwrong123 创建的主题 C++ c++函数返回临时变量和局部变量,有什么区别?
https://zh.cppreference.com/w/cpp/language/return

自动从局部变量和形参移动
这题也可以看成是 DFA 的典型例题,就像 #15 说的:“作业基本都是这种东西”。而 DFA 和正则表达式可以互相转换,所以构造出 DFA 再一步步转成正则就可以做出来了。

我做了做,得到了 ^(0(11)*0)*(1|01(11)*0)(0(11)*0)*((1|01(11)*0)(0(11)*0)*(1|01(11)*0)(0(11)*0)*)*$

最后的结果我自己也看不懂,这只是我机械地套用公式得到的,所以楼主没必要为看不懂这些正则而灰心丧气啦。
2021-09-03 00:29:42 +08:00
回复了 hutng 创建的主题 硬件 Intel 即将发布的大小核 CPU,各位怎么看
多核性能强单核性能也强的处理器谁不喜欢呢,我很看好大小核的前景
2021-08-11 16:54:20 +08:00
回复了 nlzy 创建的主题 求职 [深圳] 2022 届毕业生,求不 996 的 C++ 实习( Java / Node.js 亦可)
@hjiang
@7S5cVx
抱歉,不考虑其他城市
2021-05-06 14:38:07 +08:00
回复了 d0m2o08 创建的主题 Linux 各位吴彦祖,请问 debian 安装的时候必须设置一个普通用户么?
上网搜 "debian preseed",然后使用以下配置:
d-i passwd/root-login boolean true
d-i passwd/make-user boolean false
2021-05-03 12:46:20 +08:00
回复了 zhongpingjing 创建的主题 Java 假如 CPU 只有一个核心,使用 CAS 并发竞争的问题
。。。。。。这些都是计算机操作系统课程里的基本知识了

即使计算机只有一个 CPU 核心,操作系统也可以为进程提供同时运行的假象,这叫并发。背后的原理楼上提了,就是分时调度。

题外话:在编写并发程序的时候,即使 CPU 只有一个核心,也必须要施同步(如加锁)。
2021-04-09 10:11:32 +08:00
回复了 WangLiCha 创建的主题 问与答 现在从零开始学习 C/C++最合适的 IDE 是什么?
首先排除 CLion,因为被宇宙第一 IDE Visual Studio 全方位吊打:Visual Studio 起码不用手写 CMakeLists.txt ,使用更流畅,个人使用还免费。

其次排除 Dev-C++,功能太弱。及时的错误提示、智能的自动补全以及完善的调试器对初学者的帮助真的很大,而 Dev-C++ 做不到。

最后排除 Visual Studio Code,不能开箱即用是最大的缺点,环境出了问题初学者不会修,被麻烦的又会是楼主。

所以答案当然是 Visual Studio 啦,来和我念:宇 宙 第 一 I D E !

PS: 我最近要打很多算法题,也是那种不用写项目但是要写很多程序片段,和楼主的需求很接近。我日常使用 Linux 机,所以选择的是 Visual Studio Code ;赛场上没有这玩意,正式比赛的时候用 Visual Studio 。
2021-04-05 20:49:46 +08:00
回复了 lithium148 创建的主题 编程 数组里有百万个值,如何加快速度?
虽说图像处理一律建议使用现成的库,但是两百万个整数,每个元素仅仅是简单的加减,那这数据量一点都不多,运行时间几分钟肯定是代码写错了。别听楼上说的整什么多线程、SIMD 、GPU,我看还是先把代码写对吧。
2021-03-07 19:33:04 +08:00
回复了 xuegy 创建的主题 程序员 如何提升程序抢占内存带宽的能力?
打不过就加入,你也用 GPU 解矩阵
@nlzy #22 修正:C 也支持函数指针,也能算 first-class function,只是这玩意比起别的语言里的函数,它实在是太难用了。
> Javascript 的闭包特性是否来源于某种设计失误?或是某种设计领先?
这个特性来源于 Scheme,JavaScript 的设计很大程度上受到了 Scheme 的影响。这个特性是 JavaScript 这门狗屎语言里少数不多的“抄对了”的地方,这个特性再加上 JavaScript 对 first-class function 的支持,使得 JavaScript 有了不错的“函数式”编程能力,语言的表达力和灵活性都大大提高了。
但也不能说领先,因为它只是在照抄 Scheme,而 Scheme 是 1973 年的编程语言了。

> 其他语言中不都是如此设计的?
现代的支持 first-class function 的语言很多都是这样的。不支持 first-class function 的语言,比如 C,就不会这么设计。
《中国互联网络发展状况统计报告》里面有一项“手机网民规模”
加上 size 一点用没有。用一台普通的 PC 机在 **几分钟** 内就能生成两个 MD5 一样的文件,而且可以让这两个文件大小一样。

MD5 首次发现冲突都已经十几年了,为什么还要抱着他不放啊。为什么宁愿写各种业务代码,加什么文件大小,加什么时间戳,都不愿意改用一些没有找到冲突的哈希函数啊。

在现代的 64 位 CPU 上,SHA-512 真的很快,SHA-256 速度也没有慢到哪里去,这几个哈希函数性能都是在同一个数量级的,单核都是跑几百 MB/s,比机械硬盘或者 G 口网卡的吞吐量都大了。不要再说 MD5 省资源了。

不要再在新系统中使用 MD5 或者 SHA-1 了,求求你们。
1  2  3  4  5  6  7  8  9  10 ... 26  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4204 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 39ms · UTC 05:23 · PVG 13:23 · LAX 21:23 · JFK 00:23
Developed with CodeLauncher
♥ Do have faith in what you're doing.