CUDA减少JIT开销的两种方式

之前测试的时候发现有时从Jenkins上拉下来的的megawise二进制包解压启动之后,执行第一条sql非常慢,需要1.5~3.5分钟不等。

后来docker化之后发现,docker中稳定必现第一条sql长时间卡住的问题。

当时查看日志发现总会卡在zdb_storage的一个MetaAgg的函数中,后来将这个函数注释掉,发现这个问题还是没有解决,会在engine中卡住。

百思不得其解之际,叶富哥一语惊醒梦中人:“好像都是卡在cuda调用的地方”。

从这个方向入手调查,果然找到了问题。

-------------------------------------揭开谜底的分割线------------------------------------------------

随着Nvidia gpu不断发展以支持新的特性,其指令集架构自然也发生了编号。由于应用程序需要在多代gpu上运行,Nvidia编译器工具链在同一个应用的可执行文件或者库中支持对多个不同架构的编译。

CUDA还依赖PTX(Parallel Thread Execution)虚拟GPU ISA(Instruction Set Architecture)来提供向前兼容性,以便已经部署的应用程序可以运行在未来的GPU架构之上。Nvidia编译器nvcc为了提供前向和

后向的兼容性,使用两段编译模型。第一个编译阶段将源代码编译成PTX虚拟汇编码,第二个阶段将PTX码编译成目标架构的二进制代码。CUDA驱动在运行时执行第二阶段编译。这种即时编译就会导致

应用程序在启动时(准确的说是在CUDA上下文创建的时候)产生一定的时间开销。CUDA使用两种方式来减少JIT(just-in-time)编译的时间开销:fat binaries和JIT缓存。

 

Fat Binaries

第一种完全避免

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值