プログラマに激震、C#が「GPU」に対応、シンプルすぎワロタ
■ このスレッドは過去ログ倉庫に格納されています
たったこれだけで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/ マンデルブロ集合を超並列化するとこうなります。
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;
} よく知らんけどすごくね?C#以外で簡単にできる言語あるの?
PythonとかC++とかどうなんだ 速度はCUDA C++でゴリゴリ手動最適化した場合とくらべ83%となっている。 >>4
for文を「Parallel.For」または「Parallel2D.For」に置き換えるだけ Unity民は嬉しいのかしら
PCでコーディングしてiOS用ビルドでもいけるのかね forなんて今更ほとんど使わんよw
Genericに対応してんのかな >>13
Unityはxamarinの頑張り次第やろ NVIDIAのGPUで並列処理するライブラリとしてCUDAってのがあって
この記事はC#からCUDAを使いやすくできるよってことか
pythonにはPyCUDAというのがあって使える
C++はもともとCUDAが対応してる
C#にはこれまでAleaというのを通してCUDAが使われてたようだけど今回のとは全く別? てかなぜradeonは本腰入れてくんねえの?
マイニングとかじゃ超需要できてるくらい倍精度の演算nvidiaより飛びぬけてるみたいじゃん
openclが下火過ぎてダメなのか? >>21
CLEAR ,&HCFFF:POKE &HD000,&H76:DEF USR1=&HD000:A=USR1(0) NVIDIAって事はCUDA専用?
ゲーミングPCなんて持ってないです
とりあえずIntelHDでC#使えるようにIntel様お願いします >>29
PGI CUDA Fortranってのがあるらしい >>29
PGI CUDA Fortranってのがあるらしい for a=0 to 3000
next
return >>36
ニュータイプ専用機が底辺派遣プログラマでも操縦可能になった。 全然わからん
openclとかいうやつ簡単に扱えるようになるんか? 並列演算使う場面なんて科学演算だけじゃね?C#でそんなのやるやついるの? スマホにもGPUはあるよ
ただGLES3.1やVulkanのCpmputeShaderを使う必要があるからCUDAは動かない よくわかんねぇけどNVIDIA買っとけってこったろ? >>44
使えるようにしとけば制御系でもなんでも使うようになるんじゃないの? >>42
最近はこんなのもあるみたい
GPUとSSDがPostgreSQLを加速する〜クエリ処理スループット10GB/sへの挑戦〜 [DB Tech Showcase Tokyo/2017]
https://www.slideshare.net/kaigai/gpussdpostgresql10gbs-db-tech-showcase-tokyo2017 >>43
ならない
その発想のHSAは中間レイヤのHSA ILを使い
GPGPU方面で遅れていた弱小連合が結成したが
ハードウェアベンダーのIntelとNVIDIAが無視し
AMDがHSA ILではなくGCN ISAの命令を推奨し
SamsungとARMがHSA ILを使わず
Quallcomがチップ開発を怠り
GoogleとAppleとMSといったOSベンダーと
OpenCLサイドのKhronosが無視してSPIR-V制定とかした結果事実上空中分解してる >>50
なるほど
訳分からん状況になってるわけね
そりゃopenclは地獄の環境と言われる訳だわ GPUに計算させてるのを画面に繋ぐとぐちゃぐちゃな表示が出るの? #include <stdio.h>
main()
{
public static void Run(double[] a, double[] b, int N)
{
Parallel.For(0, N, i => { a[i] += b[i]; });
}
}
できたぁ! よく分からんけどトップクラスの人や大企業は自分でコード用意するし
それ以下の人はほとんど触らないからトータルで需要がないようなとこなんだろうw >>3
以外なところでJavaScriptとか
gpu.jsってライブラリでわりと簡単に使える ゲームで大量のオブジェクトの当たり判定とかに使えそう MSの実装は教科書通りにやると何もトラブルがないのがすごいけど、中で何やってるかわからん。
DBだと、MySQLや、Oracleは、SQL92の教科書通りで、どういうデータ構造でどういう計算や更新
すると、最初にどこでインデックス抽出やってどこで直接データにアクセスして・・・ってのが判る。
けど、SQL-Serverの統計計算は中で何やっているかわけわからん。
C#もわけわからん。キッチリ変数と型の関連付けして書ききることもできれば、主力サービスの
ASP.NetだとDynamicだらけだし。 俺BASICは得意だから
PRINT #GPU ">>1死ね"
って書いたら、下からパンして文字がドーンな3D描画してくれるようにしろよ >>66
まあUNIXとかの流れを知らなきゃこんなもんじゃない?
スタジオ? なにそれ?みたいな >>70
GPUと聞いてグラフィック用途だと思っちゃうのかわいい >>59
ならないよ。
昔のグラフィックボードは、ドライバを通して、OSのグラフィック関連の処理を一手に引き受けるのみだった。
でもいまのグラフィックボードは、普通のアプリからでも計算命令を受け取り、処理をし、自身のメモリも独自
のプログラムで読み書きできる小型コンピュータに外部モニターへの出力端子がついたようなものになってる。 Parallel.Forの怖さを知らないやつが多すぎる
頑張ってfor分をParallel.Forに直したんすよ
で、プログラムを実行したらタスクマネージャーではCPU使用率100%!
やったぜ劇速プログラムの完成!と思ってストップウォッチ見たら
for文の時よりおせーでやんの
理由がわかんなかったからインテルのサイトに行ったら答えが書いてあったよ
全コア負荷だとターボのクロックが下がるって。。。 >>21
80S31が繋がっている初代88か、mkIIだと
FDD側のZ80まで使ってダブルCPUにする技とかあったな。 >>21
まずディップスイッチの8番を上げてN-BASICにします >>36
食事提供時以外は空いてるコアファイターやボールを使ってタムラを出撃させる >>2
わかるわー
すっげーわかる
あれだよな、やっぱり >>21
まずストップキーを押しながらリセットし
次にVRAMに残っているエロ画像を吸い出します >>5
最適化の余地なしってくらいか
デフォルトではそこそこに速いと また変なおまじない追加して来やがったかw
どんどん俺様言語化して行くな。 >>79
ニヤニヤしちゃう文章書くなよw
電車の中なんだから >>88
C++だと
#pragma omp parallel for
for(i=0;i<10000;i++){
a[i] = i;
} unistd.hはユニバーサルストゥディオエッチの略だからな >>65
Epic大勝利だな
Unreal Engineで内部処理にまでGPUが酷使されてGPUさん死んじゃう_:(´ཀ`」 ∠): c#の実装増やすとか言ってたような言ってなかったような
たしかC++とC#でも記述出来た気がする いまだにGPUをグラフィック以外で使うって思想がよく分かんねえ
いや別に使ってもいいんだけどグラフィックに使わないならGPUを名乗り続ける理由は何なの >>99
グラフィックが豊かになってきてCPUだけでは間に合わないな
↓
グラ専用のGPUを作ったらいいんじゃないかな→グラボ爆誕
↓
グラボのパワー余ってることあるよね
↓
グラボ「わい、グラだけじゃなく普通の計算もやるで!単純計算得意やし!」 ハンディターミナルを弄ることになったんだが、
C#って覚える価値ある言語なのか? >>100
なるほど
余ってるとこ使えまっせって話なのね
それなら納得
最近スパコンにもGPU使うぜみたいなニュース見て混乱してた プログラムできる奴は別の次元からやってきた生命体だとおもっている VB.NETの廃止とVBAをC#Scriptに変更してくれ >>102
PCにグラボ10枚指して
こつこつビットコイン掘ってる奴もいるんだぜ グラフィックアクセラレーターなのかビデオカードなのかグラフィックボードなのか迷うわ >>107
もともとワークステーションでやってたCADとかをPCでやるときに
グラ性能が足りなすぎたんで、それを補うハードウェアが「グラフィックアクセラレータ」
それとは関係なく、AT互換機にはビデオの回路そのものがなかったから
モニタと繋ぐ為に必要だったのが「ビデオカード」
後に統合チップセットが出てビデオカードはお役御免したけど
それでは足らず後付するグラフィックアクセラレータが「グラフィックボード」 input a
input b
c=a+b
print c
end もうグラフィックと関係なくなりつつあるんだからいつまでもGPUと呼び続けるのはいかがなものか Parallel.ForってもともとマルチコアCPUで並列処理させる命令だったよね たしかに
だったら最初から計算専用のGPU?をCPUとセットにしとけよと思う ⊂二( ^ω^≡^ω^)⊃⊂二( ^ω^≡^ω^)人(^o^ )┓ >>79
くっそこんなので笑ってしまった
俺の初笑い返せこの野郎 C♯はパラレル処理とかドンドン楽になるよね
LinQあたりからマジで見直した これはC#でプログラムを書いていると
勝手にGPUを使ってくれるって事なの? >>93
嘘情報を安易に書かないようにね
スレタイみてこい でもジャップITのピラミッド構造だとジジイコーダにコード規約合わせないといけないから便利な文法書けないよね >>101
覚える?
あんなの他の言語やってたら誰でもできるだろ >>120
まぁそうなんだけど
DLL読み込むだけのライブラリと違って
Visual studioにAltimesh Hybridizer Extensionとかいう拡張入れないといかんのよね でも、OSのパッチとCPUドライバのパッチで動かないんでそ? >>13
Unityは最新版でも笑っちゃうくらい昔のc#だからこれの恩恵ゼロ
まあ色々のプラットホームに対応しないといけないから
どうしても最低位レベルに合わせないと動かなくなっちゃうからね。 >>114
昔68LC040使いだった俺からしたらコプロセッサーイコールFPUだからなんか違和感あるな
アクセラレーターの方がしっくりくる GeForce限定じゃ俺のQuadroノートじゃ動かないか ライブラリじゃなくて、コンパイラ自体が対応しないとならないコードだから、まるでライブラリ関数みたいな記述は感心しない。 >>36
ハロに操縦を手伝ってもらえるようになった 昔2ちゃんねるのスレでスーパーマリオかテトリスが僅か数行のプログラムコードで作られてるって話を思い出した これプログラミング、言語の話ではなく、コンパイラの話だろ。
ParallelForというのをつかったとしても、GPUがない場合とかCPUつかうかもしれないし。
従来型のOLD_Forにして、こっちもForに置き換えれば、
従来型のプログラミングとなんの違いもない。
それからしてもプログラミングの話ではない。 プログラミングの大先生に教えて欲しいんだけど、コントロールが腐るほどあるUIの描画を速くする方法なんかないですかね
リジュームレイアウトとかそういうのじゃなくて…
Windowsの仕組み上マルチスレッドには出来ないもんで。 >>137
キリコの名字のキュービィーは実はクイック・ベーシックQBのこと コンパイラでビルドしてini編集すりゃいいんだろ?
楽勝だな >>14
レイアウト変更が行われたか確認するロジックが回り続けてるからそうなるんじゃないの?
だったらレイアウトチェックをイベントドリブンにすれば? >>141
IEオブジェクトを作る
IE11になるようにレジストリいじる
以下、htmlとcssで好きなだけコントローラー作る >>75
なんでGPUに投げてるのにCPUに負荷がかかるの? >>149
それって間接的にDirext2DとDirectWriteとかでGPU使ってるから?
GPUが古い環境だと逆におもくなりそうだが >>151
知らんけどブラウザのほうが軽そうじゃん CやC++なら知ってるけど
これがいみわからん
Parallel.For(0, N, i => { a[i] += b[i]; }); c#に慣れちゃうとc++が苦痛すぎて会社休む(ヽ''ω`) >>102
気象関係とや薬剤関係だと緻密な画像処理も必要となる
それとは別に
マイニングという特殊用途が生まれて、単純計算の処理だけ行うマイニング専用機を構築する奴らが爆誕した >>154
グラボを使って
for文の処理を行う
じゃなかったっけ ラムダ式って未だに理解できないんだが
ポインタ並に意味わからん >>137
輸送手段でしかなかったトレーラーに戦闘中も乗れるようになり早く動けるようになった
もう少し分かりやすく例えると、手りゅう弾の安全ピンがようやく外れた Parallelなんちゃらって書けばGPUに命令発行できると、ほへー >>167
printfとか標準関数が使えるようになる >>154
for(i = 0; i < N; i++){
a[i] += b[i];
}
を並列処理しますよってだけ >>167
最初のうちはそう思っておけばおk
自分でソースファイルを複数に分けて書くようになったら理解できるようになる >>167
fputsだののスタンダードアイオー(標準入出力)関連の宣言がされてる
この宣言がないとコンパイル時にエラーになる。実際の関数ライブラリとのアドレス解決はリンカーが行う
つまり必須のおまじない >>154
C++知ってるならラムダ式知ってるだろ!いい加減にしろ! >>167
入ってるからCなんじゃないの
ライブラリが統一されてなきゃ意味分からんやん
自分で作るの面倒臭いからCとかライブラリ使うんだろ 並列処理させると返ってくる結果の順が保証されないけどどうすんの >>179
順序が必要ならジョブを大きくする
ジョブが大きくなりすぎるなら連番でも発行するしかないね >>141
コントロールごとにハンドルが割り当てられるwinformsではなく
ルートコントロールのみにハンドル割り当てられる&描画処理にdirectX使用されるwpfではどう? >>179
順序が大切ならロックとかセマフォアとかミューテックスとかいくらでもある同期手段使えばいいじゃん >>183
それはもう並列計算の意味がない気がする
I/O処理のワーカースレッドの同期待ちとかなら別だけど よく分かんないけどCPUの処理にGPUが一緒に処理してくれるようになるの? Webアプリケーションばかり書いてるワイ、低みの見物 よくわからんがこれでCPU依存の上最大4コアしか使ってくれないマイクラが爆速になるのか?
Win10版はCで書かれてて軽快なんだが本家はJavaだからクソ重い。なんとかしてくれ。グラボが必要なら金は出すぞ >>111
今でもマルチコア処理用だと思うが。マルチコアを使うのかGPUも使うのかはParallel文だけではわからない。
たぶんマルチコアしか使わないんじゃないかな。GPUを積極的に使うならGPUライブラリを使わないとだめな気がする。 AMPとかBOLTもこんな感じじゃなかったっけ
よさげに見えるけど適用案件見つけるのたいへんなんよ >>174
ラムダ式とdelegateが混じってるから? geforceは並列計算やらせるとパソコンがカクツク >>173
別に必須ではないよ
あくまでUnix系での話だから
別のOSならそれに合わせて代わりの標準入出力用意してたりする >>194
仕様です
グラフィックスとGPGPUの並列実行はRadeonじゃないと出来ませんから
GeforceがPentium4ならRadeonはSMT付きのPentium4
ただゲームやらせてるだけならGeforceの方がいいだろうけど >>141
よくわからんけど
WPFでも遅いならもう
Direct2Dでフルスクラッチしか無くね? >>191
なでしこ はかれこれ10年ぐらい使ってます
エクセルとよく連携させてる 従来のソースコードの書式変えずにコンパイラが勝手にCPU/GPUに振ったバイナリ吐いてくれないの?
HSAとかそういうものじゃなかったの? I want Quick Basic 4.5 for PC9801 ■ このスレッドは過去ログ倉庫に格納されています