注意,很多时候多线程的性能比单线程的更烂。
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));
}