w***g 发帖数: 5958 | 1 今天一整天都在debug一个opengl程序,终于搞明白了:
opengl不是thread-safe的,即使加锁都不行!
也就是说,如果不加特殊处理,如果一个程序里面所有的gl
操作不是在同一个线程里完成,结果就会出错!
倒霉的状态机设计我就不说了,反正从来没见过这么坑爹的库。 |
N*****m 发帖数: 42603 | 2 你又用opengl干啥?
【在 w***g 的大作中提到】 : 今天一整天都在debug一个opengl程序,终于搞明白了: : opengl不是thread-safe的,即使加锁都不行! : 也就是说,如果不加特殊处理,如果一个程序里面所有的gl : 操作不是在同一个线程里完成,结果就会出错! : 倒霉的状态机设计我就不说了,反正从来没见过这么坑爹的库。
|
w***g 发帖数: 5958 | 3 还不是为了搞kaggle那个比赛。我想试试三维的神经网络,
但是要对三维数据进行带旋转的采样是一个非常expensive
的操作,如果用CPU做的话第一可能跟不上GPU训练速度,
第二也找不到开源的库来做这个事情,所以我在用opengl,
通过对三维texture进行采样来得到训练样本。
我估计结果不会好,但是这个project本身很有意思,
opengl用内置显卡,tensorflow用外置显卡,一个程序把
机器的所有计算能力全都发掘出来了。
【在 N*****m 的大作中提到】 : 你又用opengl干啥?
|
w***g 发帖数: 5958 | 4 kaggle那个比赛我已经做得快绝望了,目前毫无任何增长点。
还有半个月,只求善始善终做到最后。
【在 w***g 的大作中提到】 : 还不是为了搞kaggle那个比赛。我想试试三维的神经网络, : 但是要对三维数据进行带旋转的采样是一个非常expensive : 的操作,如果用CPU做的话第一可能跟不上GPU训练速度, : 第二也找不到开源的库来做这个事情,所以我在用opengl, : 通过对三维texture进行采样来得到训练样本。 : 我估计结果不会好,但是这个project本身很有意思, : opengl用内置显卡,tensorflow用外置显卡,一个程序把 : 机器的所有计算能力全都发掘出来了。
|
N*****m 发帖数: 42603 | 5 搞两块显卡不行?
【在 w***g 的大作中提到】 : 还不是为了搞kaggle那个比赛。我想试试三维的神经网络, : 但是要对三维数据进行带旋转的采样是一个非常expensive : 的操作,如果用CPU做的话第一可能跟不上GPU训练速度, : 第二也找不到开源的库来做这个事情,所以我在用opengl, : 通过对三维texture进行采样来得到训练样本。 : 我估计结果不会好,但是这个project本身很有意思, : opengl用内置显卡,tensorflow用外置显卡,一个程序把 : 机器的所有计算能力全都发掘出来了。
|
w***g 发帖数: 5958 | 6 一块显卡其实也可以同时跑opengl和cuda。
不过作为星宿派,总是要折腾下的。
把本来闲置的内置显卡用起来得到的满足感
非常大。
【在 N*****m 的大作中提到】 : 搞两块显卡不行?
|
c*****e 发帖数: 3226 | 7 那就 serialize operations。
【在 w***g 的大作中提到】 : 今天一整天都在debug一个opengl程序,终于搞明白了: : opengl不是thread-safe的,即使加锁都不行! : 也就是说,如果不加特殊处理,如果一个程序里面所有的gl : 操作不是在同一个线程里完成,结果就会出错! : 倒霉的状态机设计我就不说了,反正从来没见过这么坑爹的库。
|
c*********e 发帖数: 16335 | 8 库名字是啥?我一般用opengl的库来画3d图,一般是javascript的。
【在 w***g 的大作中提到】 : 今天一整天都在debug一个opengl程序,终于搞明白了: : opengl不是thread-safe的,即使加锁都不行! : 也就是说,如果不加特殊处理,如果一个程序里面所有的gl : 操作不是在同一个线程里完成,结果就会出错! : 倒霉的状态机设计我就不说了,反正从来没见过这么坑爹的库。
|
w*****r 发帖数: 197 | 9 这就是为啥opengl的渲染例程都是用回调函数实现的。在网上GPU体绘制的code很多,
在此基础上改成你需要的函数会容易很多。
【在 w***g 的大作中提到】 : 今天一整天都在debug一个opengl程序,终于搞明白了: : opengl不是thread-safe的,即使加锁都不行! : 也就是说,如果不加特殊处理,如果一个程序里面所有的gl : 操作不是在同一个线程里完成,结果就会出错! : 倒霉的状态机设计我就不说了,反正从来没见过这么坑爹的库。
|
x****u 发帖数: 44466 | 10 教你一个大杀器,就是ms的apartment线程
你把操作包到一个com的idispatch子类里,列集化后传给工作线程,什么事情都可以跟
nodejs一样异步到主线程干,线程安全锁都不用写
【在 w***g 的大作中提到】 : 今天一整天都在debug一个opengl程序,终于搞明白了: : opengl不是thread-safe的,即使加锁都不行! : 也就是说,如果不加特殊处理,如果一个程序里面所有的gl : 操作不是在同一个线程里完成,结果就会出错! : 倒霉的状态机设计我就不说了,反正从来没见过这么坑爹的库。
|
|
|
v****n 发帖数: 362 | 11 拿螺丝刀当钳子用,还怪螺丝刀坑爹。
【在 w***g 的大作中提到】 : 今天一整天都在debug一个opengl程序,终于搞明白了: : opengl不是thread-safe的,即使加锁都不行! : 也就是说,如果不加特殊处理,如果一个程序里面所有的gl : 操作不是在同一个线程里完成,结果就会出错! : 倒霉的状态机设计我就不说了,反正从来没见过这么坑爹的库。
|
L****8 发帖数: 3938 | 12 可以用vtk 或者 itk 搞三维采样
【在 w***g 的大作中提到】 : 今天一整天都在debug一个opengl程序,终于搞明白了: : opengl不是thread-safe的,即使加锁都不行! : 也就是说,如果不加特殊处理,如果一个程序里面所有的gl : 操作不是在同一个线程里完成,结果就会出错! : 倒霉的状态机设计我就不说了,反正从来没见过这么坑爹的库。
|
w***g 发帖数: 5958 | 13 多谢,来吐槽的时候就已经搞定了。vtk我感觉水很深一直没启用,看开还是得学习一
下。
【在 L****8 的大作中提到】 : 可以用vtk 或者 itk 搞三维采样
|
c*********e 发帖数: 16335 | 14 星期五一整天,你在倒腾什么比赛?你啥工作?
【在 w***g 的大作中提到】 : 今天一整天都在debug一个opengl程序,终于搞明白了: : opengl不是thread-safe的,即使加锁都不行! : 也就是说,如果不加特殊处理,如果一个程序里面所有的gl : 操作不是在同一个线程里完成,结果就会出错! : 倒霉的状态机设计我就不说了,反正从来没见过这么坑爹的库。
|
c*********e 发帖数: 16335 | 15 node.js里用opengl不是更好?c#里的那也能叫async?
【在 x****u 的大作中提到】 : 教你一个大杀器,就是ms的apartment线程 : 你把操作包到一个com的idispatch子类里,列集化后传给工作线程,什么事情都可以跟 : nodejs一样异步到主线程干,线程安全锁都不用写
|
w***x 发帖数: 105 | 16 其实很简单点事,每个ctx一定要make current,和你当前的render surface绑定。
两个thread,可以并行用不同的ctx而不用加锁,一个ctx用在两个thread上,一定要
mutex保护序列化操作。
【在 w***g 的大作中提到】 : 今天一整天都在debug一个opengl程序,终于搞明白了: : opengl不是thread-safe的,即使加锁都不行! : 也就是说,如果不加特殊处理,如果一个程序里面所有的gl : 操作不是在同一个线程里完成,结果就会出错! : 倒霉的状态机设计我就不说了,反正从来没见过这么坑爹的库。
|
w***g 发帖数: 5958 | 17 我是几乎把opengl的红书读完的,不记得提到多线程编程。
一般来说linux下的东西一个进程内所有的线程共享资源的,
比如一个线程内分配的内存,可以用另一个线程释放,保证同步就行。
偶尔有thread-local的东西也都是透明的。很少有opengl这种
显式特定于线程的资源。我少见多怪了。
【在 w***x 的大作中提到】 : 其实很简单点事,每个ctx一定要make current,和你当前的render surface绑定。 : 两个thread,可以并行用不同的ctx而不用加锁,一个ctx用在两个thread上,一定要 : mutex保护序列化操作。
|
b***i 发帖数: 3043 | 18 什么语言呢?C++吗?
【在 w***g 的大作中提到】 : 我是几乎把opengl的红书读完的,不记得提到多线程编程。 : 一般来说linux下的东西一个进程内所有的线程共享资源的, : 比如一个线程内分配的内存,可以用另一个线程释放,保证同步就行。 : 偶尔有thread-local的东西也都是透明的。很少有opengl这种 : 显式特定于线程的资源。我少见多怪了。
|
w***x 发帖数: 105 | 19 其实这些ogl spec里都有详细描述的,不过app开发者很少有看spec的,开发driver的
是必看。
不只是ogl对多线程支持有限,d3d也不好,最新的vulkan据说有真正支持。
ogl的状态机设计有几乎30年的历史了吧,虽然现在很让人诟病,但不得不说当初的设
计还是很牛逼的。
【在 w***g 的大作中提到】 : 我是几乎把opengl的红书读完的,不记得提到多线程编程。 : 一般来说linux下的东西一个进程内所有的线程共享资源的, : 比如一个线程内分配的内存,可以用另一个线程释放,保证同步就行。 : 偶尔有thread-local的东西也都是透明的。很少有opengl这种 : 显式特定于线程的资源。我少见多怪了。
|
x****u 发帖数: 44466 | 20 nodejs目前代替不了C++啊
【在 c*********e 的大作中提到】 : node.js里用opengl不是更好?c#里的那也能叫async?
|
|
|
c*********e 发帖数: 16335 | 21 这的大神都是c++的。goodbug是java的,被骂走了。
【在 b***i 的大作中提到】 : 什么语言呢?C++吗?
|
k**0 发帖数: 19737 | 22 胡说,是打赌输了
【在 c*********e 的大作中提到】 : 这的大神都是c++的。goodbug是java的,被骂走了。
|
N*****m 发帖数: 42603 | 23 瞎说,本版用java的不少
【在 c*********e 的大作中提到】 : 这的大神都是c++的。goodbug是java的,被骂走了。
|