gms2能手动开多线程吗
gamemaker吧
全部回复
仅看楼主
level 4
今天突发奇想,做压力测试的时候发现,gms2好像并不会主动开多线程,我电脑其中2个大核都快冒烟了,其他22个核心还一动不动的。
翻了一下官方文档,并没有看到线程相关的东西(也不知道是不是眼瞎)。想请教一下,gms2能手动创建多线程吗
2024年04月04日 16点04分 1
吧务
level 13
据我所知,GMS的动作有比较严格的执行顺序,不太可能允许多线程。甚至有些制作人连不同instance执行同一个动作的先后顺序都要抠明白(话说验证结果似乎是各代版本的答案有差异)。据说有些插件能实现多线程效果,如果你能接受“有一部分执行过程不受自己控制”、“未来移植困难”、“出了问题可以寻求帮助的范围缩小”、“插件不好找”、“可能不适用于自己制作的内容”这些问题的话,可以试试看。
如果题主的核心需求是“解决大量计算的卡顿问题”,而不是前进了一步的“怎样开启多线程”,咱还是有一个可能的解决方案的,那就是启用shader,把计算内容从CPU转移到GPU。这个方案需要几个前提:
0、计算可以拆分至并行进行,而不是必须递推或更复杂的(比如递归);
1、计算是直接进行,不需要过多复杂的逻辑判定;
2、计算结果同样是分布存储的,或者说可以和“图片”这种形式进行对应,而不是“汇总到一个结果”;
3、机器上有可以做这件事的GPU……你用4090啊,那没事了;
2024年04月06日 01点04分 2
原来如此,学到了
2024年04月06日 15点04分
我还问一下,draw开头的函数是走的gpu还是cpu呀
2024年04月06日 15点04分
启用shader的意思是把一些逻辑放到顶点着色器和片源着色器里吗?能不能推荐几个教程给我呀,谢谢了。
2024年04月06日 15点04分
@secret丨小贱 咱研究的少,没太注意过普通draw哪边占用资源多。只是咱之前做过的一个图片处理小工具在从CPU遍历像素改成shader以后效率立刻起飞(从等30秒处理一张图变成了60FPS无压力,主要等待时间大概是等save的PNG压缩)。
2024年04月07日 07点04分
吧务
level 13
看你贴那么多代码,心痒痒。
图一:GML部分
图二:shader的fsh部分(在图1的197行开启)
来回改的时候留了一些debug的、替换下去没删除的代码,还注释着,反正凑合能看。
行184-203,对比表面sf[sf[0]]每个像素和y-1像素的差异,并把加权结果放到临时表面0上,其中加权算法在shader里边;
行204-228,将每行的差异记录累计到最左侧的那一列像素上;
行229-251,把结果导出到buffer,并根据差异情况决定是否标记为“分割”(ysp[]);
咱做的那个拼图,可以用这个算法来进行辅助切割,虽说切割结果和实际还是有差异,不过大多数判定还是能用的。
顺便就是如果用cpu读所有像素的颜色(单线程),会慢很多。如果不借助buffer而是直接从表面读的话,差不多就是可以考虑放弃这个功能不做的程度。
2024年04月28日 09点04分 3
感谢,这就研究下[滑稽]
2024年04月29日 05点04分
话说这段代码的功能是分割图片,异步渲染吗
2024年04月29日 05点04分
@secret丨小贱 并没有异步,只是用GPU计算图片内容。功能是找出图片里哪里像是“被切割过又拼到一起”的样子。
2024年04月29日 05点04分
吧务
level 13
某天见到这种,行列对齐的打乱图片,感觉当拼图玩还不错。不过,有些图片的打乱过程让格子的大小有差别,用参数重新切割和图片对不上,手工一个一个切又太麻烦了,就可以用这个算法来辅助判定。
2024年04月29日 06点04分 4
原来如此,学到了[吐舌]
2024年04月29日 11点04分
还能这样啊,[茶杯]
2024年06月14日 08点06分
@不存在请重试 是啊(虽然不知道你感叹的是哪部分,在这个引擎把批量计算转移到GPU、用计算的方式分析图片还是把图片以行列对齐的方式切碎/还原的这种玩法)
2024年06月15日 01点06分
1