初探 C# GPU 通用計算技術

GPU 的并行計算能力高于 CPU,所以最近也有很多利用 GPU 的項目出現在我們的視野中,在 InfoQ 上看到這篇介紹 Accelerator-V2 的文章,它是微軟研究院的研究項目,需要注冊后才能下載,感覺作為我接觸 GPU 通用運算的第一步還不錯,于是去下載了回來。

?

在安裝包里,包含了幾個例子程序,比如著名的 Life 游戲,不過,Life 游戲,相對于剛接觸 GPU 運算的我,還是稍顯復雜了。于是簡化一下,只是進行一些簡單的計算,發現,DX9Target.ToArray 如果返回參數是 int 數組的話,則會爆出“未支持的操作”的異常,想想也對,顯卡確實是精于浮點運算的。

?

本來,我以為,GPU 運算是 DirectX 11 才有的功能,但是 Accelerator 支持的卻是 DirectX 9,想來 DirectX 11 支持的運算能力更高、方式更簡單吧。

?

為了簡單比較一下 CPU 和 GPU 的速度,也寫了一個 .net 4 的并行運算的程序,因為 DX9Target 不支持 int,所以這里的數組也用 float,如下:

?

?

復制代碼
代碼
private const int GridSize = 1024; private float[] _map;public Form1() {InitializeComponent();_map = new float[GridSize * GridSize];for (int y = 0; y < GridSize; y++){for (int x = 0; x < GridSize; x++){_map[x * GridSize + y] = x * y;}}Render(); }private void Start_Click(object sender, EventArgs e) {var stopwatch = new Stopwatch();stopwatch.Start();_map = _map.AsParallel().Select(p => p * p * p / 4 + 194).ToArray();var time = stopwatch.ElapsedMilliseconds;this.Text = time.ToString();Render(); }private void Render() {var workingBitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height);for (int y = 0; y < pictureBox1.Height; y++){for (int x = 0; x < pictureBox1.Width; x++){workingBitmap.SetPixel(x, y, Color.FromArgb(-0x1000000 | (int)_map[x * 2 * GridSize + y * 2]));}}pictureBox1.Image = workingBitmap; }
復制代碼

?

?

而使用 Accelerator 的代碼如下:

?

?

復制代碼
代碼
private const int GridSize = 1024; private readonly DX9Target _target; private float[,] _map;public Form1() {InitializeComponent();_target = new DX9Target();_map = new float[GridSize, GridSize];for (int y = 0; y < GridSize; y++){for (int x = 0; x < GridSize; x++){_map[x, y] = x * y;}}Render(); }private void Start_Click(object sender, EventArgs e) {var stopwatch = new Stopwatch();stopwatch.Start();var p = new FloatParallelArray(_map);p = p * p * p / 4 + 194;_target.ToArray(p, out _map);var time = stopwatch.ElapsedMilliseconds;this.Text = time.ToString();Render(); }private void Render() {var workingBitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height);for (int y = 0; y < pictureBox1.Height; y++){for (int x = 0; x < pictureBox1.Width; x++){workingBitmap.SetPixel(x, y, Color.FromArgb(-0x1000000 | (int)_map[x * 2, y * 2]));}}pictureBox1.Image = workingBitmap; }
復制代碼

?

?

?

用我的筆記本(CPU 為 Core i5 430, 顯卡為 ATI 5650)測試,對它們兩個程序,都點擊幾次 Start 按鈕,發現運行 3 次左右,圖片框會變成全黑,這時,普通并行程序運算速度變慢,而 GPU 程序運行速度無明顯變化,普通并行程序 4 次值為:96,89,277,291,而 GPU 程序 4 次值為:71,40,35,50。單就這個測試來說,在我的電腦上,使用 GPU 的程序,大概比普通并行程序快一倍左右吧。這個測試本身,其實不見得很公平,結果僅供參考。

?

不過,在 Accelerator 中的并行編程,明顯感覺受到的約束很大,平常很容易的代碼,要改成這種并行模式,需要花費很多力氣,有些邏輯甚至無法實現。相對于 Accelerator,Brahma 的代碼寫起來就容易得多,也更易于閱讀,其 Life 游戲的例子程序讀起來簡單而清晰,可惜我編譯了 Brahma v0.1 和 v0.4,在我的電腦上,DirectX 的例子程序沒有效果,而 OpenGL 的例子程序則會報一個“The generated GLSL was invalid”的異常,看來還需要等它完善之后才能使用吧。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/448757.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/448757.shtml
英文地址,請注明出處:http://en.pswp.cn/news/448757.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

d3代碼如何改造成update結構(恰當處理enter和exit)

d3的enter和exit 網上有很多blog講解。說的還湊合的見&#xff1a;https://blog.csdn.net/nicolecc/article/details/50786661 如何把自己的rude繪圖代碼&#xff0c;進行精致化&#xff08;update&#xff09; 不多比比&#xff0c;上代碼示例&#xff1a; d3.selectAll(.circ…

退居二線VS在深圳發展,一個十年IT人的選擇之難

有的人一直以來&#xff0c;身體里彷佛住著兩個靈魂。一個靈魂說&#xff1a;人就要拼搏&#xff0c;要奮斗&#xff0c;要實現理想&#xff0c;要留在中國最繁華的城市&#xff0c;感受大都市的生活&#xff0c;實現個人價值&#xff0c;走上人生巔峰&#xff01;另一個靈魂說…

Jenkins 詳細安裝、構建部署 使用教程

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 Jenkins是一個開源軟件項目&#xff0c;是基于Java開發的一種持續集成工具&#xff0c;用于監控持續重復的工作&#xff0c;功能包括&…

GPU并行計算版函數圖像生成器

前幾天技術大牛Vczh同學開發了一個函數圖像繪制程序&#xff0c;可以畫出方程f(x,y)0的圖像。他的原理是用圖像上每一點的坐標帶入函數f得到針對x和y的兩個方程&#xff0c;再用牛頓迭代法求解得到一組點集&#xff0c;然后畫到圖像上。用他的程序可以畫出各種各樣令人驚嘆的方…

完全平方公式、平方差公式、一個數負次方

1.完全平方公式&#xff1a; 兩數和&#xff08;或差&#xff09;的平方&#xff0c;等于它們的平方和&#xff0c;加上&#xff08;或減去&#xff09;它們的積的2倍即完全平方公式 (ab)2a2b22ab 兩數和的完全平方公式&#xff08;完全平方和&#xff09; 與(a-b)2a2b2-2ab …

WSS連接服務器端報錯

錯誤&#xff1a; 1. Firefox 和 Chrome 瀏覽器對SSL證書拒絕的錯誤提示是不一樣的&#xff1a; &#xff08;1&#xff09; Chrome報錯&#xff1a;WebSocket connection failed: Error in connection establishment: net::ERR_CERT_AUTHORITY_INVALID &#xff08;2&#xff…

LogBack 入門實踐

一、簡介 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 LogBack是一個日志框架&#xff0c;它是Log4j作者Ceki的又一個日志組件。 LogBack,Slf4j,Log4j之間的關系 slf4j是The Simp…

20個公司絕對不會告訴你的潛規則

1.入職時的工資高低不重要&#xff0c;只要你努力工作你會得到相應待遇的    我估計幾乎找過工作的人都聽過這句話&#xff0c;當我們確定被聘用跟公司談工資時&#xff0c;他們都會說“如果以后你業績突出、努力工作&#xff0c;你的報酬也會相應增加的”&#xff0c;特別是…

java 復制文件

2019獨角獸企業重金招聘Python工程師標準>>> public class copyFIle { public static void main(String[] args) throws IOException { File source new File("d:/test/1.xml");File des new File("d:/test/ma.txt");InputStream input null;…

Quartz學習資料地址記錄 、Quartz 學習的博客地址記錄

Quartz專欄系列 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1.Quartz學習——Quartz大致介紹&#xff08;一&#xff09; 2.Quartz學習——Quartz簡單入門Demo&#xff08;二&#…

民間75個不傳之密 ,醫院都不知道的秘密

1、頭痛&#xff08;各種頭痛均可&#xff09;&#xff1a; 生白蘿卜汁&#xff0c;每次滴鼻孔兩滴(兩鼻孔都滴)&#xff0c;一日兩次&#xff0c;連用4-5天&#xff0c;可除根。忌吃花椒、胡椒。 2、頭暈&#xff08;頭昏眼花、暈眩&#xff09;&#xff1a; 鴨蛋一個、赤豆2…

Docker最全教程之MySQL容器化 (二十四)

Docker最全教程之MySQL容器化 &#xff08;二十四&#xff09; 原文:Docker最全教程之MySQL容器化 &#xff08;二十四&#xff09;前言 MySQL是目前最流行的開源的關系型數據庫&#xff0c;MySQL的容器化之前有朋友投稿并且寫過此塊&#xff0c;本篇僅從筆者角…

CODING 受邀參加《騰訊全球數字生態大會》

近日&#xff0c;騰訊全年最重要的一場活動——《騰訊全球數字生態大會》于昆明滇池國際會展中心正式舉辦。此次全球數字生態大會是騰訊戰略升級后&#xff0c;整合互聯網數字經濟峰會、云未來峰會、騰訊全球合作伙伴三大行業大會&#xff0c;全新升級打造的行業創新大會。大會…

解決 dockerfile 構建鏡像報錯: [WARNING]: Empty continuation lines will become errors in a future release.

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 只是想自己寫個 dockerfile 用 docker 來部署 rocketmq 的服務。 dockerfile 中要運行多行命令 于是我寫成 RUN 命令a \&&…

第二章:08運算符[比較運算符]

①比較運算符②實例/* 運算符之三&#xff1a;比較運算符 ! > < > < instanceof 結論&#xff1a; 1.比較運算符的結果是boolean類型 2.區分 和 */ class CompareTest { public static void main(String[] args) { int i 10; int j 20; System.out.pr…

Apache版本兼容性問題

Apache 版本2.2.31 版本對于谷歌瀏覽器不兼容、IE8版本可以正常使用 當使用了Apache 高版本的話就解決了 出現以下現象 轉載于:https://www.cnblogs.com/tzhyy/p/10931084.html

王淮經驗談:我的碼農原則

摘要&#xff1a;王淮是Facebook第二位中國籍工程師&#xff0c;也是第一位中國籍研發經理&#xff0c;他一手開創了Facebook的支付安全和客服工具領域。2011年他離開Facebook&#xff0c;回國成為天使投資人。本文是王淮以前寫代碼和做代碼審查時候的一些原則&#xff0c;供大…

centos uwsgi自動調用python2環境,指定uwsgi調用版本

將自己開發好的django項目用uwsgi部署到Linux服務器、當運行uwsgi時出現了uwsgi選擇python版本的問題。因為本機器是在原來的機器上安裝了python3環境和pip3&#xff0c; 使用命令安裝uwsgi: pip3 install uwsgi 一點問題也沒有&#xff0c;使用uwsgi部署項目時 uwsgi --http :…

docker build Dockfile ---- RUN 中 cd 切換路徑失敗 的原因、解決

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1. 我只是想 直接切換到對應目錄下 執行后續命令。 ?????寫法如下&#xff1a; FROM openjdk:8-jre-alpineMAINTAINER JiangYuRU…

米爾電子Zynq UltraScale MPSoC核心板資料介紹

米爾Zynq UltraScale MPSoC核心板&#xff08;MYC-CZU3EG&#xff09;是采用Xilinx新一代Zynq處理器。該核心板是業界最小尺寸Zynq UltraScale 核心板&#xff0c;采用16納米制程&#xff0c;相比Znyq7000系列每瓦性能提升5倍&#xff0c;且單芯片融合4核心Cortex-A53&#xff…