V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  justou  ›  全部回复第 1 页 / 共 12 页
回复总数  236
1  2  3  4  5  6  7  8  9  10 ... 12  
191 天前
回复了 justou 创建的主题 C++ C++libtorch 多线程多 GPU 推理问题
经过一些测试和查找资料,发现单个进程内,cuda 似乎无法充分利用多显卡,可能是单个进程 cuda 能利用的数据带宽有限,得一个进程一个模型对应一个显卡。

例如有 4 个显卡,主进程启动 4 个子进程,每个子进程一个推理模型,主进程源源不断地将数据一个一个 batch 的送到进程共享队列,每个推理子进程一边从队列获取数据缓存一边推理一边将结果发送回主线程汇总,这些都异步进行,主要目的是让各个显卡尽量不要空闲,以此将利用率最大化。

最开始尝试将大量输入数据均摊到各个子进程,然后等他们完成,再获取结果,发现这种方式显卡利用率不高,主要是有些进程很快完成推理,有些进程则很慢,这种方式永远是在等最慢的那个进程,而其它进程早就空闲下来了。这种方式得到的 fps 跟单个进程多个线程的差不多,而通过上面这种流水线处理方式,fps 按显卡个数倍增。
274 天前
回复了 iqoo 创建的主题 程序员 C++ 类析构是按先进后出的顺序吗?
必须是那样, 利用 RAII 方式来保证一些动作得到执行
void func(){
auto socks_guard = wear_socks_guard(); // 构造时穿上袜子, 析构时脱掉袜子
auto shoes_guard = wear_shoes_guard(); // 构造时穿上鞋, 析构时脱掉鞋

// ....

// 先脱鞋
// 再脱袜子
}
295 天前
回复了 yoyoluck 创建的主题 Python pybind11 链接 py 库版本的问题
windows 下有个 embed 版本的 python, 比如 https://www.python.org/ftp/python/3.10.11/python-3.10.11-embed-amd64.zip 可以把它看成一个绿色版 python(可以用 pip 在这个环境中安装管理第三方库), 相当于把 python 当成动态链接库来用, 可以随你的程序一起发布
排队凑个热闹, 感谢 lz 的翻译工作
2023-03-29 16:36:07 +08:00
回复了 dunhanson 创建的主题 程序员 Typora 怎么像 VS Code 那样多标签显示?
@oneKnow 发现 Obsidian 支持 vim ,准备弃 Typora 了...
2023-02-18 13:31:16 +08:00
回复了 Baboonowen 创建的主题 Python 发现一个用 Rust 重写的 Pandas 的替代品,支持 Python
@mepwang 让我想起了我的入门语言 Fortran ,数组在内存中列连续。出了学校再也没用过了,现在语言内置的并行计算功能越来越完善了
https://coarrays.sourceforge.io/doc.html
https://github.com/tkoenig1/coarray-tutorial/blob/main/tutorial.md
2023-01-15 13:26:38 +08:00
回复了 justou 创建的主题 程序员 关于 ZeroMQ 的若干问题
@xgdgsc 感谢提供这个新思路.

@xsen 的确以前没怎么接触网络编程, 所以了解到 zmq 后才一拍脑门: 这东西不仅可以让软件解耦成更加容易开发和维护的独立模块, 还直接导致硬件也跟着解耦了, 比如给一批老旧的硬件系统新增加速卡(GPU/TPU)计算服务, 不用去动原有的硬件结构, 甚至可能无法动, 只需要一根网线牵出来连到新买的加速卡服务器上, 旧系统上原有的软件也不需要太多的更改, 只需要调用新开发的接口程序, 把数据发送到加速卡上计算就行了.
2023-01-15 09:09:01 +08:00
回复了 justou 创建的主题 程序员 关于 ZeroMQ 的若干问题
@ysc3839 是的, 就是一个 C ABI 的 DLL 将整个 python 虚拟机隐藏在下面, 这样上层应用不论是 C++ C#还是其它什么实现都能用了. Cython 主要在 cdef public 的函数中对 C++传过来的指针进行数据转换然后再直接调用 python 函数. 既然已经到 C ABI 层次了, 可能 pybind11 与 Cython 区别不大了, 主要是我对 Cython 熟悉一点, 其实开发中最麻烦的还是 debug 问题, 两边无法直接联动.

@xsen @xgdgsc
改用 zmq 替换嵌入 python 虚拟机具体一点的想法是这样的:
还是一个 C ABI 的 DLL, 假设有图像处理和视频(几秒的视频)处理功能用 python 来实现, start_image_service, start_video_service 分别启动对应的 python 脚本在后台等待请求, process_image(void* image, ...), process_video(void* video, ...)将数据发送过去, 等待处理结果; python 接收到对应的字节后对其解码成适合自己的数据结构, 处理后发送回去.

不过随着应用的通信变得复杂, 这种方式可能会变得不可控, 看来大家说的 gprc 才是正确选择; 对延迟要求还是挺高的, 所以进程间通信越快越好.

其实我主要是想了解下 zmq 底层实现的一些思想, 也就是上面关于 ZeroMQ 的 1,2,3 个问题.
2022-11-29 01:18:29 +08:00
回复了 nnegier 创建的主题 程序员 数学是上的凹图像可能和你想像的不太一样
另外,根据 f(x)在某点 c 的二阶导判断极大极小值:
f''(c)>0, concave up, minimum
f''(c)<0, concave down, maximum

我经常按照以下方式来理解记忆:
f''(c)
v v 形状 concave up, v 的尖尖儿上极小值
0

f''(c)
^ ^形状 concave down, ^的尖尖儿上极大值
0
虽然简单推导下就能得出,但以上形象记忆非常适合脑筋急转弯 XD
2022-11-29 01:04:22 +08:00
回复了 nnegier 创建的主题 程序员 数学是上的凹图像可能和你想像的不太一样
∪ (上凹 concave up=convex, eg. y=x^2), ∩ (下凹 concave down)
2022-11-18 10:52:23 +08:00
回复了 justou 创建的主题 C++ C DLL 中初始化 Python 虚拟机问题
做了个简易 demo, 所有依赖都在里面, CLion 可以直接打开工程. 其它开发环境可能要用里面的 CMakeLists.txt 生成工程文件 https://drive.google.com/file/d/1OElQ6j8LwA-A2A45G2OROepqywmvh3Hn/view?usp=sharing
2022-04-30 15:41:30 +08:00
回复了 vcfghtyjc 创建的主题 C++ string literals 和 standard library strings
"hello"的类型是 const char[6], 作为数组相加吗? 如果可以的话,
const char[2] + const char[3]怎么加?
const int[4] + const int[4]怎么加?

char, short, int, long 等都是 integral, 除了数值能表示的范围, 没啥特殊

这样可以
using std::operator""s;
auto s = "hello"s + "world";
2022-04-26 18:38:33 +08:00
回复了 holmes1412 创建的主题 C 分享新思路:一个逻辑完备的线程池
UP 有没有好的流水线式处理实现思路?
n_1 个生产者 -> n_2 个加工者 -> n_3 个加工者 -> ... ->n_k 个最终消费者
设计可复用的 Pipe 来组成一个 Pipeline
@lizhiping886 可以尝试精简, 我用 pyinstaller 打包的一个 pyqt 程序只有 16.8M, 不过只用了 python 标准库和 qt 的 widgets, 没用其它
2022-04-16 12:28:15 +08:00
回复了 justou 创建的主题 C++ 请教一个 C++模板问题 (≥C++17)
@GeruzoniAnsasu 也是好办法, 谢谢推荐
2022-04-16 12:14:18 +08:00
回复了 justou 创建的主题 C++ 请教一个 C++模板问题 (≥C++17)
@ink19 是这个意思, 我就知道肯定有办法的, 谢谢~
你的代码不全, 应该贴一个完整的 demo, 拿来就能 debug 那种

1. 一整行被选中,尝试使用 self.tableView.currentIndex().row()获取行号应该是在一个 slot 中, 你是怎么写的?
2. 在不选中任意一行的情况下, currentIndex 是 invalid 的, row()返回-1 不是表示最后一行, 行索引的有效范围是[0, rowCount() - 1], 在处理一个 index 时注意使用 isValid()判断
2022-01-25 11:00:07 +08:00
回复了 ligiggy 创建的主题 C++ 请教大家一个函数的定义问题
1. double getCalculateResult(bool &ok); 表示需要强制判断
2. bool getCalculateResult(double &result); 完全可以忽略判断
3. double getCalculateResult(bool *ok=nullptr); 是否判断由调用者决定
4. std::optional<double> getCalculateResult(); 另一种强制判断
5. 抛异常

得看具体场景
2021-12-10 15:21:23 +08:00
回复了 eccentric579 创建的主题 Python Python 如何创建独立的进程
1  2  3  4  5  6  7  8  9  10 ... 12  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5519 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 40ms · UTC 06:39 · PVG 14:39 · LAX 23:39 · JFK 02:39
Developed with CodeLauncher
♥ Do have faith in what you're doing.