OpenGL计算着色器工作组设置测试

先看看不同的显卡上工作组的数量情况。

	glGetIntegeri_v(GL_MAX_COMPUTE_WORK_GROUP_COUNT, 0, data);
	glGetIntegeri_v(GL_MAX_COMPUTE_WORK_GROUP_COUNT, 1, data + 1);
	glGetIntegeri_v(GL_MAX_COMPUTE_WORK_GROUP_COUNT, 2, data + 2);
	
	glGetIntegerv(GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS,data + 3);
	glGetIntegeri_v(GL_MAX_COMPUTE_WORK_GROUP_SIZE, 0, data + 4);
	glGetIntegeri_v(GL_MAX_COMPUTE_WORK_GROUP_SIZE, 1, data + 5);
	glGetIntegeri_v(GL_MAX_COMPUTE_WORK_GROUP_SIZE, 2, data + 6);

	cout << "GL_MAX_COMPUTE_WORK_GROUP_COUNT:" << data[0] << " " << data[1] << " " << data[2] << endl;
	cout << "GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS:" << data[3] << endl;
	cout << "GL_MAX_COMPUTE_WORK_GROUP_SIZE:" << data[4] << " " << data[5] << " " << data[6] << endl;

集成显卡:
在这里插入图片描述
高性能INVIDIA处理器:
在这里插入图片描述
很明显独显可设置的工作组数量要比集成显卡多一些。先看一下相同的维度下集成显卡和独显的运行时间(毫秒)。

glDispatchCompute(8000, 1, 1);
//着色器设置
layout (local_size_x = 1024,local_size_y = 1) in;

集成:
在这里插入图片描述
独显:
在这里插入图片描述
很明显,独显的运行速度要比集成显卡快很多。
再在集成显卡下,修改一下工作组维度看下。

glDispatchCompute(20, 20, 20);
//着色器设置
layout (local_size_x = 256,local_size_y = 2,local_size_z = 2) in;

在这里插入图片描述
本地工作组的积都是1024的时候,好像并没有什么的改善。。。。。。。也许只要设置成x单维的,用gl_GlobalInvocationID.x做为索引就行。。。
再试下把本地工作组的值减小:

glDispatchCompute(64000, 1, 1);
layout (local_size_x = 128,local_size_y = 1) in;

在这里插入图片描述
再对比一下感觉31和32占的比例明显增多。个人认为还是最好把本地工作组设成一个显卡能支持的最大值 ,但是不同的显卡支持的最大值又不同,该怎么设置?
https://blog.csdn.net/DSQ_17/article/details/21457507

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值