プログラマに激震、C#がGPUに対応、シンプルすぎワロタ

1: Socket774 2018/02/01(木) 13:23:12.54 ID:pugQSj7M0 BE:422186189-PLT(12015)
たったこれだけでGPUを使った超並列演算ができるようになりました。

[EntryPoint]
public static void Run(double[] a, double[] b, int N)
{
Parallel.For(0, N, i => { a[i] += b[i]; });

https://devblogs.nvidia.com/hybridizer-csharp/

2: Socket774 2018/02/01(木) 13:24:02.94 ID:pugQSj7M0
マンデルブロ集合を超並列化するとこうなります。

public static void Run(float[,] result)
{
int size = result.GetLength(0);
Parallel2D.For(0, size, 0, size, (i, j) => {
float x = fromX + i * h;
float y = fromY + j * h;
result[i, j] = IterCount(x, y);
});
}

public static float IterCount(float cx, float cy)
{
float result = 0.0F;
float x = 0.0f, y = 0.0f, xx = 0.0f, yy = 0.0f;
while (xx + yy <= 4.0f && result < maxiter) {
xx = x * x;
yy = y * y;
float xtmp = xx – yy + cx;
y = 2.0f * x * y + cy;
x = xtmp;
result++;
}
return result;
}

Sponsored Link

4: Socket774 2018/02/01(木) 13:25:07.90 ID:DwFg/p3/0
日本語でOK

7: Socket774 2018/02/01(木) 13:26:28.32 ID:pugQSj7M0
>>4
for文を「Parallel.For」または「Parallel2D.For」に置き換えるだけ

5: Socket774 2018/02/01(木) 13:25:17.86 ID:pugQSj7M0
速度はCUDA C++でゴリゴリ手動最適化した場合とくらべ83%となっている。

25: Socket774 2018/02/01(木) 13:47:04.96 ID:tC2PKJ6X0
>>5
十分やな

86: Socket774 2018/02/01(木) 19:40:51.38 ID:A+EFSGDb0
>>5
最適化の余地なしってくらいか
デフォルトではそこそこに速いと

3: Socket774 2018/02/01(木) 13:24:26.13 ID:+avrImtY0
よく知らんけどすごくね?C#以外で簡単にできる言語あるの?
PythonとかC++とかどうなんだ

63: Socket774 2018/02/01(木) 16:47:36.42 ID:NrBsnAYv0
>>3
以外なところでJavaScriptとか
gpu.jsってライブラリでわりと簡単に使える

9: Socket774 2018/02/01(木) 13:27:43.67 ID:kqs0ndf60
なんで今頃?10年前から対応しておけよ

83: Socket774 2018/02/01(木) 19:34:31.86 ID:dMmfcKOZ0
わかるわー
すっげーわかる
あれだよな、やっぱり

13: Socket774 2018/02/01(木) 13:31:41.38 ID:LNgjiYI30
Unity民は嬉しいのかしら
PCでコーディングしてiOS用ビルドでもいけるのかね

130: Socket774 2018/02/02(金) 12:26:30.15 ID:lj74xSTM0
>>13
Unityは最新版でも笑っちゃうくらい昔のc#だからこれの恩恵ゼロ
まあ色々のプラットホームに対応しないといけないから
どうしても最低位レベルに合わせないと動かなくなっちゃうからね。

15: Socket774 2018/02/01(木) 13:32:33.24 ID:2s2ZuUyT0
forなんて今更ほとんど使わんよw
Genericに対応してんのかな

19: Socket774 2018/02/01(木) 13:36:06.88 ID:HEJ1AsWj0
マジカよ。テスラ100枚買ってくる。

21: Socket774 2018/02/01(木) 13:39:44.61 ID:1njipzMe0
で、俺のN88BASICだと、どう書くの?

64: Socket774 2018/02/01(木) 16:50:14.53 ID:TAvFEPsd0
>>21
バージョンによって違うんじゃね?

79: Socket774 2018/02/01(木) 19:01:20.93 ID:NrBsnAYv0
>>21
まずディップスイッチの8番を上げてN-BASICにします

91: Socket774 2018/02/01(木) 20:16:32.19 ID:VgmBuZpw0
>>79
ニヤニヤしちゃう文章書くなよw
電車の中なんだから

117: Socket774 2018/02/01(木) 23:51:05.05 ID:0JNkvsAd0
>>79
くっそこんなので笑ってしまった
俺の初笑い返せこの野郎

27: Socket774 2018/02/01(木) 13:57:00.66 ID:8bfYoU530
NVIDIAって事はCUDA専用?
ゲーミングPCなんて持ってないです
とりあえずIntelHDでC#使えるようにIntel様お願いします

22: Socket774 2018/02/01(木) 13:41:30.07 ID:+avrImtY0
NVIDIAのGPUで並列処理するライブラリとしてCUDAってのがあって
この記事はC#からCUDAを使いやすくできるよってことか
pythonにはPyCUDAというのがあって使える
C++はもともとCUDAが対応してる
C#にはこれまでAleaというのを通してCUDAが使われてたようだけど今回のとは全く別?

23: Socket774 2018/02/01(木) 13:45:42.01 ID:uo9l8Np70
てかなぜradeonは本腰入れてくんねえの?
マイニングとかじゃ超需要できてるくらい倍精度の演算nvidiaより飛びぬけてるみたいじゃん
openclが下火過ぎてダメなのか?

29: Socket774 2018/02/01(木) 13:58:48.76 ID:geW4X/Xt0
GPUでFORTRANできます?

30: Socket774 2018/02/01(木) 14:02:39.96 ID:8bfYoU530
>>29
PGI CUDA Fortranってのがあるらしい

34: Socket774 2018/02/01(木) 14:04:22.95 ID:7i3yZwaO0
神は言っている
これで掘る運命だと

36: Socket774 2018/02/01(木) 14:05:55.19 ID:arwYwpZH0
ガンダムで例えてくれ

39: Socket774 2018/02/01(木) 14:10:47.78 ID:68KflGJ40
>>36
ニュータイプ専用機が底辺派遣プログラマでも操縦可能になった。

80: Socket774 2018/02/01(木) 19:14:57.04 ID:HApmNpUK0
>>36
食事提供時以外は空いてるコアファイターやボールを使ってタムラを出撃させる

135: Socket774 2018/02/02(金) 13:35:25.49 ID:kg5HK+230
>>36
ハロに操縦を手伝ってもらえるようになった

42: Socket774 2018/02/01(木) 14:15:02.66 ID:xAcHwHbG0
GPUとかPCしか使えないじゃん

49: Socket774 2018/02/01(木) 14:38:07.81 ID:po85tDcj0
>>42
最近はこんなのもあるみたい

GPUとSSDがPostgreSQLを加速する~クエリ処理スループット10GB/sへの挑戦~ [DB Tech Showcase Tokyo/2017]
https://www.slideshare.net/kaigai/gpussdpostgresql10gbs-db-tech-showcase-tokyo2017

44: Socket774 2018/02/01(木) 14:22:18.69 ID:dl8GknlQ0
並列演算使う場面なんて科学演算だけじゃね?C#でそんなのやるやついるの?

48: Socket774 2018/02/01(木) 14:38:06.69 ID:YfDEXLI/0
>>44
使えるようにしとけば制御系でもなんでも使うようになるんじゃないの?

53: Socket774 2018/02/01(木) 14:52:50.73 ID:mc6GVrNf0
>>48
故障確率上がりそう

47: Socket774 2018/02/01(木) 14:33:58.66 ID:Gyo9U71d0
よくわかんねぇけどNVIDIA買っとけってこったろ?

59: Socket774 2018/02/01(木) 15:28:13.87 ID:LYzY9UV/0
GPUに計算させてるのを画面に繋ぐとぐちゃぐちゃな表示が出るの?

74: Socket774 2018/02/01(木) 17:41:31.28 ID:U1/k17MR0
>>59
ならないよ。
昔のグラフィックボードは、ドライバを通して、OSのグラフィック関連の処理を一手に引き受けるのみだった。
でもいまのグラフィックボードは、普通のアプリからでも計算命令を受け取り、処理をし、自身のメモリも独自
のプログラムで読み書きできる小型コンピュータに外部モニターへの出力端子がついたようなものになってる。

61: Socket774 2018/02/01(木) 16:00:49.60 ID:L/ZDQKzk0
よく分からんけどトップクラスの人や大企業は自分でコード用意するし
それ以下の人はほとんど触らないからトータルで需要がないようなとこなんだろうw

65: Socket774 2018/02/01(木) 16:50:51.72 ID:O9in0J6U0
ゲームで大量のオブジェクトの当たり判定とかに使えそう

97: Socket774 2018/02/01(木) 21:21:59.57 ID:7MIPEX1g0
>>65
Epic大勝利だな
Unreal Engineで内部処理にまでGPUが酷使されてGPUさん死んじゃう_:(´ཀ`」 ∠):

82: Socket774 2018/02/01(木) 19:27:46.17 ID:ciPHpuJ30
凄い!(凄いのか?)

90: Socket774 2018/02/01(木) 20:14:52.03 ID:O5qdEpiH0
また変なおまじない追加して来やがったかw
どんどん俺様言語化して行くな。

99: Socket774 2018/02/01(木) 21:30:46.20 ID:yXOlY99K0
いまだにGPUをグラフィック以外で使うって思想がよく分かんねえ
いや別に使ってもいいんだけどグラフィックに使わないならGPUを名乗り続ける理由は何なの

100: Socket774 2018/02/01(木) 21:37:54.42 ID:NrBsnAYv0
>>99
グラフィックが豊かになってきてCPUだけでは間に合わないな

グラ専用のGPUを作ったらいいんじゃないかな→グラボ爆誕

グラボのパワー余ってることあるよね

グラボ「わい、グラだけじゃなく普通の計算もやるで!単純計算得意やし!」

102: Socket774 2018/02/01(木) 21:40:09.91 ID:yXOlY99K0
>>100
なるほど
余ってるとこ使えまっせって話なのね
それなら納得
最近スパコンにもGPU使うぜみたいなニュース見て混乱してた

156: Socket774 2018/02/03(土) 14:42:14.75 ID:qCBOz2bw0
>>102
気象関係とや薬剤関係だと緻密な画像処理も必要となる

それとは別に
マイニングという特殊用途が生まれて、単純計算の処理だけ行うマイニング専用機を構築する奴らが爆誕した

103: Socket774 2018/02/01(木) 21:44:40.19 ID:xZdIXUct0
プログラムできる奴は別の次元からやってきた生命体だとおもっている

107: Socket774 2018/02/01(木) 21:52:14.98 ID:GzNGP9Rk0
グラフィックアクセラレーターなのかビデオカードなのかグラフィックボードなのか迷うわ

108: Socket774 2018/02/01(木) 22:00:03.81 ID:NrBsnAYv0
>>107
もともとワークステーションでやってたCADとかをPCでやるときに
グラ性能が足りなすぎたんで、それを補うハードウェアが「グラフィックアクセラレータ」

それとは関係なく、AT互換機にはビデオの回路そのものがなかったから
モニタと繋ぐ為に必要だったのが「ビデオカード」

後に統合チップセットが出てビデオカードはお役御免したけど
それでは足らず後付するグラフィックアクセラレータが「グラフィックボード」

179: Socket774 2018/02/03(土) 19:22:32.41 ID:M2+kedxr0
並列処理させると返ってくる結果の順が保証されないけどどうすんの

181: Socket774 2018/02/03(土) 19:34:13.54 ID:pfW0G/0B0
>>179
順序が必要ならジョブを大きくする
ジョブが大きくなりすぎるなら連番でも発行するしかないね

183: Socket774 2018/02/03(土) 19:45:00.75 ID:Qo98PRu+0
>>179
順序が大切ならロックとかセマフォアとかミューテックスとかいくらでもある同期手段使えばいいじゃん

184: Socket774 2018/02/03(土) 19:52:57.79 ID:pfW0G/0B0
>>183
それはもう並列計算の意味がない気がする
I/O処理のワーカースレッドの同期待ちとかなら別だけど

110: Socket774 2018/02/01(木) 22:16:10.26 ID:c2Pcrqwp0
もうグラフィックと関係なくなりつつあるんだからいつまでもGPUと呼び続けるのはいかがなものか

114: Socket774 2018/02/01(木) 22:28:31.76 ID:ugW7XHAI0
>>110
コプロセッサかアクセラレータだな

132: Socket774 2018/02/02(金) 12:45:51.01 ID:KqQhZbqQ0
>>114
昔68LC040使いだった俺からしたらコプロセッサーイコールFPUだからなんか違和感あるな
アクセラレーターの方がしっくりくる

『プログラマに激震、C#がGPUに対応、シンプルすぎワロタ』へのコメント

  1. 名前:名無しの自作er 投稿日:2018/02/03(土) 22:48:46 ID:a7a0b7eec 返信

    いちこめ

  2. 名前:名無しの自作er 投稿日:2018/02/03(土) 23:00:41 ID:9bea68e3c 返信

    GPUサポートが出るのはデカイな
    JVMのOpenCL系の連携ももうちょい頑張ってはくれんかね

    • 名前:名無しの自作er 投稿日:2018/02/04(日) 03:34:22 ID:952144a7e 返信

      Project Sumatraってのがあったけど結局取りやめになったみたいだね

  3. 名前:名無しの自作er 投稿日:2018/02/03(土) 23:29:42 ID:0dcd16404 返信

    これ、C++低水準すぎて辛い、pythonから呼ぶとオーバーヘッド重すぎ、って人には意外と使いやすいかもしれない。アルゴリズムの研究とかやる学生向きかも
    ただコンパイル・実行できる環境整えるのと、デバッグするのが死ぬほど面倒くさかったりしそう

  4. 名前:名無しのAMDer@Y市ASH区 投稿日:2018/02/03(土) 23:33:15 ID:e1f1ee0ba 返信

    私にはちんぷんかんぷんなのだ。

  5. 名前:名無しの自作er 投稿日:2018/02/03(土) 23:33:54 ID:63253287a 返信

    2年くらい前にRADEONでCUDAが使えるってライブラリをAMDが公開してたけど更新されてるのかね

    • 名前:名無しの自作er 投稿日:2018/02/03(土) 23:59:32 ID:f29da6bfb 返信

      Ryzenの養分になったのでは

    • 名前:名無しの自作er 投稿日:2018/02/04(日) 00:24:17 ID:d4b19a23f 返信

      もうそろそろROCm 2.1が公開される頃合いじゃないかな?
      だけどぽん投げは今のところ無理とのこと。速度は最適化されてない状態で出てもCUDAの8割ほどだった憶え

  6. 名前:名無しの自作er 投稿日:2018/02/03(土) 23:37:45 ID:39b945e44 返信

    囲い込みは性能がまだ拮抗してた時代から革ジャンの得意分野だからなあ

  7. 名前:名無しの自作er 投稿日:2018/02/03(土) 23:39:20 ID:450c2c0e2 返信

    CUDAのみと聞いていつものパターンだと思った
    OpenCLじゃなぜダメなんだ

    • 名前:名無しの自作er 投稿日:2018/02/03(土) 23:54:28 ID:0dcd16404 返信

      nvidiaが出してるのに無茶言うなよ。あとC#からopenCL叩けるのはすでに色々あるはず

    • 名前:名無しの自作er 投稿日:2018/02/04(日) 03:26:00 ID:de09ef8f4 返信

      OpenCLを叩く方法はもうあるし、OpenCLとCUDAじゃ速度差があり過ぎて話にならん

  8. 名前:名無しの自作er 投稿日:2018/02/03(土) 23:51:49 ID:df785bf4c 返信

    もう言われてるけど何に使うのっていうのがあるな。
    今までシェーダーで書いてたあの短いグラフィック用プログラムレベルの
    計算を棒大な回数繰り返せるとして、一般利用や一般企業(ビジネス向け)ですぐに用途が思いつかない。

    • 名前:名無しの自作er 投稿日:2018/02/04(日) 00:15:59 ID:2a96871b3 返信

      機械学習系の処理を手軽に実装する用じゃないかな
      新規に論文出てきたのを試験的に実装したり既存のコードに手を入れたりしようと思った時にCUDAで自前でやるのは厳しいからCPU任せにしているコードはけっこう多い

    • 名前:名無しの自作er 投稿日:2018/02/04(日) 00:22:33 ID:da9b96e78 返信

      一般人の皆さんがそういうことを考えなくて済むようにするために使うんです・・・
      今はちょっと大きくて気の利いた会社なら多変量解析をビジネスに活用するとか普通にやってるけど、その背後でこういうものが動いてる(かもしれない)訳さ
      コンパイラ作れって言われたら99%のプログラマは途方に暮れるけど、作り方わからなくてもコンパイラ使えるだろ? それと同じよ。CUDAなんてのはブラックボックスの中身を書くためのツール

  9. 名前:名無しの自作er 投稿日:2018/02/04(日) 00:05:28 ID:a9b34fbad 返信

    C#、JS使い趣味グラマの俺、なんに使うのかさっぱり

  10. 名前:Xeon 投稿日:2018/02/04(日) 00:11:20 ID:e26c8f00c 返信

    Unity使ってスクリプト書いてるけど、まあ関係ないか。

  11. 名前:名無しの自作er 投稿日:2018/02/04(日) 00:55:47 ID:ab69b8e26 返信

    簡単に言うとまたRedeonが差をつけられちゃったってこと?( ;∀;)

    • 名前:コア間レイテンシ君ウゼェ 投稿日:2018/02/04(日) 08:45:56 ID:11890fdf7 返信

      コア間レイテンシ君はAMDに親殺されたの?
      ついでに言えばRADEON(OpenCL)vs Geforce(CUDA)のGPGPU対決の場合だと理論上RADEONの方が勝つぞ。ただOpenCLのあまりの難易度にCUDAでやる方が断然マシ。

  12. 名前:名無しの自作er 投稿日:2018/02/04(日) 01:40:08 ID:433dd3d54 返信

    GPUの呼び名を変えて、”parallel computing unit(並列計算器)”とか”Large Scale Computing Device(大規模演算装置)”とかにしたどうか。

    • 名前:名無しの自作er 投稿日:2018/02/04(日) 07:01:39 ID:d4b19a23f 返信

      一般名称がグラフィックスプロセッシングユニットであるだけで、そっち方面では大抵アクセラレーターで通ってるから問題ないでしょ

  13. 名前:名無しの自作er 投稿日:2018/02/04(日) 01:44:43 ID:a743d4bfb 返信

    openCLさんwwww
    てかGPGPUって立派な名前があるやろ

  14. 名前:名無しの自作er 投稿日:2018/02/04(日) 04:57:00 ID:950b8803b 返信

    大規模大量処理ならFPGAとかTeslaなんだけど、事務系機器混じる一般向けではそんな選択肢はオーバースペックかつ高額で費用対効果上出来ない。
    といった今まで指加えてた微妙な領域(意外と多い)では使われるね。

    まあC#はIDE含めて確率高いミスやバグを減らす方向だね。
    null非許容(アンダース氏が昔なんとかしたいと言ってた)は驚いたが。

  15. 名前:名無しの自作er 投稿日:2018/02/04(日) 05:29:38 ID:67ace8dfe 返信

    地味にC#は並列処理がしっかり設計されてるから
    これは良いな
    C#のParallelクラスは結構前からあるが
    CPUで使うには使い所が余り無くて腐れ気味だったので
    GPUと連携できるのは良いな

    ただもっとやるならF#の方が良い
    F#は設計段階から並列処理に考慮した設計
    元ソース読んだら一応対応してるみたいだが
    何故C#ソースでサンプル書いたんだか

  16. 名前:名無しの自作er 投稿日:2018/02/04(日) 05:29:55 ID:47747e691 返信

    GPUは行列の計算がCPUに比べて早くて
    if文や割り算が苦手なんだっけ?

  17. 名前:名無しの自作er 投稿日:2018/02/04(日) 07:55:31 ID:76cfd2f30 返信

    GPUの呼び名はGPUのままでいいでしょ
    Graphic Processor UnitからGeneric Processor UnitとかGeneral Processor Unitに変わるだけだ

:)