使用 bullet 物理引擎多线程求解器

这篇博客探讨了在Windows10环境下,使用PyBullet库进行物理模拟时,单线程与多线程(OpenMP和PPL)的性能对比。结果显示,单线程在某些情况下可能优于多线程实现。作者提到了在启用多线程时遇到的错误,并提供了配置OpenMP和PPL的建议。
摘要由CSDN通过智能技术生成

注意,很多时候多线程的性能比单线程的更烂。

windows10 本机测试
bullet 版本 master 2021/6

单线程:10-13FPS
PPL:7-13FPS
OpenMP:1-4FPS

报错 btAssert( gBtTaskScheduler != NULL );
参考自:https://pybullet.org/Bullet/phpBB3/viewtopic.php?t=10232&start=135

cmake build时记得打上OpenMP和PPL多线程支持
PPL多线程支持仅限于windows。Linux只需要打上OpenMP。


#include <btBulletDynamicsCommon.h>
// 要手动包含多线程求解器
#include <BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolverMt.h>

int main()
{
		// 开始要先设定多线程的TaskScheduler
		btSetTaskScheduler(btGetOpenMPTaskScheduler());
		// btSetTaskScheduler(btGetPPLTaskScheduler());
		
		cfg = new btDefaultCollisionConfiguration();
		dispatcher = new btCollisionDispatcher(cfg);
		pair_cache = new btDbvtBroadphase();
		// 只要把求解器改成 Mt 就可以简单开启多线程求解
		// solver = new btSequentialImpulseConstraintSolver();
		solver = new btSequentialImpulseConstraintSolverMt();

		world = new btDiscreteDynamicsWorld(dispatcher, pair_cache, solver, cfg);
		world->setGravity(btVector3(0, -10, 0));
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值