Decorative image frame

喵耳朵

略懂算法 | 在学架构 | 梦想成为 | Top插画师

喵耳朵

C程序优雅地调用Lua?一篇博客带你全面了解lua_State

一、前言

Lua是一种使用十分方便的脚本语言,同时又能C/C++无缝的粘合在一起,在速度上也比很多其他的脚本语言快了一个数量级,在使用LuaJit的情况下,速度甚至可以与C语言比肩。同时Lua支持模块的热更新,在游戏等行业受到广泛的应用。

同时Lua虚拟机十分的轻量,在占用极少内存和依赖的情况下,可以方便的嵌入到我们的项目中。

本文中,主要介绍了在C/C++项目中,使用Lua虚拟机的技巧,着重介绍Lua_State的原理和使用。简单的说就是用C去调用Lua。另一个技术是用Lua调用C库,可以为Lua程序加速,这个在以后的文章中再介绍。

Read More...

Easy Pipeline,一种轻量级的Python Pipeline库

嗯,很久没有写博客了,最近的工作都是偏开发性质的,以至于没有时间对自己感兴趣的领域进行探索,感觉个人的成长停滞了一些。如何在枯燥的工作中,提取出有助于自己成长的养分,对于每个人来说都是不小的考验。

这次,带来的是之前编写的一下挺简单的库,用来简化流水线作业的小框架。

Github: https://github.com/miaoerduo/easy-pipeline 欢迎Star和提交MR。

Read More...

vim配置

下面是我的VIM的主要配置。应该就是网上找到的一个,加了点功能。权当在这里备份一下了。 将下面的内容写入自己的~/.vimrc文件即可。

Read More...

_rebuild_tensor_v2?pytorch版本间模型兼容性脱坑实践

最近使用Pytorch 0.4.0 进行模型训练,之后使用一个转模型的工具时,报了一个错,就是标题里面的_rebuild_tensor_v2相关的错误。最后发现是本地使用的pytorch的版本是0.3.0,和0.4.0模型上不兼容。各论坛上的解决方案都是说pytorch版本不向后兼容,建议升级pytorch。无奈我这里不方便升级pytorch版本。那么问题就来了,有没有什么不需要修改pytorch源码,或是不升级pytorch,又能让老版本的pytorch读取新版本模型的方案呢?

当然是有的,而且工作量很小。

Read More...

C++ Boost JSON解析库的使用

最近在写一个C++项目的时候,有大量的配置信息,于是将这些配置信息整合进一个文本文件中,选择了JSON这种数据格式。C++在处理JSON数据的库有很多,比如Jsoncpp,Boost等,这个项目中由于本身就已经用到了Boost这个库,因此,也就选用Boost来进行JSON的解析了。

Boost的JSON解析,使用的是property_tree这个数据类型,它可以方便的解析XML和JSON。

Read More...

C++ 并发队列的原理简介与开源库concurrentqueue安利

由于最近在做一个项目,但是框架本身有个不合理的设计。其中的代码是单线程的,数据的读取和计算都在一个线程里面完成。也就是说,我们的程序有很大的一部分时间在读取文件数据,导致最终的运行速度很慢。这里就可以使用多线程来优化。

这里需要使用最基本的生产者消费者模式。使用若干个线程作为生产者,负责数据的读取和预处理,这部分任务是IO密集型的,也就是不太占CPU,但是比较占带宽,而且有延时。在处理完数据之后,将数据放到一个队列中。

同时,使用若干个线程充当消费者,从这个队列里面获取数据,然后进行计算。计算的部分是CPU密集型的(其实我这里计算是GPU做的,就只有一个消费者),计算完成之后输出结果。

那么贯穿这一整套方案的,就是我们的队列。

在并发任务中,通常都需要一个队列机制,将并行的任务转化成串行的任务,或者将串行的任务提供给并行工作的线程。这个队列会同时被多个线程读写,因此也必须是线程安全的。

Read More...