自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 Onnx之Elemwise类算子的执行(CLIP为例)

Elemwise类首先定义算子执行分配器ModeDispatcher, 通过on_arity_dispatched_cb_dtype 进行调用,实际上由方法ElemwiseForwardImpl::on_arity_dispatched和ElemwiseForwardImpl::on_arity_dispatched_no_bool 调用。其中KernImpl就是前面定义的 ElemwiseKern, 通过MEGDNN_DISPATCH_CPU_KERN,有CPU调度执行。

2023-05-23 14:29:12 397

原创 手动实现 std::variant / std::visit 的功能

要手动实现 std::variant / std::visit 的功能,我们需要理解 std::variant 和 std::visit 是如何工作的。std::visit 是一个函数模板,用于访问 std::variant 中的对象,并以类型安全的方式进行参数化。因此,我们在实现自己的 std::variant / std::visit 时,需要注意类型匹配和错误处理。// 获取错误类型的值。// 获取指定类型的值。

2023-04-27 16:42:56 278

原创 onnxruntime opkernel

function_table 上面有定义。重点:type_constraints_

2023-04-26 21:55:25 211

原创 ONNXRuntime Conv算子实现解析

【代码】ONNXRuntime。

2023-04-26 09:38:17 423

原创 MegEngine之ConvolutionBackwardData执行流程

对于Format为 NCHW, 注意梯度的数据类型必须时 QuantizedS8, 才会走naive::ConvolutionBackwardDataImpl::exec。其中包含的算法 megdnn_opr为 fallback::ConvolutionBackwardDataImpl。最后调用run_conv_backward_data进行计算,最纯粹的 naive计算。static_cast(algo) 为。ncb_1g_dispatch_kern 选择核函数。

2023-04-21 14:37:32 44

原创 c++之右值与移动语义

左值 lvalue 是有标识符、可以取地址的表达式。纯右值 prvalue 是没有标识符、不可以取地址的表达式,一般也称之为“临时对象”。 需要注意的是类型是右值引用的变量是一个左值。毕竟对于一个右值引用的变量,你是可以取地址的,这点上它和左值完全一致。std::move(ptr)就有趣点了。它的作用是把一个左值引用强制转换成一个右值引用,而并不改变其内容,结果是指向ptr的一个右值引用。我们可以把std::move(ptr)看作是一...

2021-12-27 10:33:52 522

原创 Rust标准库中常用Trait之Copy/Clone

Clone约定了数据被深拷贝或浅拷贝的行为pub trait Clone { fn clone(&self) -> Self; fn clone_from(&mut self, source: &Self) { *self = source.clone() }}Clone trait 有两个方法,clone()和clone_from(),后者有缺省实现,所以平时我们只需要实现clo...

2021-12-08 10:48:25 4119

原创 三、mediasoup之WebRtcTransport 创建流程(2)

上节说过WebRtcTransport实例创建成功后,客户端通过服务端的nodejs主进程发送"transport.connect"指令到c++子进程,进行建立连接的。连接的建立过程主要是ICE,DTLS协议等规定的相关内容,下面简单说明一下相关概念。ICE是一种标准穿透协议,利用STUN和TURN服务器来帮助端点建立连接 ,客户端通过ice-ufrags, ice-passwords与服务器进行身份验证并建立连接。并互换fingerprint,用于验证加密数据的合法性...

2021-12-07 17:23:44 671

原创 STL标准库动态数组vector与queue区别

vector 是单端开口的容器,尾部插入和删除元素速度快;deque 是双端开口的容器可以头部插入也可以尾部插入,速度快。但是中间插入速度慢,遍历速度快。vector 是动态数组,在堆中分配内存,元素是连续存放的。可以动态扩容。 vector 即使大小减少,内存也不会被释放,通常状态下不会移动内存,只有保留内存不够的时候,才会对中间和开始处的内存进行移动。 vector 的存储数据的时候,会遵循以下顺序: 建立空间->填充数据->如果插入的数据超过预留的空间大小,重建更大的空间 -&.

2021-12-07 15:56:00 2530

原创 二、mediasoup之WebRtcTransport创建流程(1)

在创建了router(代表一个房间)之后,producer要发送音视频数据之前就要先创建Transport,分为WebRtcTransport 、PlainTransport、PipeTransport三种,我们这里主要讲的是WebRtcTransport 。参考下官方api的使用:// 参数详情参与链接// https://mediasoup.org/documentation/v3/mediasoup/api/#WebRtcTransportOptionsconst tra...

2021-12-03 11:43:07 2372

原创 一、mediasoup之router的创建过程

本专栏定位于mediasoup源码阅读,需要具体一定的相关基础知识,不是是入门文章,如果不熟悉mediasoup的基本概念术语,比如 worker , router, transport, producer,consumer等,或者对webrtc中 sdp, stun,turn等术语,请自行查阅相关概念。

2021-12-01 14:26:14 2108

原创 Rust声明宏println剖析

当我们用cargo new XXX创建一个rust项目时,默认都会生成main.rs文件,里面的代码就是println!("Hello, world!");用于向控制台打印Hello world。因此,我打算通过标准库源码对println宏的实现机制进行深入剖析。...

2021-12-01 11:34:11 1160

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除