VB调用CUDA遍历像素
vb.net吧
全部回复
仅看楼主
level 9
TERA_ARISU 楼主
近日有在学习图像处理,想用VB调用CUDA来加速,折腾了好些天,今儿终于成功迈出第一步。
之前是通过Task开8线程并行,虽效果拔群,但仍不尽人意[升起]现推倒了"遍历像素做对应处理"这个耗时大户,连"Marshal.Copy"也省了,美滋滋[升起](Graphics.DrawImage也是耗时大户,但这玩意应该没法搞吧……)
黑底白字:VS2017,VB
白底黑字:VS2015,C++/CLI,CUDA8.0
虽然不知道C++/CLI是个啥玩意,不过依葫芦画瓢让它生个DLL给VB调用能成功就好,结果万岁。
(下面代码为把一副PARGB图还原为ARGB图←有损还原)
本来被C++指针所困惑,码了大半篇字准备发帖求助,不想竟意外开了窍[滑稽][haha]
参考教程:pan.baidu.com/s/1mhEWJUw (视频源地址在油管需璠嫱,故上传一份给度盘)
2017年07月04日 13点07分 1
level 9
TERA_ARISU 楼主
一些新发现:
传了两个位图指针进来弄混色,但搞了大半天结果都不正确,后来才发现不是混色公式写错,而是碰到这种奇怪的限制[喷]这什么操作
啊这

2017年07月05日 11点07分 2
break
2017年07月09日 09点07分
回复 Nukepayload2 :原来少了break会执行到底啊[喷]难怪
2017年07月09日 10点07分
level 9
TERA_ARISU 楼主
赶紧投入使用[滑稽]看看效果如何
上面左图→右图的变化:
背景+蒙版b0000040+强光
人物+蒙版40c02000+柔光
按流程来还有三个暂时不可避免的DrawImage,用掉80多毫秒还是挺伤的……然后再来对比一下CPU/GPU染色消耗的时间,直径减少200毫秒[笑眼]这个差距还挺可观的。
于是为了更具体些,在染色过程里插了几个计时变量,在走一遍流程看看时间统计:
发现原来在这80多毫秒里,lockbits耗时就占了3分之2[喷]太坑了
结论:[滑稽]玛德再也不用CPU搞混色了
2017年07月06日 07点07分 3
level 13
不错。支持。
.
2017年07月06日 11点07分 4
level 2
CUDA是什么东东?
2017年07月14日 11点07分 5
以我的需求而言[笑眼]是可以大幅图压低混色计算消耗时间的东东
2017年07月14日 11点07分
level 1
呃,直接用D3D来处理不是更好?
2017年08月13日 17点08分 6
试过SharpDX,然而第一步测试把图画到窗体上时图片不知为啥会有撕裂且我不知道如何解决,所以放弃了[喷]
2017年08月14日 04点08分
@TERA_ARISU CUDA限定显卡品牌的吧,你这输入是图像,输出是图像,用D2D或者D3D比较好吧,至于撕裂。。。我只能说,多看例程
2017年08月14日 04点08分
回复
libinyll
:实在是找不到VB用DX处理像素的教程。直接看SharpDX的例子…看不懂[喷] .NET调用CUDA这个教程刚好有讲到处理位图的方法,把他模板搬下来直接就能用[笑眼]反正主要是自用,哪个能用就上哪个了
2017年08月14日 09点08分
@TERA_ARISU D3D不是处理像素的,没那个用法,把纹理贴到正方形上再加上光照就OK了,处理完从缓冲链把数据调出来就OK了,整个过程10毫秒都算多了
2017年08月15日 10点08分
level 9
好厉害的样子
2017年08月14日 04点08分 7
level 8
楼主很厉害!然后呢,图像处理我用的是EmguCV,但是楼主所需要的功能似乎用Sharpdx搞定更好一些呢。
2017年08月18日 08点08分 8
level 1
楼主能把编译好的DLL和调用代码发个链接吗?
2022年05月12日 11点05分 9
1