← 返回标签列表

#CPP

8 篇文章

ndk std_thread 获取pid

最近在解决tvm绑核问题时,发现android下绑核只有sched_setaffinity函数,这导致无法使用标准库中的td::thread::native_handle_type thread 进行绑核操作。虽然在ndk 21以上的版本提供了pthread_gettid_np函数获取线程相应的pi...

TVM 源码阅读PASS — VectorizeLoop

VectorizeLoop这个PASS就是对标记为ForKind::kVectorized的For循环做向量化处理,并对For循环中的语句涉及到的变量,替换为Ramp,以便于在Codegen的过程中生成相关的向量化运算的指令。 VectorizeLoop这个PASS的入口函数如下,只有在打开enab...

packfunc

为实现多种语言支持,需要满足以下几点: 部署:编译结果可以从python/javascript/c++调用。 Debug: 在python中定义一个函数,在编译函数中调用。 链接:编写驱动程序以调用设备特定代码(如CUDA),可以在编译的host侧调用 原型:python侧定义IR PASS,并从...

tvm-多线程代码生成和运行

调用链tvm搜索算子在需要多线程运行的算子,是在codegen阶段时插入TVMBackendParallelLaunch的调用。 TVMBackendParallelLaunch 是tvm的线程池并行化入口,具体如下 12345678910111213141516171819/*! * \brief...

C++'s most vexing parse

C++’s most vexing parse 是 Scott Meyers 在其名著《Effective STL》中创造的一个术语。Scott 用这个术语来形容 C++ 标准对于 declaration 语句的消歧义(ambiguity resolution)约定与常人的认知相悖。 最令人烦恼的解...

C++初始化列表

类对象的构造顺序是: 1.分配内存,调用构造函数时,隐式/显示的初始化各数据成员; 2.进入构造函数后在构造函数中执行一般赋值与计算。 使用初始化列表有两个原因:原因1.必须这样做: 《C++ Primer》中提到在以下三种情况下需要使用初始化成员列表: 需要初始化的数据成员是对象的情况(这...

柔性数组

这个问题是阿里的一个面试题。当时没有很清楚,答得很差,特地实验看一下运行结果。 在结构体中定义了一个char*指针,与定义一个零元素的char数组有什么区别? 作用常用来构成缓冲区。比起指针,用空数组有这样的优势: 不需要初始化,数组名直接就是所在的偏移; 不占任何空间,指针需要占用int长度...

c++构造函数

调用拷贝构造函数的几种情况 当类中成员有指针变量、类中有动态内存分配时常常需要用户自己定义拷贝构造函数。 在什么情况下系统会调用拷贝构造函数: (1)用类的一个对象去初始化另一个对象时 (2)当函数的形参是类的对象时(也就是值传递时),如果是引用传递则不会调用 (3)当函数的返回值是类的对象或引...