【GPGPU】くだすれCUDAスレ pert2【NVIDIA】

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
CUDA使いが優しくコメントを返しますが、
お礼はCUDAの布教と初心者の救済をお願いします。

CUDA・HomePage
http://www.nvidia.com/cuda

関連スレ
GPUで汎用コンピューティングを行うスレ
http://pc11.2ch.net/test/read.cgi/tech/1167989627/
GPGPU#3
http://pc12.2ch.net/test/read.cgi/tech/1237630694/
2デフォルトの名無しさん:2009/10/08(木) 19:32:36
3デフォルトの名無しさん:2009/10/08(木) 19:33:30
前スレ

【GPGPU】くだすれCUDAスレ【NVIDIA】
http://pc12.2ch.net/test/read.cgi/tech/1206152032/

忘れてた・・・。
4デフォルトの名無しさん:2009/10/08(木) 23:06:10
pert2という時点で>>1の頭が超低レベルであることがわかっちゃうけどいちおういっておこう乙
5デフォルトの名無しさん:2009/10/09(金) 00:32:17
>>1さんの「超低レベル」というお言葉に甘えて
インストール以前の質問なんですが、

普通にPCを使ってるときのグラフィックボード用のドライバと
CUDAドライバって別物ですよね?

http://www.a2art.com/?p=399
これの「ドライバは特に入れなくてok」ってどゆこと?
6デフォルトの名無しさん:2009/10/09(金) 09:46:30
>>5
リンク先を読まずに当て推量で回答。

リビジョンの違いこそあれ、原則同じもの。
勿論、対応さえしていればどちらを使っても同じ。
逆に、NVIDIAのドライバが全く入っていないのなら入れる必要あり。
7デフォルトの名無しさん:2009/10/09(金) 18:25:44
>>5
取り合えず最新のドライバいれて、CUDAツールキットを入れればおk
リンク読んでねえけど
85:2009/10/09(金) 21:08:40
レスサンクスです

具体的に言うとですね。
GeForce 9500M GT の入ったモニタ一体型VAIOがありまして、
それでCUDAってみようと思ったのですが、
CUDAドライバがうまくインストールできなくて、
とりあえず、ツールキットとSDK入れて、
bandwidthtestしてみたら、
認識できるGPUがないとかなんとか(今手元にないのでスマソ)
言われたんですよね。
やっぱCUDAドライバ入れなきゃいけないのかな。
9デフォルトの名無しさん:2009/10/09(金) 22:29:43
>>8
モバイル版のドライバじゃないとけないんじゃね?
105:2009/10/09(金) 23:28:23
Mってのがモバイルみたいですね
ノートじゃないから、きづかなかった

ちょっといろいろやってみます
ありがと
11デフォルトの名無しさん:2009/10/14(水) 00:00:52
画像処理なんかのサンプルを見ると
メモリ転送を行っていないのにカーネル呼び出しの引数になり
GPU側で使われている変数があるのですが
どのメモリに格納されているのでしょうか

filter_kernel<<<grid, block>>>(d_result, d_data, width);
こんな感じでwidthのメモリ転送を明示的に行っていないのに使用されています
12デフォルトの名無しさん:2009/10/14(水) 01:08:33
言葉じゃよく判らん。 もちっと例くれ。
あるいは誰でもダウンロードできるサンプルで説明してくれ
13デフォルトの名無しさん:2009/10/14(水) 01:20:42
まぁ,
__device__
__constant__
__shared__
のいずれかの修飾子の変数が予め確保されてるんだろなー・・・
14デフォルトの名無しさん:2009/10/14(水) 20:18:42
>>11
配列でない引数はレジスタに入るんじゃないの
15デフォルトの名無しさん:2009/10/15(木) 00:02:51
>>12
http://developer.download.nvidia.com/compute/cuda/sdk/website/samples.html
ここのboxfilerというサンプルに載っています
boxfilter_x、boxfilter_yというカーネルを呼び出しているのですが、width,height,radiusが
メモリ転送されていないにもかかわらず引数として使われています

>>14
レジスタでしたか
希少なのでコンスタントメモリあたりで代用したほうがよさそうですね
16デフォルトの名無しさん:2009/10/15(木) 00:36:03
引数は勝手に転送される
格納場所はLocal Memory
17デフォルトの名無しさん:2009/10/15(木) 00:45:45
>>16
ありがとうございます
助かりました
185:2009/10/15(木) 15:35:43
相変わらずCUDAれません(;o;

ツールキットとSDKはちゃんとインストールできているようです。

CUDA2.2を入れようとしているのですが、
http://www.nvidia.co.jp/object/cuda_get_jp.html
ここの
Windows Vista 64ビット 185.85用 NVIDIA ドライバ

Windows Vista 64ビット 185.85用 NVIDIA ノートブックドライバ
もはいりません。
一見インストールうまくいくのですが、再起動してデスクトップ右クリックから
NVIDIAコントロールパネル見ても、相変わらずForceWareのバージョンは176.76のままです。

nvcc -Vはうごきますが、bandwidthTestをすると
no CUDA-capable device is availableと言われます

http://www.nvidia.co.jp/content/DriverDownload-March2009/confirmation.php?url=/Windows/185.85/185.85_notebook_winvista_64bit_whql.exe&lang=jp&type=GeForce%20M
ここの一番下にVAIOは対象外って書いてあるから、VAIOじゃだめなのかな、、、
19デフォルトの名無しさん:2009/10/15(木) 15:50:05
それかもね。ご愁傷様。
205:2009/10/15(木) 18:04:53
どんどんダウングレードして、2.0用のCUDAドライバ入れたら入った。
そしたら、今度はなぜか2.2のツールキットとSDKがアンインストールできないヽ(`Д´)ノ
エラー6003でぐぐっていろいろやったけど、できない。
アンインスコしないで、2.0インストールしたらまずいですよねぇ

連投スマソ
21デフォルトの名無しさん:2009/10/15(木) 18:26:01
アンインストールしなくても医院で内科医。
225:2009/10/15(木) 21:28:37
>>21
あなたを信じてインスコしたら、
2.0のインストーラーが自動的に2.2をアンインスコしてくれました。
無事2.0環境整いました。
どうもでした(^^
23デフォルトの名無しさん:2009/10/16(金) 03:15:22
多倍長整数使いたいときは自分で作るしかないん?
24デフォルトの名無しさん:2009/10/16(金) 09:54:23
cudaに多倍長整数ライブラリは付属していないので、そういうことになりますね。
25デフォルトの名無しさん:2009/10/17(土) 01:17:37
for文のネストにどこまで耐えられるのかがわからない\(^o^)/ムリポ

CUDAのスタックって案外少ない?
ハードウェアによってまちまち?
26,,・´∀`・,,)っ-○○○:2009/10/17(土) 01:23:49
束胃腸やるのはいいが、そもそもキャリーアップフラグとかあったっけ
27デフォルトの名無しさん:2009/10/18(日) 17:41:26
>>25
スタックはないです
28デフォルトの名無しさん:2009/10/18(日) 21:11:14
>>25
template使った再帰もどきとかやらない限り
心配することはないかと思われる。
29デフォルトの名無しさん:2009/10/18(日) 21:25:31
CUDAカーネルのルーチンはインラインとして扱われるんで、スタックなし。

んでもって、レジスタが使用できないデータタイプだったり、レジスタが枯渇してたりすると、ローカルメモリ(デバイスメモリ)を使用しだすので、パフォーマンスが一気に低下するんで心配してください。
30デフォルトの名無しさん:2009/10/18(日) 21:47:56
25ですが,みなさんありがとうございます.
最近になってサンプルコードをじっくり読み始めましたが,
自分のやろうとしてるくらいのことは素直に出来そうで安心です.
んでもって,もう少しアーキテクチャを知らないといかんな...
31デフォルトの名無しさん:2009/10/20(火) 02:09:58
CPU側のプログラミングにインテルのiccを使いたいのだけど、どこかにやり方は載っていませんでしょうか?
OSはWindowsXPです。
32デフォルトの名無しさん:2009/10/20(火) 04:59:45
>>31
ソース分けてオブジェクトリンクすれば?
33デフォルトの名無しさん:2009/10/20(火) 19:12:31
>>31
つか勝手に使えばいいじゃん
34デフォルトの名無しさん:2009/10/22(木) 15:51:00
CUDA2.0入れてVS2005でtemplateビルドしたら
LINK : fatal error LNK1181: 入力ファイル 'cutil32D.lib' を開けません。
って言われます
VISTA64版なので、cutil64D.libはあっても32はないのですが、、
どこを修正すればいいのかもわかりません。
ちなみにVSも使ったことない初心者です
どうしたらよいでしょう?
35デフォルトの名無しさん:2009/10/22(木) 19:38:02
>>34
上のツールバーの真ん中の方にWin32となっているところをx64に変更。
そもそも64bit用のツールをインストールしているかどうか・・・・。
3634:2009/10/22(木) 23:00:43
>>35
レスサンクス

x64に変更したら、ビルドがスキップされました、、、
プログラマでもないのに、突然仕事でCUDAやってる俺涙目
聞ける人もほとんどいない

ちなみにVSのバージョンは
Microsoft Visual Studio 2005
Version 8.0.50727.867 (vsvista.050727-8600)
Microsoft .NET Framework
Version 2.0.50727 SP2
でつ
37デフォルトの名無しさん:2009/10/23(金) 02:28:17
スレ違い、と言うか人生の道を踏み外したな…。
3834:2009/10/23(金) 02:37:36
>>37
せめて正しいスレに導いておくんなまし
とりあえずコンパイルできないことには段ボーラーです。
踏み外す以前に舗装道路なんて歩いたことございません。
39デフォルトの名無しさん:2009/10/23(金) 21:18:44
メモ、とりあえず報告しておきます。
OS:Windows Vista Home Premium 64bit
IDE:Visual C++ 2008 Express Edition
ドライバ:cudadriver_2.3_winvista_64_190.38_general
ツールキット:cudatoolkit_2.3_win_64
SDK:cudasdk_2.3_win_64
ぐらぼ:GeForce 9600GT
で、64bitビルドを行う。
まずはttp://www.sharkpp.net/blog/2009/04/26/visual-c-2008-express-edition-enable-64-program.html
で64bitビルド出来るようにする。
このまま進めてくと、
nvcc fatal : Visual Studio configuration file '(null)' could not be found
みたいなエラーが出てくると思う。
これを解決する方法が→ttp://forums.nvidia.com/index.php?showtopic=98319
vcvarsamd64.batは必ず、
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\amd64\vcvarsamd64.bat
か、または
nvcc fatal : Visual Studio configuration file '(null)' could not be found....のところで実行。
後は、nvccのコマンドラインとかちゃんと設定しておけばいける!はず・・・


40デフォルトの名無しさん:2009/10/23(金) 21:41:37
NVIDIAが目指す究極のプロセッサへと進む「Fermi」アーキテクチャ
http://pc.watch.impress.co.jp/docs/column/kaigai/20091023_323529.html
41デフォルトの名無しさん:2009/10/23(金) 21:46:13
>>39 の意味はわからないけど、64ビットで使うときは、コンパイルとリンクのオプションに
-ccbin "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin"
をつければたいていうまくいく。
42デフォルトの名無しさん:2009/10/27(火) 10:37:15
>>36
その仕事、うちの会社にくれ。あんたがやるより速いものが早くできるぞ。
43デフォルトの名無しさん:2009/10/29(木) 13:36:59
> VSも使ったことない初心者です
でいきなりCUDAか… なんというかどういう会社だと…

「まず32bitで試させてくださいお願いします」
で後から64bitのことを考えたほうがいいんじゃね?
44デフォルトの名無しさん:2009/10/29(木) 14:05:12
>>36 今、
Windows 7 Professional 英語版
VisualStudio 2008 Pro(C++の64bitツール入れる指定)
CUDA Driver (190.38)
CUDA Toolkit
CUDA SDK
入れて、
OceanFFTのoceanFFT_vc90.slnを開いてx64のDebugでリビルドして
さくっと動いたなぁ、と思ったところですよ。
buildのログには確かに-ccbin "C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin" と入ってる。

次はCUDA.NETと、PyCUDA+VisualPythonで遊ぼうかなと
45デフォルトの名無しさん:2009/10/31(土) 10:11:38
>>44
追記... Win7は64bitです。
ToolKitとSDKは2.3です。
46デフォルトの名無しさん:2009/10/31(土) 19:19:26
ボリュームテクスチャをルックアップテーブルとして使いたいのだが
cuda kernel上で、tex3D関数を使うと異常に処理時間が増加してしまいます。

case 1
ret=tex3D(tex,yy[0]/256.0-1, yy[1]/256.0-1, yy[2]/10.0-1);

case 2
ret=tex3D(0.0,0.0,0.0);

で実行時間に10倍以上の差がついてしまうんだがなぜだろう。
メモリ上の配置でかなりパフォーマンスが落ちるということはありますか?

47デフォルトの名無しさん:2009/10/31(土) 20:16:28
>>46
テクスチャキャッシュにヒットするかどうかでパフォーマンスは大きく変わります。
48デフォルトの名無しさん:2009/11/01(日) 06:52:25
win7x64にCUDA_VS_Wizard_W64.2.0.1入れてもテンプレに表示されるようになる
けどエラーでプロジェクトが生成できない・・・
Vistax64の時はこれで一発だったんだが・・・
7でも32bitのSDK入れてCUDA_VS_Wizard_W32使ったらすんなり入ったが
49デフォルトの名無しさん:2009/11/01(日) 07:30:31
>>48
使えると便利だから使えるようになってほしいな。
フォーラム見に行ったら10/31までmergeでdownだよと書いてあったorz
復活したらエラーメッセージをポストしてください
50デフォルトの名無しさん:2009/11/02(月) 07:33:45
誰かtesla使ってる人いる?
tesla一枚挿しのマシンに、リモートからwinデフォのtelnet使って動かそうとすると、
tesla自体認識しないんだが・・これどうやって使うの?
51 ◆0uxK91AxII :2009/11/02(月) 07:57:43
認識してすらいない、っと。
52デフォルトの名無しさん:2009/11/02(月) 09:31:50
>>50
TeslaがささっているマシンがWindowsなのかどうか読み取れませんが、
リモートからWindowsマシンのTesla使うのであればVNCを使うことが多いですね。
リモートからの利用中心であればLinuxにしてしまった方が・・・。
53デフォルトの名無しさん:2009/11/02(月) 12:21:30
>>47
詳しく! お願いします 助かります
54デフォルトの名無しさん:2009/11/02(月) 12:23:50
逆に、デバイスから高速かつランダムな位置に参照したいときはどのメモリ使えばいい?
55デフォルトの名無しさん:2009/11/02(月) 12:28:34
>>54
サイズも示さないで高速かつランダムって、馬鹿なの? 間抜けなの?

レジスタに乗るなら1クロックでアクセスできる。
共有メモリに乗るなら4クロックでアクセスできる。
グローバルメモリに乗るならランダムと言う前提からcoalscedであることは期待できないから最長数百クロック掛かる。
56デフォルトの名無しさん:2009/11/02(月) 12:31:27
>>50
んじゃ私はLinuxサーバ機であるとして。
一部のメーカのサーバ機(BIOS依存かマザボ依存かは不明)ではTeslaをGPUとして認識する。
その場合は(オンボのGPUが切り離されて涙目になることはあっても)なんとかなる。
処が、一部のサーバ機ではGPUとして認識できないので自前でデバイスを叩かないと認識しない。
57デフォルトの名無しさん:2009/11/02(月) 17:33:33
確かにそうだな サイズは20メガバイトくらいだ
58デフォルトの名無しさん:2009/11/04(水) 18:14:36
8800GTXがあるんだが四倍率早く処理するにはなにがある?
59デフォルトの名無しさん:2009/11/04(水) 21:40:42
ちょっと日本語でOK
60デフォルトの名無しさん:2009/11/04(水) 23:27:30
8800GTXを4本さす
61デフォルトの名無しさん:2009/11/04(水) 23:38:39
クロックを4倍に
62デフォルトの名無しさん:2009/11/05(木) 09:05:00
>>52
レスありがとう。
winでGTX280とTeslaさした状態だと、両方のデバイス認識してて、GTX280外してTesla単体にすると、
Teslaを認識しなくなるんだけど、原因わかる人いる?ドライバではないと思うけど・・
ちなみに、winデフォのリモートデスクトップで確認しました。
63デフォルトの名無しさん:2009/11/05(木) 09:10:33
DeviceQueryでどうなるのかはっきりして欲しい
64デフォルトの名無しさん:2009/11/05(木) 10:22:46
>>62
Tesla単体のときって画面は何に表示されるのでしょうか?
TeslaはGPUを搭載していますが、ビデオカードではないことに注意してください。

Windowsの制約で複数ベンダーのビデオドライバを同時にロードできないので
オンボードにATIやIntel製のビデオチップとかがあると駄目です。
どうしてもその構成にしたいのであればLinuxに。

というかWindowsのバージョンによるけどまず無理です。
65デフォルトの名無しさん:2009/11/05(木) 13:05:40
馬鹿みたいに高いのに、すごい仕様だな
66デフォルトの名無しさん:2009/11/05(木) 15:11:24
>64
Win7からはWDDM1.1対応ドライバであれば普通に混載できる
67デフォルトの名無しさん:2009/11/05(木) 18:11:37
なんかメモリアロケートのアルゴリズムいじったら五倍以上速くなった、、

あやうく三枚発注するとこだったよ。よかった
68デフォルトの名無しさん:2009/11/06(金) 00:56:55
CPUの100倍速い、になるまで満足しちゃいかん
69デフォルトの名無しさん:2009/11/06(金) 02:21:26
将来性は銅なのよ?
70デフォルトの名無しさん:2009/11/06(金) 02:27:56
GeForce 8600 GT使って、3日目の初心者です。

素朴な疑問なのですが、GeForce 8600 GTには512MBのメモリが実装されているのですが、
cudaMalloc を行って、alloc領域が512MBを超えた場合には、どの様になるのでしょうか?
ご存知の方がいらっしゃれば、事象や回避策を教えてください。m(_ _)m
71デフォルトの名無しさん:2009/11/06(金) 03:25:19
>>70
素朴な通り取れない。
エラーが返ってくるはず。
72デフォルトの名無しさん:2009/11/06(金) 03:27:14
>>67
これはCUDAの話?
7370:2009/11/06(金) 08:35:41
>>71

ありがとうございます。
まだ、某サイトにあった手順でHellow…が出せた段階です。

もしや実装メモリ量を超えると、HDDとの間でガリガリswapでもするのかなぁ?っと思った次第です。
7473:2009/11/06(金) 08:52:35
うっ…
w 綴り違うし orz...
75デフォルトの名無しさん:2009/11/06(金) 10:32:36
>>73
大丈夫、swapなんてするはずもない。そもそも512MiB全部使えるわけでさえない。
その世代で512MiB搭載のボードなら、実際に使えるのは高々511.69MiBだけだ。
しかも、そのボードを実際に描画にも使っているならそこから更に画面解像度に依存した分使える量が減る。

逆に、目一杯cudaMalloc()で確保した状態で画面解像度を上げたりすると面白いことになる。
76デフォルトの名無しさん:2009/11/06(金) 23:30:47
>>73
つかQueryつかってデバイスメモリの上限チェックしないと
77デフォルトの名無しさん:2009/11/07(土) 00:27:47
>>63,64
レスありがとう。どうやら、winではディスプレイ出力できるグラボを最低ひとつ積んでないと、
cuda使えないみたいです。つまりTesla単体では動かない。。deviceQueryしても、
there is no device supporting cudaしか返ってきませんでした。倍精度の数値計算したくて
Teslaシングルで動かしたいときは、nvidiaの公式が推奨してるようにLinuxでやるのがベスト
みたいです。いろいろとありがとうございました〜
78デフォルトの名無しさん:2009/11/07(土) 03:56:44
snow leopardじゃつかえないの?
79デフォルトの名無しさん:2009/11/07(土) 06:48:09
>>74
皮肉のつもりじゃなかったのか。
8034:2009/11/09(月) 21:08:31
いまだにtemplateのコンパイルもできません。
32bitコンパイルしようとするとlibがないといわれ、
64bitコンパイルしようとするとスキップされる。

人に聞いたら、ソースが32bit用なんじゃないかって言われた。
ちゃんと64bit用SDKインスコしたつもりなんだけど、
64bit用のソースでなかったりするのでしょうか?
81デフォルトの名無しさん:2009/11/09(月) 21:49:20
>>80
リンカが言うようにlibのファイルがないんでしょ?
パスが通ってるか、ファイルがあるかどうかくらい自分でなんとかしなよ。
82デフォルトの名無しさん:2009/11/09(月) 22:40:46
>>81
レスサンクスです。
でも、>>34に書いたとおり、32bit用のlibはもともとないんです。

まったく初心者なので、勘違いしてたらすんません。
83デフォルトの名無しさん:2009/11/09(月) 22:45:41
>>82
それなら、リンカに指定するライブラリをcutil64D.libに変えたらいいじゃん。
84デフォルトの名無しさん:2009/11/09(月) 22:55:47
>>80
その書き込みから推測するに、出力先にtemplate.exeが存在しているため、スキップされると思われます。
SDKのtemplateをそのまま開いて64bitコンパイルしたいのなら、
出力先のtemplate.exeを削除してからビルドすればスキップされなくなるはずです。
C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK\C\bin\win64\Release\template.exe
私の環境ではこの場所。SDKにはすでにコンパイルされた.exeが入っているはずです。確認してみて下さい。

64bitSDKには32bitのlibが入っていないんじゃないかな?詳しく確認はしていないけれどね。
85デフォルトの名無しさん:2009/11/09(月) 23:03:07
>>83,84
ありがとっす〜
試してみます!
8673:2009/11/09(月) 23:08:04
>>75、76

どうもです。お返事遅れました。

先週はXPでやってましたが、今日からはFedoraに入れ直し実施してます。


結果ですが、画面が点滅したり、真っ黒になったり、となりました。
復旧には、sshで入ってプロセス消してもだめで、結局rebootで…。
ちゃんとsizeみて使う様にします。

m(_ _)m
8774:2009/11/09(月) 23:11:42
済みません。連投です。

>>79

はぃ、
天然ってより、単に英語は苦手です。
8834:2009/11/09(月) 23:12:49
exe消してもだめでした、、、

つか、なんかソリューションエクスプローラーのところで
template.cuを右クリック→プロパティにした時点で、
「操作を完了できませんでした。エラーを特定できません。」
ってなる(´・ω・`)だめぽ

リンカへの指定はちょっと勉強してみます。
89デフォルトの名無しさん:2009/11/11(水) 17:55:34
どうにもうまくいかないので質問なのですが

short intでGPUにmemcpyしたデータをFFTしたいのですが、
short intのデータをfloatにキャストするには
どうしたらいいのでしょうか?

int→floatやfloat→intはプログラミングガイドに載っていた通りできたのですが、
short intだとうまくいかないのは何故だろう…?
90デフォルトの名無しさん:2009/11/11(水) 18:45:15
>>89
何を試したのかよく分かりませんが、short2型をfloat2型に変換する感じがよさそうな。
91デフォルトの名無しさん:2009/11/11(水) 21:49:44
プログラミングガイド読んでたらハァハァ(´д`*)してきた
なにこの気持ち(*´д`*)ハァハァ
92デフォルトの名無しさん:2009/11/12(木) 17:01:33
>>90
おかげさまで出来ました。ほんとにありがとう

ちなみに試したのは
__int_as_float(int)のような形式のキャストと
__int2float_rn(int)のような形式のものです。
どちらもshortをキャストしたり、shortにキャストすることが出来ませんでした。
93デフォルトの名無しさん:2009/11/12(木) 17:28:04
GPUに型変換するのは遅いと思うのだが。
94デフォルトの名無しさん:2009/11/12(木) 20:44:37
その通りだな、そこで相当なロスが出ると思う
95デフォルトの名無しさん:2009/11/12(木) 23:30:59
voidでコピーして、floatのポインタで計算すれば良いんじゃねーの?
何か勘違いしてる?
96デフォルトの名無しさん:2009/11/12(木) 23:47:32
>>91
興奮してるなぁw
97デフォルトの名無しさん:2009/11/13(金) 00:31:33
int -> floatのキャストなら1命令だからむしろ速いんじゃないのか
アライメントは考慮したほうがいいけど
98デフォルトの名無しさん:2009/11/13(金) 10:27:25
いやだから、gpuでshort -> intはダメだろ。
intで渡しておいて、int -> floatはイントリンシックで。
99デフォルトの名無しさん:2009/11/13(金) 10:54:01
別にshortで渡しても問題ないかと。
GPU内でshort -> intの変換をしてから int -> floatの変換が起こりますが、
そんなに頻繁に変換をするわけでなければメモリ転送量の削減効果の方が大きいでしょう。
#32-bitアクセスにするためにshort2型をお薦め。
100デフォルトの名無しさん:2009/11/13(金) 11:55:38
GPGPUのハードのいいベンダーだか機種だかオススメある?
予算は潤沢にあるとして
101デフォルトの名無しさん:2009/11/13(金) 12:11:15
NVIDIAのTesla。つーか、Teslaのラック筐体マジお勧め。
漏れなくNVIDIAのサポートがついてくるから。
102デフォルトの名無しさん:2009/11/13(金) 12:36:58
>>101
CUDAしたいからtesla c1060を搭載した機種を買うのは
当然なんだけど、teslaを組み込んだ
ハード全体としてのオススメを知りたいのでした。
ようするにフラクティカだとかELSAだとか爆速だとか、
どこがいいのよっって話です。
teslaのラック筐体ってなに?
タワー型じゃなくてユニット型がいいってこと?
それともteslaの名を冠したサーバーがあるの?

すまんあんま詳しくないんでわからん
103デフォルトの名無しさん:2009/11/13(金) 12:53:43
HPC用にTeslaC1060相当を4枚入れた、TeslaS1070っていうラック筐体があるですよ。
当然、PC筐体は別途必要。
PC本体なら、QuadroPlex2200S4ってーのがTeslaS1070にマザボをつけたような仕様だったかと。
ラック筐体じゃなければ、QuadroPlex2200D2がタワー型でGPU2枚挿しのPCになる。
NVIDIAの営業曰く、「GeForceなんてアキバ的発想はやめましょう」ということなので。
# GeForceでいいならELSA辺りがリファレンスボードをそのまま使うから安定しているけどね。
## つーか、QuadroPlex使うような予算があるならソフト開発受注したいぞw
104デフォルトの名無しさん:2009/11/13(金) 13:05:58
>>103
ありがと〜
調べてみる
105デフォルトの名無しさん:2009/11/13(金) 14:48:43
http://www.supermicro.com/products/system/4U/7046/SYS-7046GT-TRF.cfm?GPU=TC4
これ、自分はアメリカで買った。
国内の代理店でも売ってるとこあるよ。
106デフォルトの名無しさん:2009/11/13(金) 15:01:35
>105のPCすげぇ。TeslaC1060が4台も載っている。なのにVGAはMatrox。
107デフォルトの名無しさん:2009/11/13(金) 15:20:48
おまえらどんな仕事してんだよ
108デフォルトの名無しさん:2009/11/13(金) 15:25:42
自宅の治安を守る仕事
109デフォルトの名無しさん:2009/11/13(金) 15:31:22
>>106
だってサーバーだから。
すんごくうるさいよこのマシン。標準でリモート管理機能が付いているから、
リモートから電源のON/OFFやキーボード、マウス、VGA、IDEポートの
ネットワークリダイレクトができる。
だから管理用IPアドレスだけ設定してサーバールームに入れっぱなし。
110デフォルトの名無しさん:2009/11/13(金) 21:37:09
>>105
国内のページ見つけたけど
http://www.able.across.or.jp/catalog/product_info.php?products_id=2919
スペックが書いてあるようで書いてないような、、、
この値段は一体なんの値段なんだろう
111デフォルトの名無しさん:2009/11/14(土) 00:42:44
GeForceとQuadroってどう違うんですか??
112デフォルトの名無しさん:2009/11/14(土) 00:49:20
シールが違う。
113デフォルトの名無しさん:2009/11/14(土) 01:02:41
>>93-99
色々参考になります。ありがとう

とりあえずそれぞれのやり方で試して処理時間比較してみます。
114デフォルトの名無しさん:2009/11/14(土) 01:16:16
>>110
書いてあるじゃん。
7046GT-TRF-TC4はサーバーのベアボーン。
箱、電源、マザーボード、ドライブエンクロージャ、そしてTesla C1060 * 4だけ。
あとはCPU、メモリ、ハードディスクを買ってきて刺してやれば動くってこと。
115111:2009/11/14(土) 01:20:18
>>112
それだけですかw
ありがとうございました m(_ _)m
116デフォルトの名無しさん:2009/11/14(土) 02:51:33
>>109
自宅にサーバールームか。アニメみたいww
117デフォルトの名無しさん:2009/11/14(土) 03:30:00
やはりワレワレはコストパフォーマンスの良いものをと考えて…
i7-920、12GB
ASUS P6T7 WS nForce200が二個乗り
とりあえず GTX275あたりを二枚位かな
1000W電源
これでざっと20万コース?
118デフォルトの名無しさん:2009/11/14(土) 04:37:05
randってつかえないのですか?
119デフォルトの名無しさん:2009/11/14(土) 04:42:01
>>114
そっか単純にCPUもメモリもついてないのか
安いわけだ
120デフォルトの名無しさん:2009/11/14(土) 05:12:47
サーバー用のメモリも安くなってきたから、サーバー用でいいかも。
Kingstonの4GB×3本で$350とかだ。
121デフォルトの名無しさん:2009/11/14(土) 05:32:24
CUDA_SAFE_CALLって必ず必要なのですか?
122デフォルトの名無しさん:2009/11/14(土) 05:36:18
> nForce200が二個乗り

おれの場合、O(n^2)だと、使うメモリ帯域<<計算量で、
x16で有る必要は無いなと思ったよ。
123デフォルトの名無しさん:2009/11/14(土) 07:48:22
カーネルを実行する際に、引数で、変数を渡すことができますが、多数の数値を配列で渡したい場合、
配列をデバイスにコピーしてから、配列へのポインタを渡すしかないのでしょうか?
オーバーヘッドの少ない、数値の渡し方を差がしているのですが・・・
124デフォルトの名無しさん:2009/11/14(土) 08:32:24
引数で配列のポインタを渡したって、どっちみちホストメモリ→デバイスメモリの
コピーは要るし?
125デフォルトの名無しさん:2009/11/14(土) 15:41:12
すみません、CULAについて質問です。

Red Hat Enterprise Linux 5.3(64bit)に
まず、CUDA3.2(ドライバ、ツールキット、SDK)をインストール。
(~/CUDA/ 以下。ツールキットは /CUDA/cuda/bin/nvccのようになっている)
その後、CUDA3.2上でCUBLASが動作することを確認しました。(Dgemmを利用)

後に、CULAがあることを知り昨日CULA Basic 1.0をダウンロードし
~/cula/ 以下にインストールしました。
(~/cula/lib64/libcula.so)

インストール後表示される
export CULA_ROOT="/home/nakata/cula"
export CULA_INC_PATH="$CULA_ROOT/include"
export CULA_BIN_PATH_32="$CULA_ROOT/bin"
export CULA_BIN_PATH_64="$CULA_ROOT/bin64"
export CULA_LIB_PATH_32="$CULA_ROOT/lib"
export CULA_LIB_PATH_64="$CULA_ROOT/lib64"
126続き:2009/11/14(土) 15:43:23
以上を実行後、example/geqrf にある、Makefileを用いて
make build64 を実行すると、
/home/nakata/cula/lib64/libcula.so: undefined reference to `cublasDtrmv'
/home/nakata/cula/lib64/libcula.so: undefined reference to `cublasZswap'
/home/nakata/cula/lib64/libcula.so: undefined reference to `cublasZaxpy'
/home/nakata/cula/lib64/libcula.so: undefined reference to `cublasCtrmv'
/home/nakata/cula/lib64/libcula.so: undefined reference to `cublasZtrmv'
/home/nakata/cula/lib64/libcula.so: undefined reference to `cublasZcopy'
/home/nakata/cula/lib64/libcula.so: undefined reference to `cublasCgemv'
/home/nakata/cula/lib64/libcula.so: undefined reference to `cublasCtrmm'
/home/nakata/cula/lib64/libcula.so: undefined reference to `cublasCtrsm'
/home/nakata/cula/lib64/libcula.so: undefined reference to `cublasZtrmm'

リファレンスを調べてみると、例えば、cublasにDtrmvが無いように思えます。
これはどのようにすればいいのでしょうか。
127デフォルトの名無しさん:2009/11/15(日) 15:27:35
en_curr_regionがないってエラー出るんで、調べてたらbreakやcontinueのところでエラー出てるっぽいんだけど、CUDAってbreakやcontinueとの相性悪いのだろうか?
128デフォルトの名無しさん:2009/11/15(日) 16:54:01
分岐は罪
129デフォルトの名無しさん:2009/11/15(日) 20:02:42
質問です

CUDAを使ったプログラムをCUDA toolkitをインストールせずに実行する方法ってありますか?
130デフォルトの名無しさん:2009/11/15(日) 20:56:22
試した事はないけど、driverと実行ファイルがあれば出来るだろうな
131デフォルトの名無しさん:2009/11/15(日) 21:09:53
よ〜し、パパ、CUDAを覚えて会社で活躍しちゃうぞ〜!
132デフォルトの名無しさん:2009/11/16(月) 01:31:49
VCランタイムがあるとして、cudart.dllと、cutil32.dll だけ必要(Win32)。
133デフォルトの名無しさん:2009/11/16(月) 01:44:32
>>132
それって再配布できるの?
134デフォルトの名無しさん:2009/11/16(月) 03:58:07
cudatoolkitのEULA、cudart.dll はredistributableと書いてあるな
CUTILは、cutil.cppの頭に「何の保証もしねぇよ」って書いてある。CUDAとは別で単なるサポート用なのかな。
ていうかcutil32.dllは無くても動くように書けると思う。ソースみたらくだらないぞこれ
nVidiaのドライバ入れればCUDAも動く、ようにはまだなってないのかな。
135デフォルトの名無しさん:2009/11/17(火) 00:52:04
>>134
cudart.dll はCUDAの上位互換を保つために、配布するんだそうだ。
ちなみに、cutil32 or 64 .lib は使わないほうが。。。

ともかく、

cudart's version <= cuda driver's version
の条件が必須
136,,・´∀`・,,)っ-○○○:2009/11/17(火) 01:46:28
cutilはクソすぐる
137デフォルトの名無しさん:2009/11/17(火) 01:55:12
いつの間にか団子が2ちゃんのスポンサーになってる・・・

【2ちゃんねる10週年】神秘の「乳団子」の秘密とは?
http://pc12.2ch.net/test/read.cgi/tech/9240911011/
138デフォルトの名無しさん:2009/11/17(火) 05:06:18
Tesla C2050 $2,499 発表になったじゃない。倍精度500-630GFLOPS。
倍精度なら10倍速い、ってどかすか買うお金持ちな人居るんだろうなぁ。
139デフォルトの名無しさん:2009/11/17(火) 08:14:48
今まで散々売られてもいないLarrabeeを盾にして現存のプロセッサと
それを擁護する人たちを馬鹿にしていた癖して
いざ完成が近づいてくると

ディスクリート版には期待していないキリッ

とか馬鹿にしてるよな。
140デフォルトの名無しさん:2009/11/17(火) 09:20:00
おまえは誰と戦って(ry
141デフォルトの名無しさん:2009/11/17(火) 20:19:11
書き込むスレ間違えたが分かっている人はいると思うから問題ない。
142デフォルトの名無しさん:2009/11/17(火) 20:52:26
>>138
倍精度性能だけ見るとHD5870と同じ性能だというのは本当なのか?
単精度の1/2の性能でいいって言ってるけど
HD5870の単精度性能が数倍早いだけだという噂が
143デフォルトの名無しさん:2009/11/18(水) 01:33:01
>>142
AMDはなにかを犠牲にしていると思うんだけど何を犠牲にしているの?
144,,・´∀`・,,)っ-○○○:2009/11/18(水) 02:05:20
>>143
たとえばプロセッサエレメントはFP演算とデータの読み書きは排他実行だったりとか
それでなくとも各プロセッサエレメントにぶら下がってる5つの演算ユニットが平均2〜3程度しか稼動してないとか
145デフォルトの名無しさん:2009/11/18(水) 06:05:13
ららびーは倍精度で1TFLOPSとか行くのかな。
Core i7で60GFLOPSくらいだっけ。
146デフォルトの名無しさん:2009/11/18(水) 08:27:53
>>144
データ読み書きは別スレッドの分が並列に動くだろ。
メモリアクセス性能低いからALU命令の比率が余程高くないと
読み書き速度がネックになるけど。
147デフォルトの名無しさん:2009/11/18(水) 10:21:58
初歩的な疑問なのですが
ttp://tech.ckme.co.jp/cuda_const.shtml
のコードのように
__constant__ float g_idata[10000];
とか書いた時,このconstantメモリ領域は
いつ確保されるのでしょうか?

宣言だけ書かれてあっても
host,device共にその領域を使うコードを実行しない限り,
領域確保は行われないと思っていいのでしょうか?
148デフォルトの名無しさん:2009/11/18(水) 12:05:28
>>147
GPUにはそもそも領域確保と言う概念がありません。
定数メモリ領域も共有メモリ領域もただそこにあるだけなので、宣言はあくまでもコード上のものでしかありません。
149デフォルトの名無しさん:2009/11/18(水) 15:16:17
一応タイムシェアリングできてるみたいだけどGPUのメモリ領域の退避はしないの?
150デフォルトの名無しさん:2009/11/18(水) 18:43:48
CUDAでCPU、GPUを並列に動作させられますか?
CPU GPU 並列 CUDA あたりで検索しても出てきません。
原理的にできそうな気もするのですが、
GPUで操作させている間はドライバを働かせているので無理なのでしょうか?
151デフォルトの名無しさん:2009/11/18(水) 18:52:14
スレッドを使えばできますよ。GPUのプログラムは殆んどCPUに負荷をかけません。
152デフォルトの名無しさん:2009/11/18(水) 22:50:37
>>150
GPUを起動したスレッドを待機状態のまま放置しておけば、他のスレッドでCPU資源を遣り繰りできます。
但し、SPの個数を超えるようなグリッドを食わせると途中で転送処理が入るので要注意。
153デフォルトの名無しさん:2009/11/19(木) 06:44:52
CentOSで動きますか?
154デフォルトの名無しさん:2009/11/19(木) 14:51:15
FermiでC言語が使えるってどーいうこと?
155デフォルトの名無しさん:2009/11/19(木) 17:13:26
>>153
動きます。
156デフォルトの名無しさん:2009/11/19(木) 19:37:25
fermi用のCコンパイラを用意しましたってことじゃねーの?
157デフォルトの名無しさん:2009/11/20(金) 19:04:36
スレッド内部でレジスタがどのように使われているかわかりません
変数の数=レジスタの数という認識をしていたのですが、そうではないようです
どなたかご教授ください
158デフォルトの名無しさん:2009/11/21(土) 10:30:39
すいません、テクスチャメモリで疑問があります。
よろしければどなたか教えて頂けませんか?
コードは
http://gpu.fixstars.com/index.php/%E3%83%86%E3%82%AF%E3%82%B9%E3%83%81%E3%83%A3%E3%83%A6%E3%83%8B%E3%83%83%E3%83%88%E3%82%92%E4%BD%BF%E3%81%86
のテクスチャメモリを参照するていう項目のソースをとりあえず勉強がてらコンパイルしてみました。
配列に値を3ずつ入れていって、バインドして、それにtex1Dでアクセスするというだけのものです

13行目にインデクスに3.14fを用いている事から線形補間なしの場合、小数切捨てで3になり
配列[3]の値を読んで、9が返ってくるのは理解できたんですが、線形補間を有りにすると
9と12の間を補間してるはずなのに7.921875なんていう値が帰ってきています。不思議に思ってv2.3のPrograming guideを読んだところ、P.139に記述があり、どうも与えた値が-0.5されているようです。
ので、はじめから+0.5シフトしてやれば正しい値になりそうですが、そもそも何故-0.5されているのかがわかりません。

検索してもぜんぜん出てこないので当たり前な事なのかもしれませんがドツボにハマってしまってわかりません。よろしければどなたか教えて頂けませんか?長文失礼しました
159デフォルトの名無しさん:2009/11/21(土) 10:32:29
158です。
上記質問で訂正があります。programming guideのP.139ではなくP.137でした。すいません。
160デフォルトの名無しさん:2009/11/21(土) 11:49:04
>>158
テクスチャだからとしか言い様が無いような。
配列の[0]の値は0 〜 1が守備範囲で中心は0.5
...
配列の[i]の値はi 〜 i+1が守備範囲で中心はi+0.5
...
配列の[N-1]の値はN-1 〜 Nが守備範囲で中心はN-0.5

N個の値を0〜Nの範囲に均等にマッピングするためにこうなっている。
161デフォルトの名無しさん:2009/11/21(土) 12:40:17
>>160
なるほど、こんな感じか。
buffer[2.5] = 6.0
buffer[3.0] = (buffer[3.5]-buffer[2.5])*0.5 + buffer[2.5] = 7.5
buffer[3.5] = 9.0
buffer[4.0] = (buffer[4.5]-buffer[3.5])*0.5 + buffer[3.5] = 10.5
buffer[4.5] = 12.0

buffer[3.141592653589] = (buffer[3.5]-buffer[2.5])*0.641592653589 + buffer[2.5] = 7.924777960767
あれ?ちょっと違う値だね
162158:2009/11/22(日) 15:50:57
>>159,160
ありがとうございます。
なんとなく理由が理解できた気がします。
が、こちらでも計算しましたが
buffer[3.141592653589]=7.924777960767
となって件のサイトの値7.921875とは合わないですね・・・
buffer[9.80665]=27.91995となって27.925781ではないですね・・・
低精度の線形補間というのは有効数字3桁って事なんですかね?
163デフォルトの名無しさん:2009/11/23(月) 05:07:25
リニアフィルタつきのテクスチャでは、
座標(0,0)てのは左上端のドットが持つ四角い領域の左上端を意味するからね。
ドットの真ん中は座標(0.5, 0.5)になる。
真ん中にそのドットの本来の色(値)がくる。

精度はシラネ。リファレンスマニュアルに何か書いてあると思うけど。
164デフォルトの名無しさん:2009/11/23(月) 14:39:37
CUDA3.2上で動くTesla1070Sを使っているんだが
doubleでは、sqrtとか動作しない?

//#define DOUBLE double
#define DOUBLE float
__global__ void sqrtTest(DOUBLE *A)
{
int x=threadIdx.x;
(*(A+x))=(DOUBLE)sqrt(*(A+x));
}

みたいにして、実験したんだが、doubleにすると
値がそのまんま帰ってくるんだが orz
165デフォルトの名無しさん:2009/11/23(月) 18:16:06
>164
コンパイル時に -arch=sm_13 はつけてる?
166デフォルトの名無しさん:2009/11/23(月) 19:09:46
>>165
それだっ!動作しました。
cublasは倍精度で動いたんで、いろいろ調べたんですが。
ありがとうございます。
167デフォルトの名無しさん:2009/11/24(火) 05:01:59
>>164
CUDAって3.2までいっているの?
つい最近2.3が出たような気がする。
ひょっとして2.3の間違い?
168デフォルトの名無しさん:2009/11/24(火) 12:40:41
おそらく。
今は3.0のβだね。
169デフォルトの名無しさん:2009/11/25(水) 03:38:40
newでメモリを確保するのは反則ですか?
170デフォルトの名無しさん:2009/11/25(水) 06:36:25
>>169
どうやってnewで確保された領域をGPUに転送するの?
171デフォルトの名無しさん:2009/11/25(水) 10:28:10
>>169
CPU側のメモリでしたら反則ではありません。但し、VCで使う場合は*.cuでnewしてもmsvcrtにリンクできません。
172デフォルトの名無しさん:2009/11/25(水) 19:49:02
>>169
パフォーマンス求めるなら、論外です。
173デフォルトの名無しさん:2009/11/25(水) 22:00:21
newでメモリ確保するのがだめならどうやってCPU側のメモリ確保するの?
全部静的確保?
それともcudaHostAllocを使えって話?
174デフォルトの名無しさん:2009/11/26(木) 06:26:18
メモリ転送ってSSEで高速化されたりするんかな?
だとしたらnewより専用で用意されたものを使ったほうがいいかもね
175デフォルトの名無しさん:2009/11/26(木) 06:58:15
>>174
メモリ転送ってCPUメモリ間?それともHOSTーGPU間?
前者だったら高速化はされるけど、後者はDMAでPCIEにダイレクトに転送されるだろうから、
SSEは関係ないんじゃない?
176デフォルトの名無しさん:2009/11/26(木) 17:12:50
これは・・・

108 名前:デフォルトの名無しさん[sage] 投稿日:2008/07/14(月) 19:24:11
>>106
GPUはWarp単位で同じインストラクションが走るから、要は16人17脚みたいに考えればいい。
メモリアクセスを16人17脚によるパン喰い競争みたいに考えると、自分のパンが目の前にある状態がcoalesced。
そのとき、2,3人パンを喰う必要がなくてもスルーするだけだから問題ない。
処が、二人のパンが入れ違っていたらそこで入れ替える間、みんなが待たされることになるって感じ。
# 判っている人には判るけど、判っていない人には判らない説明だなw

>>107
共有メモリを使うかどうか違うだけだと思うけど。ptx出力させて較べてみたら?

109 名前:デフォルトの名無しさん[sage] 投稿日:2008/07/15(火) 00:26:16
>>108
その説明、いただいてもいいですか?

110 名前:デフォルトの名無しさん[sage] 投稿日:2008/07/15(火) 01:56:27
>>109
本にするならもっと書かせてくれw
Vipのwikiに載せるなら是非やってくれ
金取って講習するのに使うのなら分け前よこせw
177デフォルトの名無しさん:2009/11/26(木) 19:45:48
対称行列になるものをGPUに送信したいのだが、うまい方法はない?
一般の場合は、GPU上では対称ではないとみたいのだが
送る際対称になる場合が結構あって、転送時間無駄だなあと。
178,,・´∀`・,,)っ-○○○:2009/11/27(金) 00:42:44
179,,・´∀`・,,)っ-○○○:2009/11/27(金) 00:47:50
このコードはいろいろ酷いからそのまま使えると思っちゃ駄目よ。
srcのアドレスはこの場合64バイトでアラインメントされてないといけない。
destのほうも最低限16バイトアライン
180デフォルトの名無しさん:2009/11/27(金) 01:21:10
>>176
なかなか良い説明だなw
181デフォルトの名無しさん:2009/11/27(金) 01:24:20
>>176
あと、競争するコースに分岐があったら、
その分岐に用のある人が2,3人だったとしても全員一応付き合わされた後
本流に戻るというか、そんな感じだな。
182デフォルトの名無しさん:2009/11/27(金) 14:02:37
>>180,181
あれ、みんな読んでないのかな。
最近ようやくCUDA本がでたわけだけど、
まんまこの文章書いてあるんだよね。
青木先生乙
183デフォルトの名無しさん:2009/11/27(金) 14:41:15
>>182
絵もついてるしなw
184デフォルトの名無しさん:2009/11/27(金) 19:44:26
地球シミュレータを蹴散らし一躍脚光を浴びたというのに
中身スカスカなスレだなw
185デフォルトの名無しさん:2009/11/28(土) 02:15:17
CUDAスパコンってそのときだけのものなんじゃない?
研究機関のスパコンは定期的に更新されるもので、更新したら前の代の
ソフトウェア資産はさっぱり使えなくなりましたじゃとても困るだろう。
186,,・´∀`・,,)っ-○○○:2009/11/28(土) 03:50:50
まあG80〜GT200世代のコードも一応次のFermiでは動くし
NVIDIAが父さんしない限りはずっと続くんじゃない?
187デフォルトの名無しさん:2009/11/28(土) 12:16:54
>>182
もうある程度把握しちゃってるからいまさら入門書買ってもとも
思ったけど、どうなんだろ。
188デフォルトの名無しさん:2009/11/28(土) 12:19:29
>>185
IBMがHPC向けにはCELLやめてOpenCLに舵を切った的なことが書いてある。
ま、TheInquirerの記事は眉唾ではあるけど。
http://www.theinquirer.net/inquirer/news/1563659/cell-hpc-material

あ、ここCUDAスレだけどまあ似たようなもんということで。
189,,・´∀`・,,)っ-○○○:2009/11/28(土) 14:03:35
×CellやめてOpenCL
○Cellベッタリのコード書くのやめてOpenCL

段階的には切り捨てることも考えられるが
いきなりOpenCLで他のデバイスとかいっても、資産が無いじゃん
190デフォルトの名無しさん:2009/11/28(土) 20:47:07
はじめてのCUDAプログラミング
買った人いる?
どうだった?
191デフォルトの名無しさん:2009/11/28(土) 22:01:41
図書館に頼んだら陳列は来月からと言われてしまった
192デフォルトの名無しさん:2009/11/28(土) 23:23:30
本なんか読まなくても分かるだろ
193デフォルトの名無しさん:2009/11/29(日) 00:55:57
日販は使えない会社だ。
194デフォルトの名無しさん:2009/11/29(日) 01:10:09
>>190
思ったより安かったのでぽちってきた。
ASCII.techの特集も買ったけどアクセスの最適化あたりで苦戦中なレベルなので、
どうだった?とか言われても答えられないかもしれない。
195デフォルトの名無しさん:2009/11/29(日) 12:11:38
>>184
これ、とんでもない誤報
浮動小数点演算を理解していないバカコミの馬鹿記事

科学技術立国 日本の恥を世界に晒したもの
「ふざけたやつがペンもつな、馬鹿野郎」だ。
196デフォルトの名無しさん:2009/11/29(日) 14:01:50
浮動小数点数
197デフォルトの名無しさん:2009/11/29(日) 15:13:49
GTX295と電源買った〜
さて、何に使おうw
198デフォルトの名無しさん:2009/11/29(日) 15:40:35
っBOINC
199デフォルトの名無しさん:2009/11/29(日) 15:46:59
>>176
おにいさん、もっと!
200197:2009/11/29(日) 18:00:24
smokeParticles.exe の動作が 8600GTS より遅く感じるんだがなぜだー
201デフォルトの名無しさん:2009/11/29(日) 18:14:08
>>200
2個同時使用に対応してないんだろ
202197:2009/11/29(日) 18:19:17
>>201
それでも8600GTSよりは早くなるはずじゃない?
あまり詳しくないんで間違ってたらすまん。
203デフォルトの名無しさん:2009/11/29(日) 18:26:30
>>202
言われて見ればそうだな、約2倍に性能アップしてるはずだし
いつからか分からんけど古いCUDAと最近のCUDAのサンプルプロジェクトが入れ替わってるからな
パーティクル関係の数字が増えてるけど同じプログラムでやってみた?
204197:2009/11/29(日) 18:37:06
>>203
同じプログラムでやってる。
ベンチマークでもやってみるかな。
205デフォルトの名無しさん:2009/11/29(日) 19:47:47
文字列処理をさせてはみたものの
遅すぎて使い物にならねーぞこんちくしょー
206デフォルトの名無しさん:2009/11/29(日) 19:49:56
>>205
単精度な数値計算に変換すれば良いんでないかい
207デフォルトの名無しさん:2009/11/29(日) 20:06:22
>>206
UTF-8をどうやって数値計算にすればいいぉか?
208デフォルトの名無しさん:2009/11/29(日) 20:14:33
UTFの全領域を使う分けじゃなければ、必要な部分だけを数値にマップするとか。
209デフォルトの名無しさん:2009/11/29(日) 20:57:44
文字列処理って言ってもいろいろあるだろ
210197:2009/11/29(日) 22:02:50
ベンチマークやったら電源が落ちた・・・
780Wじゃ足りないのかな
211デフォルトの名無しさん:2009/11/29(日) 22:28:55
>>210
よっぽどの詐欺電源でも買ってない限りは、さすがに足りないってことは無いと思うけど
初期不良じゃないか?
212デフォルトの名無しさん:2009/11/29(日) 22:35:29
熱落ちじゃないの?
213デフォルトの名無しさん:2009/11/29(日) 22:39:18
Geforceは80 PLUS シルバー以上の
電源じゃないとまともに高負荷に耐えられないぞ
214197:2009/11/30(月) 06:48:15
80 Plusって書いてないわ・・・
CORAZON ってやつです。
215デフォルトの名無しさん:2009/11/30(月) 08:07:19
>>214
http://www.keian.co.jp/products/products_info/kt_780as_sli/kt_780as_sli.html
12Vが25AだなHDDとかいっぱい着いてたら微妙だな
最小構成なら問題ない範囲だと思うけど
てかこれ安いな、これ買えばよかったw
216197:2009/11/30(月) 17:40:28
25Aが2つ書いてあるのはどういう意味?
217デフォルトの名無しさん:2009/11/30(月) 20:42:55
定員25人のエレベーター2基と、定員50人のエレベーター1基は違うというのは分かるな?
218デフォルトの名無しさん:2009/11/30(月) 20:46:53
HDDとかPCIE用の電源が2本電源の中にあるってことだ
ちゃんと分割して接続すれば12x25=300WあるからGTX295のTDP300Wは支えられる
HDDとかつけるともう足りない
ちなみにうちの700W表記の電源は一本36Aある
219197:2009/11/30(月) 21:20:06
IDE電源にハードディスクは接続しているけれども、
PCIEの電源は2本ともGTX295に挿してるぜ。
そういう意味じゃない?
ごめん詳しくないんだ。

大人しくこのあたり買っておくかな。
http://www.scythe.co.jp/images/energia/energia-label0800.jpg
220デフォルトの名無しさん:2009/11/30(月) 21:25:34
>>219
検索すりゃわかるが今の電源でGTX295を動かしてる人が居るから動くって
HDD1個にしてみて周辺機器もはずしてOCしてるならデフォルトにして
配線を入れ替えたりしてみてダメなら初期不良だろう
221デフォルトの名無しさん:2009/11/30(月) 21:30:13
つまり、安いもんじゃないし保障が切れたらもともこもないから
電源が原因だとしても保障があるうちに買った店に持っていって確認してもらったほうがいい
お店の人が電源がだめだと言うなら電源を買えばいいし
お店にあるちゃんとした電源でもダメだったら初期不良で交換してもらえるからね
222197:2009/11/30(月) 21:50:02
そうしてみる。
電源も一緒に買ったものだし、持って行ってみるわ。
めっちゃ勉強になった。ありがとう。
223197:2009/12/01(火) 06:40:06
追記
HDを1つにしたら、落ちるまでの時間が長くなりました
224デフォルトの名無しさん:2009/12/01(火) 07:27:11
排熱もやばいんだろw
きちんとしたケースとFAN買えw
225デフォルトの名無しさん:2009/12/01(火) 17:12:58
多次元配列の領域確保、コピーってcudaMallocとcudaMemcpyでできる?
226デフォルトの名無しさん:2009/12/01(火) 18:48:14
できる。
てか普通のCみたいにコピーできる。
ちなみにCudaだと多次元配列だと面倒だから1次元配列として扱うことがおおい。

cudaMemcpyAsyncってのもある
227デフォルトの名無しさん:2009/12/01(火) 20:22:02
面倒っていうか1次元しか扱えないし
228デフォルトの名無しさん:2009/12/01(火) 21:14:19
1次元だけだったか

自分の技量が足りなくてできないのかと思ってた。
229デフォルトの名無しさん:2009/12/02(水) 19:12:31
今日からCUDA触ってみたのですが、全然速くない…

device側で1MB×2(dest, src)をアロケートして、hostからデータをコピー

for (int n = 0; n < 1024*1024; n += 512)
{
CUDA_Func<<<1, 512, 0>>>(dest, src, nPos);
}

hostからdeviceへコピー

=====

__global__ static void CUDA_Func(BYTE* pDest, BYTE* pSrc, int nPos)
{
int i = blockIdx.x * blockDim.x + threadIdx.x + nPos;
pDest[i] = ((int)pDest[i] + (int)pSrc[i]) >> 1;
}

=====

なんて事をやっているのですが、CPUの方が速いです
Visual Profilerを見ると、各CUDA_FuncのGPU Time は 8〜9us で終わってますが、CPU Timeが80〜150us になってます
こんなものでしょうか?アドバイス頂けると嬉しいです

Win7/GF8800/SDK 2.3
230デフォルトの名無しさん:2009/12/02(水) 19:56:18
>>229
CUDA_Func<<<1, 512, 0>>>(dest, src, nPos);を2k回も呼んでるのがまず悪いんじゃね?
あとは詳しい人に任せた。

俺も勉強中。共有メモリのバンクコンフリクトがわけわからねえ。
231デフォルトの名無しさん:2009/12/02(水) 21:07:48
>>229
そりゃカーネルをキックするコストはかなりでかいから、ループで何回も呼んだらCPUにまけるだろ。。。。

>>230
shared memoryのbank conflictは
ものすごーーーーく大雑把にいうと、thread_id順でshared memoryのアドレスにアクセスすると各バンクのチャネルがぶつからなくて、パラレルに出来るよってお話
232229:2009/12/02(水) 21:33:41
レスありがとうございます。
リニアに1次元配列を処理するような事は意味がないと言う事でしょうか?
例えば、ある程度の長さの、サンプリング単位のPCMの演算や、ピクセル単位の画像の演算とか…
233229:2009/12/02(水) 21:40:38
連投スマソ

なんかレスを書いてて、やっとピンと来たんですが、
例えば各スレッドでさらにループで回して、CUDA_Funcを減らせば良い的な話だったりします?
>>229 のコードで言うと

CUDA_Func内で1KB分ループさせて、各スレッドへは1KBのオフセットを渡す。
その分、CUDA_Funcの起動回数を減らす。

違う…?
234初心者:2009/12/02(水) 21:55:19
>>299
通常CPUなら、forで何回もやるような処理を
CUDAのカーネルを一発たたくことによって処理させるっていうのが基本的な考え方じゃないの?
あと、メモリは一度になるべく大きくとって転送したほうが効率がいいらしいよん
235デフォルトの名無しさん:2009/12/02(水) 22:17:38
>>233
そのコードを見た感じ、1024*1024*512スレッドつかってることになってるけど、
何をしてるの?
236デフォルトの名無しさん:2009/12/03(木) 06:31:18
いや>>229のやり方は正しいよ
画面描画とCUDAは同期処理だから大きい単位でやると画面がタイムアウト起こす
これ以上の最適化はCUDAでは不可能
これで遅いというならそれがそのカードの性能限界だと考えるしかないな
237デフォルトの名無しさん:2009/12/03(木) 06:39:52
ちなみに>>229のCPUとカードの具体的な名前と周波数と
PCIEの速度とx16 gen2とかね
遅いって実際にどれくらい遅かったのは知りたいね
上位のクアッドCPUと8400GSなんかじゃ勝負にならないのは当たり前だから
238デフォルトの名無しさん:2009/12/03(木) 06:59:13
>>229
ごめん元のソースが何したいのかよく分からないんだけど、こんなことしたいわけ?
1024ピクセル×1024ピクセルの二つの領域の明るさ平均を取るみたいな?
CPUなら、縦座標が外側ループで1024回×横座標が内側ループで1024回、回ると。

//device側で1MB×3(dest, src1, src2)をアロケートして、hostからsrc1,src2にデータをコピー
//512スレッドを起動するなら、外側ループの回る回数はCPUだと1024、GPUだと1024÷スレッド数512
for (int n = 0; n < 1024 / 512; n ++)
{
 CUDA_Func<<<1, 512, 0>>>(dest, src1, src2, nPos);
}
//deviceからHostへdestをコピー

=====
__global__ static void CUDA_Func(BYTE* pDest, BYTE* pSrc1, BYTE* pSrc2, int nPos)
{
 int i = nPos*512 + threadIdx.x * 1024; //各GPUスレッドが動き出す起点、縦にずれてるわけ
 for (k = 0; k < 1024; k++) //各GPUスレッドは呼ばれると横向きに1024回ループする。内側ループをGPUスレッドで処理。
 {
  pDest[i + k] = ((int)pSrc1[i + k] + (int)pSrc2[i + k]) >> 1;
 }
}
=====

ちなみにこれだといちいちグローバルメモリへのアクセスになるんで、

 //Sharedにスクラッチコピー
 //スクラッチコピー分だけループ処理
 //SharedからGlobalに書き出し

するともっと速くなる
239デフォルトの名無しさん:2009/12/03(木) 07:11:45
>>238
早けりゃいいってもんじゃないぞ
そんなもん低クラスのカードで動かしたら一発で画面真っ暗だわ
240デフォルトの名無しさん:2009/12/03(木) 07:16:32
あとsharedメモリはそんな使い方するもんじゃないだろう
毎回コピーしてたらそのコストの方がデカイわな
241デフォルトの名無しさん:2009/12/03(木) 07:22:16
sharedメモリってあれだ
1スレッドでやる計算が複雑な時に頻繁に変数の値を更新するだろ
そういう時にグローバルメモリよりもアクセスが早い一時領域として利用するもんだ
こういう計算自体が単純なケースでは効果はない
242デフォルトの名無しさん:2009/12/03(木) 07:30:33
>>239
別人だけど8400GSくらいだとそうなの?経験上何msを超えるとハングする?

ググルとOSにより2秒や5秒でタイムアウトとあるがギリギリまでやるのはまずそうな気はする。
243デフォルトの名無しさん:2009/12/03(木) 07:38:09
あ、失礼 coalescedになってなかった。こうかな??

//4回CUDA_Funcを呼び出す方向で。
for (int n = 0; n < 1024 / 256; n ++)
{
 CUDA_Func<<<1, 512, 0>>>(dest, src1, src2, n);
}

//nは「縦」の分割数
//512スレッドが連続した512バイトを取り込む。二回動くと、1ピクセル×横に1024ピクセルを処理。
//上に向かって縦256回回る(k)
__global__ static void CUDA_Func(BYTE* pDest, BYTE* pSrc1, BYTE* pSrc2, int n)
{
 for (k=0; k < 256; k++)
 {
  //動き出す起点は各スレッドで1バイトずつずれてる。
  int address = n*1024*256 + k*1024 + threadIDx.x;
  //1024バイトを512スレッドで処理するので、二回。
  pDest[address] = ((int)pSrc1[address]+(int)pSrc2[address])>>1;
  pDest[address+512] = ((int)pSrc1[address+512]+(int)pSrc2[address+512])>>1;
 }
}

実際書いて動かさないと良く分からないすな。グレーのビットマップ二つ用意してやってみる形かな。
244デフォルトの名無しさん:2009/12/03(木) 08:17:42
>>242
タイムアウトが何秒とか議論することですらない
マウスすら動かない状態が2、3秒も続くようなアプリはアプリ失格だろ
245デフォルトの名無しさん:2009/12/03(木) 09:05:21
CPUより遅いくらいの8400GSで動かそうとしたなら2,3秒のフリーズ程度なら止む無し。
クラッシュしてデータを失わせるかもしれないリスクを犯すよりは
起動時に簡単なベンチ走らせて遅いGPUはハネちゃうのもありかな。
8400GSを考慮したせいでミドル以上のグラボの足を引っ張るとか馬鹿すぎる。
246デフォルトの名無しさん:2009/12/03(木) 09:14:35
プログレスバー表示したら遅くなるから表示しないで画面を固まらせるなんて
そんなものは個人で使うだけにするんだなw
247デフォルトの名無しさん:2009/12/03(木) 10:20:49
ちょっと待て、みんな一台のGPUであれこれやろうとしているのか?
それじゃ出るスピードも出ないぞ。
248229:2009/12/03(木) 10:22:20
皆様おはようございます。そして、レス感謝です。
朝イチで打ち合わせがあるので、結果だけ取り急ぎ報告します。


前のコード
0 memcpyHtoD 332.928 2155.51
1867.52 memcpyHtoD 332.512 1848.49
3403.26 CUDA_Func 10.624 1158.18
3588.86 CUDA_Func 8.864 119.289
(略)
767008 memcpyDtoH 289.504 997.333

CUDA_Funcでループ
0 memcpyHtoD 332.864 2149.65
1815.04 memcpyHtoD 332.512 1792.27
3264.26 CUDA_Func 11235.1 12351.3
28136.2 memcpyDtoH 286.368 1402.62

満足行く結果ではありませんが、速くはなりました。CPUでリニアに処理した方が速いです。AthlonX2 @1GHz〜3GHz
あと、気づいたのですが、当方の環境ではRDP経由でCUDAが動きませんでした。ちょっとヤバイかも…

詳細は追ってフォローさせて下さい。
249デフォルトの名無しさん:2009/12/03(木) 10:25:19
cudaMemcpyは同期を取ってから転送するから、結果の利用のタイミングぎりぎりまで実行を遅らせられれば
見掛け上の処理時間を短縮できるよ。
250デフォルトの名無しさん:2009/12/03(木) 11:27:12
>>248
RDP経由でCUDAが動かないのは仕様です。
251デフォルトの名無しさん:2009/12/03(木) 12:36:54
俺もやってみたらこうなりましたが。
Using device 0: GeForce 9500 GT
GPU threads : 512
Processing time GPU: 5.406832 (ms)
Processing time CPU: 18.742046 (ms)
Test PASSED
GPU: 78.0000 87.0000 177.0000 1077.0000
CPU: 78.0000 87.0000 177.0000 1077.0000
Press ENTER to exit...

カーネルはこう。
__global__ void testKernel( float* g_idata1, float* g_idata2, float* g_odata, int n)
{
 // access thread id
 const unsigned int tid = threadIdx.x;
 // access number of threads in this block
 const unsigned int num_threads = blockDim.x;
 __syncthreads();
 unsigned int startaddress = n * 1024 * num_threads;
 for (int j = 0; j < num_threads; j++)
 {
  for (int k = 0; k < 1024; k = k + num_threads)
  {
   unsigned int accessAddress = startaddress + k + tid;
   g_odata[accessAddress] = (g_idata1[accessAddress] + g_idata2[accessAddress]) / 2.0;
  }
  __syncthreads();
 }
}
252デフォルトの名無しさん:2009/12/03(木) 12:40:39
//ホストでこうして、
for( unsigned int i = 0; i < 1024 * 1024; ++i)
{
h_idata1[i] = (float) (66.0 + i);
h_idata2[i] = (float) (88.0 + i);
}
// こう実行。
for (int i = 0; i < (int)(1024 / num_threads) ; i++)
{
testKernel<<< grid, threads >>>( d_idata1, d_idata2, d_odata, i);
}

//CPUはこう。Athlon 2.3GHz。
computeCPU(float* idata1, float* idata2, float* reference)
{
for( unsigned int i = 0; i < 1024 * 1024; i++)
{
reference[i] = (idata1[i] + idata2[i]) / 2.0;
}
}

これじゃサイズが小さすぎてあんまり比較にならないと思うっすよ。
景気よく4096×4096でやってみるといいかな?
253デフォルトの名無しさん:2009/12/03(木) 12:46:40
4096x4096でやってみたらだいぶ差が出てきましたよ。

GPU threads : 2048
Processing time GPU: 33.380219 (ms)
Processing time CPU: 260.214355 (ms)
254デフォルトの名無しさん:2009/12/03(木) 13:12:34
accessAddressの計算おかしくありません?
255デフォルトの名無しさん:2009/12/03(木) 13:34:08
コードちゃんと見て無いけど、floatならGPUでパラで動かした方が速いに決まってる
athlon系の浮動小数点演算のコストは、整数演算のざっと平均70倍
intel系は知らないにゃぁ
256デフォルトの名無しさん:2009/12/03(木) 13:49:01
computeCPU(float* idata1, float* idata2, float* reference)
{
for( unsigned int i = 0; i < 1024 * 1024; i+=4)
{
static const __m128 div2 = { 0.5f, 0.5f, 0.5f, 0.5f };
__m128 tmp = _mm_load_ps(&idata1[i]);
tmp = _mm_add_ps(tmp, _mm_load_ps(&idata2[i]));
tmp = _mm_mul_ps(tmp, div2);
_mm_store_ps(&reference[i], tmp);
}
}

あとどっかでprefetchnta噛ませるといいかも。


CPU側は最低限SSE使おうや。
大学関係者も含めて比較用のCPU側コードが酷いのが多すぎる。
257デフォルトの名無しさん:2009/12/03(木) 13:57:09
ぶたぎりですが、
geforce gtx285 と tesla c1060 って
どのくらい違います?
c2050がどうせでるから、c1060と285が
対してかわらないなら、285がいいかと思うのですけど。

ところで
http://www.nvidia.co.jp/object/personal_supercomputing_jp.html
いつのまにかnvidiaのページに
「Tesla GPU コンピューティングプロセッサは発売されています:
- Tesla C2050/C2070
- Tesla C1060」
こんなことが書いてあるけど、まだ出てないですよね。
258デフォルトの名無しさん:2009/12/03(木) 14:25:16
>>257
そんなこと言うと、NVIDIAの営業に「そんなアキバ的発想はダメですよ」って言われちゃいますよw
259デフォルトの名無しさん:2009/12/03(木) 14:27:55
CPU側は、やっぱりCore i7で8スレッド並列とか動かしてあげないとだめじゃね?
そんでGTX285と勝負するみたいな。
260デフォルトの名無しさん:2009/12/03(木) 14:29:52
率直に言って、なんで値段が5倍のTeslaが売れるのか良く分からないのです<アキバ的発想ですが
Fermiアーキテクチャも、GeForceが先に出るんじゃないですか? 来年2月くらいでしょうかね。
261デフォルトの名無しさん:2009/12/03(木) 14:33:23
>>260
そりゃぁ、GeForceが叩き台だモノ。NVIDIA曰く、GeForceよりも信頼性が10倍高いから5倍の価格差はペイできるって発想でしょ。
262デフォルトの名無しさん:2009/12/03(木) 14:37:11
>>259
HPC用によく最適化されたコードだとHT切ったほうが速い

>>260
サポートが手厚い
263デフォルトの名無しさん:2009/12/03(木) 14:49:44
Engadgetに、米軍が旧型PS3を2000台買ったとか書いてあったよな
$200ドルで256MB、100GFlops、て安いのかな??
10倍して$2000ドル、2.5GB、1TFLOPS、て。どうなんだろ。GPUのほうが安そうな。びみょう?
264デフォルトの名無しさん:2009/12/03(木) 16:25:21
GTX285とか、240SPに、512とか1024とか2^nで放り込んでもうまく処理してくれるのですか?
半端な部分の処理がどうなるのか心配していると脳みそかゆくなります。
265デフォルトの名無しさん:2009/12/03(木) 16:37:48
>>264
cudaライブラリが「適当に」割り振ります。グラフィック兼用だと、そもそも全部使う保証さえありません。
266デフォルトの名無しさん:2009/12/03(木) 19:13:14
信頼性とか保証とかサポートとかの違いか
267デフォルトの名無しさん:2009/12/03(木) 19:36:45
いや、メモリ搭載量全然違うし。
268デフォルトの名無しさん:2009/12/03(木) 20:35:09
そうだね、GeForceの方が安いメモリを使っているしね。
269デフォルトの名無しさん:2009/12/03(木) 22:47:05
はじめてのCUDAプログラミング買ったが
テクスチャには触れてないも同然だな。
270デフォルトの名無しさん:2009/12/03(木) 22:52:47
>>263
ゲーム機としても使うつもりだから
271デフォルトの名無しさん:2009/12/04(金) 01:08:38
>>251
実コード動かしたのは乙だけど、なんでデータがfloatになったの?

整数演算だったら、結局ちゃんとコードが書かれていればボトルネックは転送速度であって、
DDR2-CPUとDDR2-(PCI-Ex16)-GPUの比較になりそうな気がする。
272デフォルトの名無しさん:2009/12/04(金) 01:42:05
CUDAの処理速度を計りたいならまずプロファイラにかけろ。話はそれからだ
273デフォルトの名無しさん:2009/12/04(金) 01:47:26
>>263
コードの資産の問題なんでしょ。
Cell用に書いていたので、GPUにポーティングする手間を考えたら、
PS3を大量に買った方が安いのでしょう。
もちろんアプリによるけど、PS3は実効性能で100Gflopsはでるけど、
GPUは実効性能で1TFLOPSも出ないでしょ。
自分の経験では、Cellに対して、G200は大体2倍〜3弱倍という感じだった。
Cellはカリカリにチューンしたけどね。
274デフォルトの名無しさん:2009/12/04(金) 02:53:46
アキバ的発想ではやっぱり、GTX295を二枚というのが現時点ではさいきょうCUDA環境ですか
275デフォルトの名無しさん:2009/12/04(金) 05:25:55
>>273
GPU内部だけで完結させる処理なら1Tいくかもしれないが
PCの場合はデータ転送がボトルネックになって1Gflopsとかになるが
276デフォルトの名無しさん:2009/12/04(金) 06:04:38
>>256
Type Zでやってみた。P9500(C2D 2.53GHz)、GeForce9300M GS(8SP)

GPU Threads: 256, memsize = 16777216
Processing time GPU: 81.911575 (ms)
Processing time CPU: 218.790421 (ms)
Processing time SSE: 84.257759 (ms)
Test PASSED

Press ENTER to exit...

ほう
277デフォルトの名無しさん:2009/12/04(金) 08:54:02
結局さぁ、「ゲーム」だったらCPUで全部演算しようなんて考えるやついないんだし、
別にGPUでやるほどのもんじゃねぇ、ってだけなんじゃないの>229の例
278デフォルトの名無しさん:2009/12/04(金) 11:40:15
>>274
アキバ的にはGTX295を4枚が最強だけど、
そこまでするならtesla買った方が幸せだわな。
279デフォルトの名無しさん:2009/12/04(金) 12:09:47
Larrabeeがなんかよさそう
280デフォルトの名無しさん:2009/12/04(金) 12:33:49
>>271
4096x4096でやってみたら(float)

GPU threads : 2048
Processing time GPU: 33.380219 (ms)
Processing time CPU: 260.214355 (ms)

BYTEにしてみた。4096*4096で
GPU threads : 2048
Processing time GPU: 27.527241 (ms)
Processing time CPU: 345.093292 (ms)

になった。BYTEのほうがCPU遅い…のはこれはこれでよいのかな
281デフォルトの名無しさん:2009/12/04(金) 14:40:50
>>278
電源がそれだけで1200Wくらい要るなぁ。
1000W電源二台って感じか。うちのブレーカーは間違いなく飛ぶだろう
282デフォルトの名無しさん:2009/12/04(金) 14:50:01
電子レンジとかドライヤーつけなければいけるだろう
たぶん
283デフォルトの名無しさん:2009/12/04(金) 15:05:13
夏は地獄を見るだろう
284デフォルトの名無しさん:2009/12/04(金) 15:55:44
CUDAで倍精度演算をしたいと思っているのですが、
・GeForce GTX 285
・GeForce GTX 295
なら、どっちがいいですか?

また、もっといいものがあれば教えてください。
Teslaは高いらしいのでそれ以外で、お願いします。
285デフォルトの名無しさん:2009/12/04(金) 16:02:55
>>284
Fermiが出るまで待つ
でなければGTX295でしょうねぇ。(メモリ・帯域幅は小さくても倍精度演算リソースが二倍)
286デフォルトの名無しさん:2009/12/04(金) 17:01:27
>>285
ありがとうございます。
Fermiがいつ出るかわからない状況なので、GTX295の方向で考えます。
いつ出るか発表されてませんよね?
287デフォルトの名無しさん:2009/12/04(金) 19:46:16
cudaMallocHostってmallocのラッパーではない?
ライブラリつかってて、なぜかcudaMallocHostを指定していて
mallocで大丈夫だろうと思ったら動作せず
cudaMallocHostなら動作したので。
どう違うの?
288デフォルトの名無しさん:2009/12/04(金) 19:58:37
>>287
つ page lock
289デフォルトの名無しさん:2009/12/04(金) 20:54:29
>>285
1個づつ付いてるのを2倍って呼ぶのは詐欺くさいですな
290デフォルトの名無しさん:2009/12/04(金) 21:02:18
>>287
メモリコピーのハードウェアアクセラレートって決まった区切りで始まる決まったサイズのメモリ単位でしか扱えなくて
そういうのを考慮してメモリを確保するんでしょう
291,,・´∀`・,,)っ-○○○:2009/12/04(金) 23:12:59
>>280
byteこそSSE使わないと。
最大16倍程度は速くなる
292,,・´∀`・,,)っ-○○○:2009/12/04(金) 23:25:37
1byte単位のストアは部分書き込みになるからあまり性能的によろしくない。
アラインメント境界にあわせて128ビット単位のストアが一番パフォーマンスよろしい

#include <emmintrin.h>
computeCPU_SSE2(BYTE* idata1, BYTE* idata2, BYTE* reference)
{
for( unsigned int i = 0; i < 1024 * 1024; i+=16)
{
__m128 tmp = _mm_load_si128(&idata1[i]);
tmp = _mm_avg_epu8(tmp, _mm_load_si128(&idata2[i]));
_mm_store_si128(&reference[i], tmp);
}
}
293,,・´∀`・,,)っ-○○○:2009/12/04(金) 23:54:33
>>279
最終的にはメモリ帯域ネックなんで同等のメモリ帯域を持つGTXと変わらんと思うよ。
ただ2つの配列の平均取るだけならほぼ帯域ベンチ。
PCIeかGPUのL/S帯域で律速。

キャッシュメモリが256KB/coreほどあって16コアあれば、1024x1024ならキャッシュにほぼ収まるので
それを有効に使って処理を連結していくなら、そこではじめてLarrabeeの旨味が出てくる。

個人的にはN-Bodyとかが良い勝負しそう。
294デフォルトの名無しさん:2009/12/05(土) 01:12:39
>>293
だんごさんてきにはGrape-DRが
お勧めということですね
295デフォルトの名無しさん:2009/12/05(土) 01:17:38
多体問題だけやりたいんならいいんじゃね?
296デフォルトの名無しさん:2009/12/05(土) 02:09:51
おいおまいら、こんなのがあるぞ。
http://www.acceleware.com/index.cfm/cuda-training/2010sunnyvale/

リッチな会社にいたら旅行がてらいってみるといいぞ。
これ見るとFixstarsがいかに良心的かわかるぞ。
297,,・´∀`・,,)っ-○○○:2009/12/05(土) 12:49:04
>>295
Larrabeeは机上計算だと1コアあたり16並列で15サイクル(+α)くらいで回るんで、かなり理想的なデバイスなんだけどね。
(ただしvrcppsの精度補完ありならもう少しかかる)
298デフォルトの名無しさん:2009/12/05(土) 13:54:20
GTX260 で決まりすよ。18000円なんだから4枚位買えばいい。
299デフォルトの名無しさん:2009/12/05(土) 14:08:17
ららびーはもう終わったみたいな話が出てますけど
http://venturebeat.com/2009/12/04/intel-cancels-larrabee-consumer-graphics-chip/
300,,・´∀`・,,)っ-○○○:2009/12/05(土) 15:09:19
読んで字のごとくコンシューマ向けディスクリートはね。
何のためにスパコン向けカンファレンスで発表したと思う?

まあなんにせよ「パソコン」に刺さるカードは無くなったな。
PTX2.0の資料請求しとかなきゃ。
301284:2009/12/05(土) 18:47:17
>>289
っていうことは、285の方がよさそうでしょうか?
メモリの帯域が大きく、こちらの方が使いやすそうな気がします。
デュアルGPUのコーディングも大変そうなので……
302,,・´∀`・,,)っ-○○○:2009/12/05(土) 18:58:27
>>301
待てるならFermiを待った方がいいよ
303デフォルトの名無しさん:2009/12/05(土) 19:32:04
倍精度性能はGT200世代はおまけで1個演算機がついてるだけだから期待するだけ無駄だよ
Fermi世代から各コアに演算機付けるって言ってるけど、
一般向けには倍精度削ってGF100の名前で出すとか言ってるからどうなるか分からん
CUDAに拘らないならRADEON HD5xxxって選択もある
GT200世代より倍精度演算能力は圧倒的にHD5xxxの方が高いし
ただRADEONはドライバが糞だしCUDAも動かないしいろいろ中途半端
Larrabeeがどうなるかってところか

現状実用的なものは無いから、実験的な目的以外では買わない方がいいし
実験的な目的なら安いやつでいいじゃないかという話になる
304,,・´∀`・,,)っ-○○○:2009/12/05(土) 20:29:53
Larrabeeはコンシューマ向けディスクリートGPUとしてはキャンセル。
HPC向けには続投しそうだから100万くらい出せば手に入るようになるかもよ?
305デフォルトの名無しさん:2009/12/05(土) 23:36:41
RADEONはFFTを出せないところを見ると行列積が精一杯のようだよ。
GTX280は512bitのバンド幅がどうもよろしくないのでGTX260を奨めます。
306デフォルトの名無しさん:2009/12/05(土) 23:41:53
もしRADEONで遊ぶなら、現時点ではDXCSでSM5.0のスレッド制御を
使ってどこまでできるかだろうなぁ。
DirectX 11 SDKにFFTのサンプルコードなんかもあるから、持ってる人は色々
ベンチマーク取ってみて欲しいな。
307デフォルトの名無しさん:2009/12/05(土) 23:43:57
>>304
Tesla by Fermiの値段にぴったり張り付いて売るのがIntel式な気が
しないでもない。そのためにもnVidiaには頑張ってもらわないと!
308デフォルトの名無しさん:2009/12/05(土) 23:44:40
295だろ、普通に考えて。
スレッド数を多く使える分だけ、高速化が容易
メモリのバンド幅とかよりも重要だと思うが?
309デフォルトの名無しさん:2009/12/05(土) 23:51:04
迷っている段階なら、とりあえずGTX260を買って試すのがオススメかな
310,,・´∀`・,,)っ-○○○:2009/12/06(日) 00:24:51
>>307
流石にIntelシンパの俺でも30万は出せない。
Fermi出た時点で一番コストパフォーマンスいいの選ぶわ。

311デフォルトの名無しさん:2009/12/06(日) 01:23:34
試行錯誤するのにcompute capability 1.3に対応した
ファンレスカードとかあれば良いんだけどな。
260や295を付けっぱなしってのは、なんか精神衛生に良くない。
312デフォルトの名無しさん:2009/12/06(日) 01:25:46
CUDA勉強中の者ですが共有メモリの利用で躓いてるところです。アドバイス頂けたら幸いです。
下記の二つのカーネルでCUDA_karnel_sの方が5倍時間がかかってしまうのですが原因がわかりません。
違いは読み込んだデータをグローバルメモリに保存するか共有メモリに保存するかです。
__global__ void CUDA_karnel_g(uchar4 *vram, int sx, int sy, uint1 *vram2)
{
  int i = threadIdx.x;
  vram += blockIdx.y*sx;
  vram2[i] = ((uint1 *)vram)[i];
  __syncthreads();
  uchar4 px;
  *((uint1 *)&px) = vram2[i];
  unsigned char Y = (unsigned char)(0.2126f*px.z+0.7152f*px.y+0.0722f*px.x);
  px.z = px.y = px.x = Y;
  vram[i] = px;
}
__global__ void CUDA_karnel_s(uchar4 *vram, int sx, int sy, uint1 *vram2)
{
  int i = threadIdx.x;
  vram += blockIdx.y*sx;
  __shared__ uint1 shared[125*32];
  shared[i] = ((uint1 *)vram)[i];
  __syncthreads();
  uchar4 px;
  *((uint1 *)&px) = shared[i];
  unsigned char Y = (unsigned char)(0.2126f*px.z+0.7152f*px.y+0.0722f*px.x);
  px.z = px.y = px.x = Y;
  vram[i] = px;
}
まずバンクコンフリクトを疑ったのですがCUDA Visual Profilerでみるとwarp serializeは0で発生していませんでした。
意図的にバンクコンフリクトを発生させると更に10%程遅くなるのでバンクコンフリクトは原因ではなさそうです。
共有メモリは速いはずなのにグローバルメモリよりなぜ遅くなるのか悩んでいます。初歩的なミスだろうとは思うのですが。
313デフォルトの名無しさん:2009/12/06(日) 07:23:36
>>312
sharedが一定以上多いとOccupancyが下がるから、そこらへんじゃない?
Occupancyは実行効率にダイレクトに効いてくる。
Visual Profilerの実行ログにも出てくるし、SDKのtools/CUDA_Occupancy_calcurator.xlsで試算可能。
Shared Memory Per Block (bytes)のところに16000って入れると良い。(125*32*sizeof(uint1))
ちょっと計算してみると、
スレッドブロックのサイズが512ぐらいならまだマシ(67%)だけど、
64とかだと壊滅的に遅くなる(8%)。

あとpxがアドレス参照でローカルメモリ(VRAM上)に行ってないか心配だ。
314デフォルトの名無しさん:2009/12/06(日) 07:53:46
vram2[i] がレジスタのってたりしないかな。
親から vram3 として渡してみるとか、参照を i+1 にするとか。
315312:2009/12/06(日) 10:18:05
>>313
仰る通りだったようです。shared[125*32]をshared[32]としたら劇的に速くなりました。
バンクコンフリクトを疑うあまりブロックあたりのスレッド数を32にしてたのも不味かったようですね。まだ未確認。
>あとpxがアドレス参照でローカルメモリ(VRAM上)に行ってないか心配だ。
*((uint1 *)&px) = shared[i] を px.x = shared[i].x;
と書き換えたところ速度アップしたのでその可能性大です。最適化で同じコードになるんじゃね?と勝手に思ってました。

>>314
>vram2[i] がレジスタのってたりしないかな。
このコードは質問のために単純化したものだったのですが、単純化前にでptxファイルを出力して比較したときは
ld.global.u32のところがld.shared.u32に変化しただけでしたのでレジスタにのったり最適化で消えたりはしてなさそうです。
とはいえptxの書式の資料を見つけられなかったので自信ありません。
参照を i+1の意味はちょっとわかりませんでした。すみません。

>>313-314
おかげさまでグローバルメモリより共有メモリが遅いという現象は解決しました。ありがとうございます。
ブロック専用なのにextern __shared__ の構文がなぜあるのか不思議に思っていたのですがこういう理由だったのかと。
しかし大きな共有メモリで遅くなるのは厄介な仕様ですね。
316313:2009/12/06(日) 16:21:39
>>315
おつ。
勘が鈍ってなくて安心したw
共有メモリは多数のコアで共有される有限リソースだから、そこも一定以下に抑えないといけないって話ね。

あと本当にsharedを使う必要があるのか、一時変数(レジスタ)で済ませられないか?
sharedを使うべきなのは、同時に動くコア同士のやりとりがある場合と、
どう処理を分配してもcoarescedアクセスにできなくて、でもsharedを使えばできるという場合ぐらいかと思う。

あ、そういや、逆にレジスタが多くてOccupancyが上がらない場合の退避用とかにも使えるだろうか?
317312:2009/12/06(日) 17:53:52
訂正 *((uint1 *)&px) = shared[i] を px.x = shared[i].x;の部分は勘違いでした。
1バイトしか書き換えてないので等価ではありません。無視してくださいです…
>>315
実はどういう理屈で遅くなるのかよくわかってないのですがお蔭様で対処の方法がわかってひと安心です。
最終的にはいろいろな画像処理に使う予定なのでキャッシュ的な使い方をsharedでさせてみるテストでした。
比較のためテクスチャ版とshared版作ろうとしてはまってしまいました。

318デフォルトの名無しさん:2009/12/07(月) 12:02:53
自宅でGPU4枚とかって人はなにに使うの?
319デフォルトの名無しさん:2009/12/07(月) 12:36:53
エンコ
320デフォルトの名無しさん:2009/12/07(月) 13:11:16
ベンチ見てほくそえむ
321デフォルトの名無しさん:2009/12/07(月) 16:15:39
>>317
ptx出力を眺めれば判るけど、普通のCならできる最適化もGPU向けにはできないことが多いよ。
敢えて言えば、ポインタ変数に尽くvolatileがついているかのように振る舞うみたい。
例えば、
int function(int * foo) {int bar = 3; foo[0] = bar; return foo[0];}
みたいなコードはCPU向けには
{foo[0] = 3; return 3;}
のように最適化されるのにGPU向けには
{foo[0] = 3; return foo[0];}
のように律儀に解釈される。
なので、ptx出力を読めるかどうかは割りと重要かも知れず。
# つーか、メモリアクセスの個数を数えるくらいのことは普通にやってる。
322デフォルトの名無しさん:2009/12/08(火) 01:19:36
すみません、かなり初心者です。
行ごとに要素数の違う配列をデバイス側に渡したいんですけど、

a=1;
//ホスト側
float** mat=(float**)malloc(size);

for(i=0;i<num;i++){
mat[i]=(float*)malloc(size / a);
a*=2;
}

//デバイス側
float** mat_d;

CUDA_SAFE_CALL(cudaMalloc((void**)&mat_d,size));

for(i=0;i<num;i++){
CUDA_SAFE_CALL(cudaMalloc((void**)&mat_d[i],size/a));
a*=2;
}


CUDA_SAFE_CALL(cudaMemcpy(mat_d,mat,size,cudaMemcpyHostToDevice));
for(i=0;i<M;i++){
CUDA_SAFE_CALL(cudaMemcpy(mat_d[i],mat[i],size/a,cudaMemcpyHostToDevice));
a*=2;
}
というようにはできないんでしょうか?
323デフォルトの名無しさん:2009/12/08(火) 06:39:08
>>322
>CUDA_SAFE_CALL(cudaMemcpy(mat_d,mat,size,cudaMemcpyHostToDevice));

これがいらないんじゃない?
ホスト側のポインタ列をデバイスに渡しても使いようがない。メモリ空間が違う。
324デフォルトの名無しさん:2009/12/08(火) 09:12:09
開発環境の入っていないマシンで動かすには、どのファイルを持って行けばよいのでしょうか?
325デフォルトの名無しさん:2009/12/08(火) 10:25:10
>>291
個人的な興味なんですけど、CUDA使ってるcodecってなんで速いんでしょうね?
BYTEアクセスじゃ無いとしても、どの部分をGPUでやらせれば爆速になるのか不思議チャンデス
326デフォルトの名無しさん:2009/12/08(火) 14:53:55
SDKのドキュメントの通りに,VS2005で
サンプルプロジェクト template を元に使っているのですが
このプロジェクトに新しい.cuファイルを追加した場合に
そのcuファイルへの更新がビルド時に察知されません
毎回リビルドすれば一応反映できるのですが
通常のビルドで反映させるにはどうすればよいのでしょうか?
327322:2009/12/08(火) 15:52:18
>>323
すみません。
抜けてましたが、
>CUDA_SAFE_CALL(cudaMemcpy(mat_d,mat,size,cudaMemcpyHostToDevice));

は、
ホスト側であらかじめ計算を行い、
その結果を初期値としてポインタ列、matに与えた上で、
その値をデバイス側のポインタ列、mat_dにコピーし、
その値を使ってデバイス側で計算をする。
というつもりで書きました。

このようにホスト側で計算した値をデバイス側に渡す時は
どのように記述するのがよいのでしょうか?
328デフォルトの名無しさん:2009/12/08(火) 16:15:43
{1個、2個、4個、8個、16個、…} みたいなデータを渡したいのかな??
固めてまとめて渡しちゃったほうがオーバーヘッドが少ないと思います。
トータル何列あるよ、は別にパラメータで渡す。
(実際にCUDAのルーチン書く前に、コピー/戻しの時間を色々計ってみるといいです)

cudaMallocしたデータにはホストからは触れないので、
ホストでmallocしたデータ(mat)に計算結果格納
→同じサイズでcudaMalloc(mat_d)
→cudaMemcpyHostToDeviceで渡す
なのでそれでいいです
329323:2009/12/08(火) 17:35:58
>>327
>CUDA_SAFE_CALL(cudaMalloc((void**)&mat_d,size));
>
>for(i=0;i<num;i++){
>CUDA_SAFE_CALL(cudaMalloc((void**)&mat_d[i],size/a));
>a*=2;
>}
考えてみるとここも問題があって、cudaMallocということはデバイス側でポインタ列を確保しているんだけど、
そうすると&mat_d[i]というアドレスは、デバイス側にはバッファがあるが、
ホスト側には存在しないから、ここで例外になりそう。
やるならこんな感じかな?↓(未検証)

float** mat_d; // GPU側に確保する(ポインタ列用)バッファ
CUDA_SAFE_CALL(cudaMalloc((void**)&mat_d, count * sizeof(float*));
float** mat_d_tmp=(float**)malloc(count * sizeof(float*)); // ホスト側に確保する。内容はGPU側ポインタ列
for(i=0;i<num;i++){
// GPU側データバッファのポインタを格納
CUDA_SAFE_CALL(cudaMalloc((void**)&mat_d_tmp[i],size/a));
a*=2;
}
// GPU側ポインタ列をGPUに転送
CUDA_SAFE_CALL(cudaMemcpy(mat_d,mat_d_tmp,count * sizeof(float*),cudaMemcpyHostToDevice));
free(mat_d_tmp);
てやっておいて、mat_dをカーネル呼び出しの引数にしてやるとか。

ここまで、バッファ作りしかしてないので、データ転送は別途必要。
たぶん>>322の最後4行のとおりで構わない。

ただデータ転送回数多いと多少とも時間かかるから、>>328の言うように
固めたほうがベターではある。
330323:2009/12/08(火) 17:48:04
>>329
ちなみに、ポインタサイズが32bitか64bitかはホスト側に依存してることを確認した。
http://forums.nvidia.com/index.php?s=&showtopic=149501&view=findpost&p=943899
331デフォルトの名無しさん:2009/12/08(火) 17:59:16
>>325
あいまいな質問だけど答えてみる。

CPUよりGPUのほうが計算能力の総量はでかいから、本来GPUが速いほうが当然なんだけど、
以下のようなものは遅くなる場合もある。
・計算負荷よりもメモリ転送がボトルネックになるもの
・処理を細かく分解して並列化することが難しいもの

codecなどは、メモリ転送がボトルネックになりやすい傾向はあるものの、
だいたい画面の領域ごとに分解できる処理が多いから、多少とも速くはできるでしょう。
あと速くならない処理はCPU側でやればいい。
332デフォルトの名無しさん:2009/12/08(火) 20:37:12
>>328>>329
参考になりました。ありがとうございます!
まだ不慣れなので色々試行錯誤しながらやってみます!
333デフォルトの名無しさん:2009/12/08(火) 21:48:05
>>325
CUDAだけ使って早いと思ってる?w
334,,・´∀`・,,)っ-○○○:2009/12/08(火) 23:12:01
動き検出なんかは当然CPUにやらせたほうがいいぞ
SpursEngineなりCellなりがあるならそれでもいいが
335デフォルトの名無しさん:2009/12/09(水) 00:11:13
>>333-334
流石にGPUだけとは思ってないけど、atomでh264なんかエンコすると日が暮れる勢いだけど、ionプラットフォームだと実用範囲になる。
エンコ中でも完全にCPUを使い切ってないところを見ると、やっぱGPUをかなり使ってるんだなと勝手な想像
336デフォルトの名無しさん:2009/12/09(水) 06:34:40
IONはメインメモリをグローバルメモリとして使う、つまりマッピングしておけば
CPUからもGPUからもフルスピードでアクセスできるメモリ空間を作ることができる。

ION2は買おうかな・・・。
337デフォルトの名無しさん:2009/12/09(水) 08:29:47
>>336
実際はそんなに甘くはなく、GPUからフルスピードでアクセスするためにはWriteCombinedモードに
する必要があって、それを付けるとCPUからのアクセスが死ぬほど遅くなります。
通常は素直に転送(実際にはメモリコピーですが)したほうがマシです。

低価格で4GB近いデバイスメモリが使えるというメリットはありますが。
338デフォルトの名無しさん:2009/12/09(水) 09:47:42
そのためのMOVNTDQA/MOVTDQだろう。
まあ前者はSSE4.1でないと使えないがな。Atomは仕様不可。あしからず。
339デフォルトの名無しさん:2009/12/09(水) 10:11:54
それらを使っても十分に遅いと思うのですが。
340 ◆0uxK91AxII :2009/12/09(水) 10:22:13
WCにしつつ、CPU->GPUはmovnt*でcopyすれば良さそうだね。
CUDAとか知らないけど:b
341デフォルトの名無しさん:2009/12/09(水) 10:26:15
>>339
だからCPU専用のワーク領域と分けて読み書きを最小限にする。
342デフォルトの名無しさん:2009/12/09(水) 19:25:43
>>337
そか、CPUのキャッシュが使えなかったね。
死ぬほどまで遅くなるとは思ってなかった。
343デフォルトの名無しさん:2009/12/10(木) 10:12:49
GTX295 Vista x64 CUDA2.3 の環境で、CUDA VS WIZARDで作成したプロジェクトを使っています。
質問1. ブロックあたりのスレッド数を512にすると計算結果が正しくなりません。256なら正しいです。なぜでしょう?
shared memory はグローバル変数として宣言して、各スレッドで共用(リードオンリー)しています。スレッド内で__shared__の宣言はありません。

質問2. 完成したので、SDKのsimpleMultiGPUを参考にGPU 2個使おうとしています。
とりあえずマルチスレッド用の空の関数を書いたところ、コンパイルはできるのですが、リンクできません。
cutStartThreadなどが外部で定義されてないと言われます。
simpleMultiGPUはビルドできるので、プロジェクトのプロパティを見比べてみましたが特に違いは見あたりません。
何が悪いんでしょうか?

どなたかお助けください。
344デフォルトの名無しさん:2009/12/10(木) 10:45:27
>>343
・sharedにはCPUから書けませんが、各スレッドがリードオンリーならどこで書き込んでいるのでしょう。
・cutで始まる名前の関数はcutilライブラリ内にあります。cutilライブラリもビルドし、あなたのプロジェクトからリンクできるようにしないといけません。
345デフォルトの名無しさん:2009/12/10(木) 12:13:48
>>344
上については、言葉足らずでした。カーネルの最初に
if( threadIdx.x == 0 ) { /* デバイスメモリからコピー */ }
__syncthreads();
でコピーしています。
将来的にはコピーも並列化する予定です。

下についてはありがとうございます。既存のlib(dll?)だけでは駄目だってことですね。
346デフォルトの名無しさん:2009/12/10(木) 12:40:10
threadIdx.xはスレッドの識別子で、実行順番とは無関係では?
347デフォルトの名無しさん:2009/12/10(木) 13:15:43
共有メモリのつくりに関する知識が思いっきり欠如していると思われ。
threadIdxが0の人だけが書こうとしたら、他の人はみんな何もできなくて時間が無駄。
おまけに、スレッド数が一定数を超えると(GTX295の場合は256か)、別の実行単位になってしまうから(表に見えない)
共有メモリ間転送が行なわれてしまってその点でも時間の無駄。
尤も、>345の様にthreadIdx0でしかコピーしない場合は転送は発生しない代わりに結果がご覧の通りなわけで。

どうせthreadIdx0がコピーしている間他はなにもできないんだから、一斉に同じものを書いてしまえばいいんでない?
348デフォルトの名無しさん:2009/12/10(木) 13:33:51
>>347
> threadIdxが0の人だけが書こうとしたら、他の人はみんな何もできなくて時間が無駄。
開発途中なので、とりあえずこうしているだけです。
将来的にはコアレスにします。

> スレッド数が一定数を超えると(GTX295の場合は256か)、別の実行単位になってしまうから(表に見えない)
512で上手くいかないのはこのあたりが原因のようですね。
349デフォルトの名無しさん:2009/12/10(木) 13:49:31
>>347
たびたびすみません。
「別の実行単位」の意味がよく分からないのですが、
要は1つのブロックが2つのSMに割り当てられるって意味ですか?
350デフォルトの名無しさん:2009/12/10(木) 14:03:14
>>345
Sharedは文字通り、共有できるメモリなので、
各スレッドが1ワードずつ協力して作成→どこでも読み書き可能、
ですよ。0番スレッドだけに任せなくてもいい
351デフォルトの名無しさん:2009/12/10(木) 17:12:55
自分は>>343じゃないけど256スレッドでOKで512スレッドで計算結果がおかしくなる理由がわからない。
>おまけに、スレッド数が一定数を超えると(GTX295の場合は256か)、別の実行単位になってしまうから(表に見えない)
>共有メモリ間転送が行なわれてしまってその点でも時間の無駄。
というのは時間の無駄を指摘してるだけで結果がおかしくなる理由ではないという認識なのですがあってますか?
この時の共有メモリ間転送というのは別の実行単位に転送しているということ?

>>343
256スレッドでやればOKなのでもう興味はないかもしれないが、シェアードメモリの代わりにグローバルメモリで
共用して計算した場合は512スレッドの時も結果は正しくなるのですか?
352デフォルトの名無しさん:2009/12/10(木) 19:27:33
>質問1. ブロックあたりのスレッド数を512にすると計算結果が正しくなりません。256なら正しいです。なぜでしょう?

カーネルコールの後でエラーキャッチのコード入れてる?エラー出てない?
353デフォルトの名無しさん:2009/12/10(木) 21:05:48
質問の傾向をみると、
CUDAって、普通のCのように自由度高く書けるけど、
実際は、サンプルソースからは読み取れない
あれは駄目、こうしたら駄目、的な制約が多すぎるのかな?
DXAPI+HLSLのような、自由度の少ない環境の方が
むしろ、良質なソースが書けるのかも。
354デフォルトの名無しさん:2009/12/10(木) 21:54:43
参考資料

Device 0: "GeForce GTX 295"
CUDA Driver Version: 3.0
CUDA Runtime Version: 2.30
CUDA Capability Major revision number: 1
CUDA Capability Minor revision number: 3
Total amount of global memory: 939524096 bytes
Number of multiprocessors: 30
Number of cores: 240
Total amount of constant memory: 65536 bytes
Total amount of shared memory per block: 16384 bytes
Total number of registers available per block: 16384
Warp size: 32
Maximum number of threads per block: 512
Maximum sizes of each dimension of a block: 512 x 512 x 64
Maximum sizes of each dimension of a grid: 65535 x 65535 x 1
Maximum memory pitch: 262144 bytes
Texture alignment: 256 bytes
Clock rate: 1.24 GHz
Concurrent copy and execution: Yes
Run time limit on kernels: No
Integrated: No
Support host page-locked memory mapping: Yes
Compute mode: Default (multiple host threads can use this device simultaneously)
355デフォルトの名無しさん:2009/12/10(木) 22:17:49
>>353
CUDAをただの言語だと思っていてGPUのアーキテクチャを理解していないからかと。

後半については同意。限られた記述で実装可能なアプリしか書かないからというのがより正確かも。
356343:2009/12/11(金) 00:35:49
>>351
スレッド数512、デバイスメモリ使用でやってみましたが、やはり正しくありませんでした。
Emuではちゃんと動くので、原因はよく分かりません。
コンスタントも使って多のでそっちが原因かも知れません。
分からん。もういい。

>>343 の質問2については、multithreading.cppをプロジェクトに追加してないだけでした。
俺死ね。
357デフォルトの名無しさん:2009/12/11(金) 01:23:14
>353
テクスチャはまじで鬼門。
凝った使い方をしようとすると、コンパイル通っても動かない・動いても結果間違ってるがざらにある。
358デフォルトの名無しさん:2009/12/11(金) 01:42:00
>>357
あるある。
deviceemuともまた動作違うこと多いしね。
NEXUS出ればデバッグもうちょっと楽になりそう。
359デフォルトの名無しさん:2009/12/11(金) 09:51:22
>>343
歩留まり向上のため、重い処理をさせると計算が狂うことがあるらしい
どこかのPDFで見た
360デフォルトの名無しさん:2009/12/11(金) 10:57:49
>>359
それちょっと表現が微妙に誤解を招くような・・・。
出荷されている状態で、計算がまともじゃないコアがたまにまぎれこんでいる。

グラフィック用途と違って、メーカーの想定より負荷が偏った計算をさせることがあるから、
やや耐性の低いコアの耐性がちょっと足りない部分がエラーを起こす。

高負荷プログラムなんかを使ってそういうコアというか製品をはじいてやれば、あとはほぼ安定稼働する、という話だと思う。
361デフォルトの名無しさん:2009/12/11(金) 11:17:51
はじめてのCUDAがいつまでたっても届かない
一体どこに発注したんだよ上の人
362デフォルトの名無しさん:2009/12/11(金) 12:42:26
>>360
CUDAのスパコンで1/6が不良品だったと言ってたが
363デフォルトの名無しさん:2009/12/11(金) 12:44:30
えっ Teslaとかでもそうなのか??
364デフォルトの名無しさん:2009/12/11(金) 13:49:03
Teslaは選別品
365デフォルトの名無しさん:2009/12/11(金) 14:52:34
低価格帯で一番安定してるGPUってなに?
366デフォルトの名無しさん:2009/12/11(金) 15:53:13
http://slidesha.re/5FtABc のP.26
長崎大の人に言って選別プログラムを貰うことだなw
367デフォルトの名無しさん:2009/12/11(金) 16:12:17
CUDAは保障外だからCUDAやりたい奴は動くのが当たるまで買えってことなんだろう
368デフォルトの名無しさん:2009/12/11(金) 16:17:50
仮に2/3超の確率で完動しないとしても、自前で問題無く選別できるなら
Tesla買うよりコンシューマGPU買うほうがまだ安い位だから、たくさん
買う人は自前で選別できるように頑張るのが正解だよなぁ。
369デフォルトの名無しさん:2009/12/11(金) 16:40:06
多少クロック落とせば動くんじゃないのかな。CPUのオーバークロックと一緒で。
370デフォルトの名無しさん:2009/12/11(金) 20:54:29
>>361
自分は11/27楽天でぽちって 12/01に到着。
ぼちったあとすぐ納期の表示が延びたから焦ったけど滑り込みセーフだったらしい。
書いてあることはわかり易い。しかし意外なことが触れられていなかったりする。



371デフォルトの名無しさん:2009/12/11(金) 22:49:23
>>360
その状態が続く限り、コンシューマ用パッケージソフトじゃGPGPUを使えないね。
「動かない」サポートの爆発でたいへんなことになる。
372デフォルトの名無しさん:2009/12/11(金) 23:34:51
てか>>356の作ってるソフトが選別ソフト代わりになるんじゃね?
373デフォルトの名無しさん:2009/12/12(土) 13:58:47
おれらまだまだ、「主メモリ側が主役」って固定観念なくね?
いかんな。どかどかデバイスメモリにロード、大量のブロック×スレッドを駆使、
CPUはたまにお手伝いをさせていただく、位に思わないとな。俺まだまだ
374デフォルトの名無しさん:2009/12/12(土) 15:52:58
メモリ転送と計算を非同期で出来るのかね?
375デフォルトの名無しさん:2009/12/12(土) 15:58:25
>>374
マルチスレッドで、CPU側は「GPU様が計算し終わるまで寝とけや」くらいの扱いにするわけよ
376デフォルトの名無しさん:2009/12/12(土) 16:43:09
>>374
できる。
基本GPUとCPUでは非同期。
ストリームを設定すれば、GPUで演算中にデータ転送させることも可能。

ちゃんと同期させるための関数もある。
377デフォルトの名無しさん:2009/12/13(日) 15:51:31
> NEXUS
いつ出るんだっけ
VisualStudio2008でいいんだっけ
378デフォルトの名無しさん:2009/12/15(火) 06:00:58
カーネルで計算した結果をCPU側に返すにはどうしたらいいの?
return aのように簡単にはできないのですか?
379デフォルトの名無しさん:2009/12/15(火) 06:22:49
>>378
ちょw
カーネルfunctionの引数で float * outdata
とかやってカーネルからこれに書き込む outdata[i] = result;
ホスト側でcudaMemCopyのdeviceToHostで、ホスト側でcudamallocしたfloat * に戻す
みたいになる。ややこしいぞ?
380デフォルトの名無しさん:2009/12/15(火) 19:31:04
thrust便利だなしかし
381デフォルトの名無しさん:2009/12/16(水) 02:52:17
thrust、自分で書いたカーネル関数はどう使うのっすか
382デフォルトの名無しさん:2009/12/16(水) 15:26:45
__shared__ int sh[num*2]; /* numはスレッド数 */
という共有メモリの配列をソートし、最大or最小のデータのみグローバルメモリに書き込みたいのですが
これをカーネルの中でやるいい方法を教えてください。
383デフォルトの名無しさん:2009/12/16(水) 17:36:07
ソートは不要で、reductionで半分を繰り返せばいいのでは
384デフォルトの名無しさん:2009/12/16(水) 23:18:35
>>383
言われてみればそうですね。
解決しました。thx
385デフォルトの名無しさん:2009/12/17(木) 03:27:35
どこかにfortranでの使用例って
ありませんか
386デフォルトの名無しさん:2009/12/18(金) 16:42:19
そういえば見かけたことねえな
387デフォルトの名無しさん:2009/12/18(金) 17:17:27
CUDAはそもそも実行速度がシビアで
高級言語向けではないと思うけどな
388デフォルトの名無しさん:2009/12/20(日) 02:21:29
共有メモリは16個のバンクに分割されて、半ワープのスレッドが同じバンクにアクセスしなければ競合は起こらない。
みたいな事の意味がイマイチ分かりません。

例えばブロックの共有メモリが8KBなら0.5KBづつに分けられて、半ワープのスレッドが0.5KBの中ならどこにアクセスしても良いって意味なの?
それとも、先頭から4バイトとか8バイトとかの固定の領域に連続して分けられてるの?
でもそれだと分けられる領域が4バイトなのか8バイトなのか分からないじゃまいかヽ(`Д´)ノ

カーネルの引数にvoid*とデータサイズを渡して任意のデータ長で処理させたいのですが、
こういう事をしようとすると元からバンク競合は避けられないのですか?教えて、エロイ人(´・ω・`)
389デフォルトの名無しさん:2009/12/20(日) 02:33:00
今あるMPIのプログラムをGPUに対応させようと考えているんだけど、
CUDAでMPIを使うとき、データの転送は一端ホスト側のメモリに転送してから
他のノードへ転送することになるの?
だとするとレイテンシがすごく大きそうだね。
それとも専用のライブラリなんかあるのかな?
GPU側のグローバルメモリがホスト側のメモリにマップされていれば、
GPUを意識しないで転送ができそうなんだが。
390デフォルトの名無しさん:2009/12/20(日) 08:02:33
>>388
おれの解釈だと、共有メモリには16個のアドレス入力と16個のデータ入出力が有る
と思ってるんだけど 違うかも
391デフォルトの名無しさん:2009/12/20(日) 09:55:19
>>388
連続する64バイトの領域(先頭アドレスが4の倍数)について、4バイト(32bit)のバンク16個に分かれています。

例えばバンク0に属するアドレスは0、64、128、192、256、・・・・・から始まる4バイトの領域。

任意のデータ長が4バイトより大きいのか小さいのか分かりませんが、テンプレート等を使う場合には
型に合わせて場合分けをする必要があるでしょう。

>>390
「1個のアドレス入力と1個のデータ入出力ができるバンク」が16個あるというのが適切な表現かと。
392デフォルトの名無しさん:2009/12/20(日) 10:00:29
>>389
device memory on node 0 -> host memory on node 0 -> host memory on node 1 -> device memory on node 1
となるのでレイテンシは大きくなります。今のところCUDAではデバイスメモリをメモリマップする手段はありません。
ただし十分大きなデータを転送する場合にはパイプラン化すれば問題なくなると思います。

むしろpinnedメモリとMPIライブラリの干渉が一番の問題・・・・。
393デフォルトの名無しさん:2009/12/20(日) 10:47:33
>>392
レスサンクス

やはりレイテンシは大きいのだね。
目的のアプリは数10kbyteから数100kbyteの転送を頻繁に行うから、
せっかくGPUで速くできても、転送ボトルネックで詰まりそう。
転送するサイズも小さいので、page lockさせない方がよいのかも。

394デフォルトの名無しさん:2009/12/20(日) 14:34:19
GPUの購入で悩んでいるのだが、
Tesla C1060, GTX295,GTX285のうち結局どれが
速いんですか?ちなみに流体に使います。
GTX295ってGPU2基積んでるけど並列プログラミング
しないと2基機能しないとか?
素人質問で申し訳ない。
Teslaの保証とサポートも魅力的だが。
395デフォルトの名無しさん:2009/12/20(日) 14:44:32
>>394
メモリ量でC1060になっちゃう なんてことないかな?
295はちゃんとマルチスレッドでプログラムしないと二基使えないです。
396デフォルトの名無しさん:2009/12/20(日) 15:45:47
>>390 >>391
なるほど…よく分かりました。レス感謝。
処理させたい任意のデータ長は5バイトだったり、11バイトだったり半端な数もきます。
任意のデータ長に対してコピーやビット演算を行なうんですが、データ長が4バイトより大きいと
もうバンク競合は避けられない感じなんですね。

プログラムも汎用にさせたかったけどここは我慢するしかないのか…(´・ω・`)
397デフォルトの名無しさん:2009/12/20(日) 16:09:09
VCでプロジェクト作るのが面倒なんだけど、
なんかウィザード的なものはないのかな
398,,・´∀`・,,)っ-○○○:2009/12/20(日) 16:29:23
http://forums.nvidia.com/index.php?showtopic=65111&pid=374520&st=0&#entry374520

HTML+JavaScriptだから好きに書き換えられるだろ
399デフォルトの名無しさん:2009/12/20(日) 16:30:40
おいらも流体で使う予定だが
GTX260を二つ買ってCUDAのお勉強しつつFermi待ち
C1060とか中途半端に高いからねえ
400デフォルトの名無しさん:2009/12/20(日) 16:35:47
Nvidia寄りのとある企業のエンジニア曰く、
スペックはまったく同じでGTX285のチップの選別品だといっていた。
クロックがGTX285のほうが高いし、GTX285のほうが若干早いかも。

でもこのスレでもあるように、なんか計算結果がずれる可能性があるし、
メモリの多いTeslaが使えるなら使いたいよね。
401デフォルトの名無しさん:2009/12/20(日) 16:53:55
DodでさえIBM CellじゃなくてPS3を購入してるんだからGTX285で十分でしょう。
402デフォルトの名無しさん:2009/12/20(日) 17:01:10
>>398
まだ完成してないんじゃん
403デフォルトの名無しさん:2009/12/20(日) 18:24:06
>>396
ASCII本の絵がわかりやすいけど、
共有メモリーは[16][17]にすれば問題ないと思う。
共有メモリーは無駄飯食っている用心棒みたいなもんで、
冗長にしてでも使えるときに使わない手はない。
404394:2009/12/20(日) 22:43:43
皆さん、レス感謝です。
なるほど、GTX285とC1060差はさほどないんですね。
メモリと耐久性とサポート,計算結果
に関してはTeslaが有利というわけですな。
とりあえずGTX295のマルチスレッドはちょっと遠慮しようかなと思います。
もうちょい1人で悩んでみます。

405デフォルトの名無しさん:2009/12/21(月) 00:30:00
個人的には285の2GBメモリ版がお薦めなのです。
406デフォルトの名無しさん:2009/12/21(月) 06:47:28
【SIGGRAPH Asia 2009レポート】
東工大、スクウェアエニックスがCUDA実装事例を紹介
ttp://pc.watch.impress.co.jp/docs/news/event/20091221_338290.html
407デフォルトの名無しさん:2009/12/21(月) 07:04:05
【SIGGRAPH Asia 2009レポート】
NVIDIAがGPUによるグラフィックスワークスタイルの変革をアピール
ttp://pc.watch.impress.co.jp/docs/news/event/20091218_336837.html
408デフォルトの名無しさん:2009/12/21(月) 07:14:00
>>405
どっか、285の4GB版とか安く出してくれないもんかね。
409デフォルトの名無しさん:2009/12/21(月) 07:15:58
     ...| ̄ ̄ | < Fermiはまだかね?
   /:::|  ___|       ∧∧    ∧∧
  /::::_|___|_    ( 。_。).  ( 。_。)
  ||:::::::( ・∀・)     /<▽>  /<▽>
  ||::/ <ヽ∞/>\   |::::::;;;;::/  |::::::;;;;::/
  ||::|   <ヽ/>.- |  |:と),__」   |:と),__」
_..||::|   o  o ...|_ξ|:::::::::|    .|::::::::|
\  \__(久)__/_\::::::|    |:::::::|
.||.i\        、__ノフ \|    |:::::::|
.||ヽ .i\ _ __ ____ __ _.\   |::::::|
.|| ゙ヽ i    ハ i ハ i ハ i ハ |  し'_つ
.||   ゙|i〜^~^〜^~^〜^~^〜
410デフォルトの名無しさん:2009/12/21(月) 11:01:34
めるせんぬついすた、GPU版の使い方@Windowsがやっとわかったわー
411デフォルトの名無しさん:2009/12/21(月) 15:33:23
     |┃三          /::::::::ハ、\、::::::::\\::::::::::::',
     |┃            i:::::::イ  `> ー─--ミ::::::::::::|
     |┃            {::::::::|    ::\:::/::::  \:::リ-}
 ガラッ. |┃            ',::r、:|  <●>  <●>  !> イ
     |┃  ノ//        |:、`{  `> .::  、      __ノ
     |┃三          |::∧ヘ  /、__r)\   |:::::|
     |┃            |::::::`~', 〈 ,_ィェァ 〉  l::::::》 <フェニミストはまだかね 辛抱たまらん
     |┃            |:::::::::::::'、  `=='´  ,,イ::ノノ从
     |┃三         ノ从、:::::::::`i、,, ... ..,,/ |::::://:从
412デフォルトの名無しさん:2009/12/21(月) 16:19:40
おれの物欲も辛抱たまらん、Core i7+GTX260Mノートが欲しくて。
でもFermiのモバイル版が乗ったノートが出るのを松
413デフォルトの名無しさん:2009/12/21(月) 21:07:30
故あってCUDAを使うことになったのですが自宅にはRadeonを積んだものしかありません。
コンパイルオプションでCPUでのエミュレーションができると何かで読んだのですが
これを利用すればRadeonの環境でも一応の動作はするのでしょうか?
414デフォルトの名無しさん:2009/12/21(月) 21:24:33
CPUでのエミュレーションなので
radeon関係なくCPU上で動くよ
415デフォルトの名無しさん:2009/12/21(月) 21:44:22
即レスどうもです。学校には設備があるので問題ないのですが自宅でもやりたかったので

あともう一つ質問よろしいでしょうか。VineLinuxでの動作は可能でしょうか?
気になったのですがどうもサポートしてないようなので
416デフォルトの名無しさん:2009/12/22(火) 05:22:26
>>412
悪魔:「単精度なら大して変わらないんだから、買っちゃえよ!Fermi出たらまた買えよ!」
417デフォルトの名無しさん:2009/12/22(火) 06:31:17
>>415
Linuxでサポート期待しちゃいかんだろう
あとエミュレーションはテクスチャ周りなど微妙に?おかしい模様なんで、あんまり期待しないほうがいい。
5000円くらいで適当なカード買うのが一番無難かもよ。
418デフォルトの名無しさん:2009/12/23(水) 09:13:22
なんか、GeForceの在庫がどんどん無くなっていってない?
まもなくFermi出るな!これは!
419デフォルトの名無しさん:2009/12/23(水) 11:06:25
C2050/2070よりも先にFermi搭載のGeForceが出ると発表しているしね

NVIDIA、“Fermi”採用第1弾GPU「Tesla 20」シリーズ発表 - ITmedia +D PC USER
ttp://plusd.itmedia.co.jp/pcuser/articles/0911/17/news039.html

まあ、実際に2010Q1に出るかは怪しいわけだが

C2050が2499ドルってのは自宅用で用意するには結構きつい値段なので、
Fermi搭載のGeForceがどの程度の値段なのかが今から気になっている
420デフォルトの名無しさん:2009/12/23(水) 11:07:45
>>415
とりあえず玄人思考のGTX260でも買ってみよう
でかいからPCケースに入るか確認してからね
421デフォルトの名無しさん:2009/12/26(土) 03:28:46
Device 0: "GeForce 8600 GTS"
Total number of registers available per block: 8192

CUDAやろうと思ってますが、レジスタの領域が少なすぎませんか?
__device__ void swap(float *d1, float *d2);
例えばこのような関数呼び出すのに引数とtempで計12byte、他にもthIDや作業用でローカル変数使うから、
最大のパフォーマンス求めようとすると実質スレッドは300個くらいになるんだけど…

こんなんだと何万、何千のスレッドとか無理じゃね?
みんなカーネル以外の関数は作らずにカーネルの中に処理を直書きしてるのですか?
422デフォルトの名無しさん:2009/12/26(土) 04:01:38
>>421
レジスタとスタックとかバイトとレジスタ個数とかごっちゃになってないか色々と
423デフォルトの名無しさん:2009/12/26(土) 11:11:36
4Gamer.net ― Fermi時代の製品展開が分かってきたNVIDIAのGPUロードマップ。DX11世代が出揃うのは2010年Q2以降に(Fermi(開発コードネーム))
http://www.4gamer.net/games/099/G009929/20091012001/

Fermi搭載のGeForceは3月くらいかなあ…?
この記事自体が2ヶ月前だからなんともだけどね
424デフォルトの名無しさん:2009/12/26(土) 17:54:34
425デフォルトの名無しさん:2009/12/26(土) 18:03:48
>>421
>Device 0: "GeForce 8600 GTS"
>Total number of registers available per block: 8192
直訳すると、「ブロックあたり使用可能なレジスター数:8192」

ブロックあたりのスレッド数は数千・数万もいらない。
128〜256程度でだいたいパフォーマンスは出る。(それを複数コアで何セットも同時に動かす)

あとカーネル1個でなんでもかんでもするもんでもない。(直列的な)処理ごとに分割すればいい。
426421:2009/12/27(日) 23:15:38
>>422 >>425
うん…見直すと自分とても恥ずかしい事言いましたね(´・ω・`)
当初の疑問は理解して解決しました。

で、また別の話のGPGPUに関して質問です。
今DirectX使ってゲームを作っていて処理の重い部分(当たり判定とか)をGPUにやらせようと思っているんだけど、
ゲームって元々グラフィック描画でGPU使うので、それに加えてCUDAやプログラマブルシェーダーでGPGPUしたら相当パフォーマンス落ちますか?

目的はCPU使用率を抑えたいんだけど、ゲームのような1フレーム毎にGPGPUをするのは実用で使えうるものなんでしょうか。
427デフォルトの名無しさん:2009/12/27(日) 23:28:32
当たり前の話だけど、GPUをフルに使うようなレンダリングをしていたら遅くなる
フレーム枚にGPGPUの処理を入れるのはそんなに問題ない
ただし処理の重い部分ってのが上手く並列化できるアルゴリズムであることや、そこそこの量あることが求められる
分岐ばっかだったり、処理よりメインメモリ-VRAM間の転送のほうが時間かかると逆に遅くなる
ようは、本当にGPGPUを使ったほうがいい処理なのかを吟味する必要がある
428デフォルトの名無しさん:2009/12/27(日) 23:54:43
質問です。

C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK\C\src\template\template_vc90.vcproj
を開き、ビルドした所、「入力ファイル 'cutil32D.lib' を開けません。」というエラーが出ました。「x64」では、スキップされてしまいます。
>>34 とほぼ同じ状況なので、このスレに書かれている事をしてみたのですが、変化ありません。

また、リンカの設定でcutil32D.libをcutil64D.libに変えた所、x64でビルド出来るようになったのですが、
「モジュールのコンピュータの種類 'x64' は対象コンピュータの種類 'X86' と競合しています。」と別のエラーが発生しました。

環境は
windows7 64bit
Visual C++ 2008 Express Edition
GTS250
CUDAのドライバ、toolkit、sdkは2.3でwin7 64bitの物を入れました。

改善策がありましたら、ぜひお願いします。
429デフォルトの名無しさん:2009/12/28(月) 00:17:23
>>428
Expressは64bitでコンパイルできないかも?
http://www.microsoft.com/japan/msdn/vstudio/2008/product/compare.aspx
430デフォルトの名無しさん:2009/12/28(月) 00:25:04
>>429
みたいです。やはりproを買うしかないのでしょうか…
レスありがとうございました。
431デフォルトの名無しさん:2009/12/28(月) 00:48:50
>>428 >>430
答えるのに十分な情報量を持った質問を久しぶりに見たような気がしたw

proが良いけどねぇ。
今は最適化コンパイラもついてるし、standardで良い気もする。
(standard使ったことはないので参考まで)
432デフォルトの名無しさん:2009/12/28(月) 02:01:56
PlatformSDKにx64コンパイラあったような
433デフォルトの名無しさん:2009/12/28(月) 20:43:04
落ち着いて、なぜこういうエラーがでるのか?
と、考えるしかないよ。
434デフォルトの名無しさん:2009/12/29(火) 11:29:33
CUDAが使えるGPUが載ってるか否かの判断をプログラム上で行うには
どうするといいのでしょう?
435デフォルトの名無しさん:2009/12/29(火) 11:57:15
OpenCL入門 - マルチコアCPU・GPUのための並列プログラミング

が出版されるそうな
アスキードットテクノロジーズの記事書いた人たちらしいが

GPGPUでもっともメジャーなのはCUDAだと思うけど
OpenCLがこの本の売り文句通りスタンダードになるんだろうか…?

よくわからないけど、無関心でいるわけにも行かないのでとりあえずポチってみる

感想あったらアマゾンのレビューに書く

>>434
プログラム上でその判断をやる必要というのがよくわからない
コマンドラインでやるのでは駄目なのか
436デフォルトの名無しさん:2009/12/29(火) 11:57:22
>>434
それはやはり
cudaGetDeviceCountして、CUDAデバイス個数調べ
cudaGetDevicePropertyをDeviceCountまわして、
.major、.minorでバージョンチェック
.multiProcessorCountでコアの個数調べ
して使うしかないんじゃ。
437434:2009/12/29(火) 12:21:50
>>436
どうも

>>435
CUDA依存部分を共有ライブラリの形でプログラム本体から切り出しておいて、
実行時に動的にリンク出来たらとか考えてます。

…CUDA版バイナリと、CUDA無し版バイナリを用意して、インストール時に
選ばせればいいのか。
438デフォルトの名無しさん:2009/12/29(火) 13:05:23
>>435
スタンダードはどう考えてもDirectComputeだろ。
いまのWindowsのシェアとDirectXの普及率から考えてCUDAがスタンダードになるにはポテンシャルが違いすぎる。
439438:2009/12/29(火) 13:06:36
CUDAはスタンダードになれる可能性はあるけど、OpenCLはたぶん廃れる。
OpenCLって所詮はCUDAのラッパでしょ?
ラッパライブラリがスタンダードになった事例ってあんまり知らないんだけどさぁ。
440デフォルトの名無しさん:2009/12/29(火) 13:16:26
Appleはラッパ好きだよな。
ObjCもラッパではないにしろマクロ駆使してるだけで、骨はCに変わりはないでしょ?
Appleは声は大きいけど技術が無いから、OpenCLもあんまり期待してないよ。
所詮ラッパライブラリだから、コンパイルしたらどのGPUでも使えるってわけではないし。
OpenCLのDLLロードしたらどのGPUでも同じバイナリでおkみたいになったら使いやすいけどね。
441デフォルトの名無しさん:2009/12/29(火) 13:19:23
てか俺が作っちゃう?www
442デフォルトの名無しさん:2009/12/29(火) 13:27:41
>>437
436でCUDA使えるかどうか確認して、
プログラムとしてはCPU用ルーチンとGPU用ルーチンを両方持っておく
でいいんじゃね?(やはり、動作確認用にCPU/GPU双方で試すのは必要と思うし)
443デフォルトの名無しさん:2009/12/29(火) 13:30:38
>>438
おれ、
ttp://openvidia.sourceforge.net/index.php/DirectCompute
見て「うざっ!!」と思って挫折した。 ダメな俺
444デフォルトの名無しさん:2009/12/31(木) 03:50:21
pyCUDAってどうかな
DriverAPIを使ってモジュールを実行時に作成、ロードするみたいですね。
445デフォルトの名無しさん:2010/01/03(日) 16:34:54
3次元のデータをデバイス側に送って計算したいんですけど、
>>328
>固めてまとめて渡しちゃったほうがオーバーヘッドが少ないと思います。
>トータル何列あるよ、は別にパラメータで渡す。

というのはどこにどのように記述すればいいのでしょう?
446デフォルトの名無しさん:2010/01/03(日) 16:57:35
>>445
もちろん、少ないならデバイス関数の引数として渡す。パラメータ複数個まとめた配列で渡しても良いし。
計算の対象、計算の結果、に加えて、計算のパラメータ、も同様にホスト側で確保→cudaMemCopyするわけ。
447デフォルトの名無しさん:2010/01/03(日) 17:38:23
>>446
ありがとうございます。

物分かりが悪くて申し訳ないのですが、
cudamemcpyは確保した領域にデータをコピーする使い方しか思いつかないので、

>計算の対象、計算の結果、に加えて、計算のパラメータ、も同様にホスト側で確保→cudaMemCopyするわけ。
を簡単に例で説明していただけないでしょうか?
448デフォルトの名無しさん:2010/01/04(月) 00:23:45
えっ なぜ分からないんだ? たとえばこんな感じだよ

__device__ calculate(float * input, float * output, int * params){

:
if (params[i] == 0)
   output[i] = func_A(input[i]);
if (params[i] == 1)
   output[i] = func_B(input[i]);

 __syncthreads();
449デフォルトの名無しさん:2010/01/04(月) 11:06:25
>>448
ありがとうございます。
なんだか変な方向に考えすぎていました。
450デフォルトの名無しさん:2010/01/04(月) 12:52:14
CUDAってGPUカーネルの中で関数読んで値をreturnさせることできたっけ?

あと__global__にしないとホストから関数呼べなくね?
451448:2010/01/04(月) 13:31:34
calculateが__global__で、func_A()、func_B()が__device__ですたorz
452デフォルトの名無しさん:2010/01/04(月) 14:00:48
Fermi搭載GeForceの発売がまた不透明になったとか
453デフォルトの名無しさん:2010/01/04(月) 16:05:01
⇒を何らかの演算として 0⇒256 256⇒512 512⇒0 といった感じにしたいのですが

a = (a+256)%513;

とする以外思いつきません。けど剰余は遅いので違う計算にしたいんです。
いっそのことテーブル作ったりif文にしたほうが早いのでしょうか?
馬鹿すぎてわかりません。誰か助けて
454デフォルトの名無しさん:2010/01/04(月) 16:10:45
>>453
Cudaだと四則演算はほとんど処理時間には影響しないし、その式をつかうといいんじゃない?
っていおうとおもったけど、a=512のとき0にならなくね?
455デフォルトの名無しさん:2010/01/04(月) 16:13:31
257⇒0 258⇒1 … でいいの?
でもそうすると512⇒0がヘンだけどな。

int val;
val = a + 256;
if (val > 512) val = val - 513;

でいいんじゃないの?
というかC言語の疑問をCUDAスレで聞くのはまちがっとる、ここは人口が少ないぞ
456デフォルトの名無しさん:2010/01/04(月) 16:26:48
じゃあCUDAっぽく

const int TABLE[512] = { 256, ... , 512, ... , 0 }

__device__ int f(int a){
return TABLE[a];
}
457デフォルトの名無しさん:2010/01/04(月) 17:09:36
レスありがとうございます
わけわかんないこと書いてすみません
テーブルとif文試して出直してきます
458デフォルトの名無しさん:2010/01/04(月) 17:37:31
>>453
b⇒aとして、
a = (b+256)%768;
でいいのかな?
0⇒256
256⇒512
511⇒767
512⇒0
459デフォルトの名無しさん:2010/01/04(月) 21:45:29
釣りだよな?
460デフォルトの名無しさん:2010/01/05(火) 01:06:37
申し訳ないっす
461デフォルトの名無しさん:2010/01/07(木) 00:21:36
ランダム関数の作成で悩んでます。
・CPUで作成した乱数リストをGPUに転送しない
・1スレッドの中で何度も呼ばれる
・グローバルメモリは使わない。スレッドIDやclock()をseedとして使う

この制約で良い乱数生成アルゴリズムを教えて下さい。
MTGPっていうのを参考にしようとしましたがムズ過ぎて挫折…まずコンパイルが通らず(´・ω・`)
462デフォルトの名無しさん:2010/01/07(木) 01:01:35
おれMTGPコンパイルできたよ。GPU側で作成してそのままGPUで使えるし。
(シンボルコピー)
463デフォルトの名無しさん:2010/01/07(木) 08:15:53
使ったファイルはこれだけ
mtgp32-fast.h
mtgp32-cuda.cu
mtgp32-fast.c
mtgp32-param-fast.c
make_single_random()とかの末尾を適当に書き換える。
464デフォルトの名無しさん:2010/01/07(木) 12:09:10
誰かOptiXやってる人いませんかー?
465デフォルトの名無しさん:2010/01/08(金) 09:15:11
CES 2010: NVIDIA Shows GeForce GF100 Fermi Video Card - Legit Reviews
http://www.legitreviews.com/news/7122/

3/2に本当に出るのかしらん
466デフォルトの名無しさん:2010/01/08(金) 09:22:19
気にするな、出たら買う、出るまではCUDAの修行をする。
単純でイイじゃないか。
467デフォルトの名無しさん:2010/01/08(金) 09:41:48
>>461
Perlinノイズやってみてよ
ttp://mrl.nyu.edu/~perlin/doc/oscar.html
Cのソースが有る
468デフォルトの名無しさん:2010/01/08(金) 11:02:05
Fermiもダメそうってどこかのブログで見た
NVIDIAまじやばい
469デフォルトの名無しさん:2010/01/08(金) 11:05:40
ようやくCUDAに慣れてきたところなのに、StreamSDKとかOpenCLとか
DirectComputeとかまた勉強しないといけないの? 
辛いのうwwプログラマは辛いのうwww   orz
470デフォルトの名無しさん:2010/01/08(金) 13:36:24
windows7 64bit、Visual C++ 2008 Pro環境に、CUDA toolkit、sdk 2.3をインストールして、
C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK\C\srcにある、
_vc90.slnファイルを開いて、問題なくビルドできます。
exeファイルの出力先は、デフォルトでC:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK\C\bin\win64\ですが、
これ以外の出力先に変更する方法を教えてください。
471デフォルトの名無しさん:2010/01/08(金) 13:42:23
プロジェクトのプロパティで変更できるよ
$(OutDir)\$(ProjectName).exe
これを丸ごとフルパスで指定してしまいなさい。
472デフォルトの名無しさん:2010/01/08(金) 17:14:12
XP,32bitでコンパイルしたプログラムを7,64bitで動かそうとしたら動かなかった・・・

こういうものなのか
473デフォルトの名無しさん:2010/01/08(金) 17:23:41
32/64ビットのcudart.dllが必要
474デフォルトの名無しさん:2010/01/08(金) 19:20:38
>>471
thanks
475デフォルトの名無しさん:2010/01/10(日) 12:33:02
現在CUDA SDKを導入しVisual C++ 2005 Express Editionを使用しCPUでのエミュレーションを行っています。
いくつかのサンプルは動かせたのですがparticlesなど複数のサンプルでコンパイルはできているようですが実行すると以下のようなエラーが出ます

device emulation mode and device execution mode cannot be mixed.

エラーが出ている行は

cutilCheckMsg("cudaMalloc failed");
cutilSafeCall(cudaGLRegisterBufferObject(vbo));
cutilSafeCall( cudaMalloc3DArray(&noiseArray, &channelDesc, size) );

のように「cutil〜」になってます。オプションから設定しているのでデバイスエミュレーション自体はうまく行ってるようなのですが
エミュレーションを行う際はソースを書き換える必要があるのでしょうか?
476デフォルトの名無しさん:2010/01/10(日) 12:55:52
メッセージのとおりエミュONOFFまぜてる
またはリビルドしてないんじゃ?

プロジェクト設定じゃなくてビルド構成のほうでエミュレーションにかえられないっけ?
477デフォルトの名無しさん:2010/01/10(日) 13:05:00
メッセージの内容は把握できています。
リビルドも多分できてると思います。
エミュレーションの設定は
プロジェクトのプロパティ→CUDA Build Rule→Emulation Mode はい
にしてます。ほかの方法はよくわからないのですがほかの方法があるのでしょうか?
478デフォルトの名無しさん:2010/01/10(日) 22:13:13
ビルド構成のほうからエミュレーションの設定ができました。問題なくビルド&実行できました。ありがとうございます。

ただFPSが0.1なんでほぼ無意味でした。
479デフォルトの名無しさん:2010/01/10(日) 23:24:17
エミュレーションなんてHello world以上のことをやるもんじゃないな
480デフォルトの名無しさん:2010/01/11(月) 00:20:59
処理する画面領域を1000分の1ぐらいに限定して、バグを調査するくらいのことはできる。
481デフォルトの名無しさん:2010/01/11(月) 01:26:19
なんだっけ、エミュじゃなくて実機で実デバッグできるやつ
早く来てほしいな
482デフォルトの名無しさん:2010/01/12(火) 14:25:34
CPU版アプリの移植の際に、エミュはデータ検証に使える。
483デフォルトの名無しさん:2010/01/12(火) 20:21:38
-G オプションって使える?WinXPで
「'assembler' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
と出てビルドできないけど。

--deviceemuもつけないとだめなの?
484デフォルトの名無しさん:2010/01/13(水) 09:38:31
CUDAのバージョンを書き出しておきたいのですが、
CUDAのバージョンを調べる関数か何かありませんか?
485デフォルトの名無しさん:2010/01/13(水) 09:41:29
>>484
>>436 でどう?
486デフォルトの名無しさん:2010/01/13(水) 09:50:27
こっちを要求している気がする。
cudaRuntimeGetVersion()
cudaDriverGetVersion()
487デフォルトの名無しさん:2010/01/13(水) 09:56:08
WindowsでCUDAを使っています。
ループが一定回数超える度に、coutで経過を表示しています。
Linuxに比べて遅かったので、いろいろ試してみたところ、
DOSウインドウの前で、マウスを動かすと、速くなります。
垂直同期か何かで引っかかっているのかと思い、設定で切ってみましたが
状況が変わりません。
どなたか似たような状況になって解決された方はいないでしょうか?
488487:2010/01/13(水) 11:05:28
追加報告です。

cudaMemcpyでcudaMemcpyDeviceToHostでコピーするところで異常に時間がかかっているようです。
この1行を消すだけで、100秒ほどかかっていたのが2秒にまでなりました。
逆方向のcudaMemcpyHostToDeviceは問題ありません。
489デフォルトの名無しさん:2010/01/13(水) 11:13:17
CUDAプログラムがGPUで計算等をしている間は画面表示の更新が遅くなります。
1回のループにどれくらいの時間がかかるのか、一定回数がどれくらいかによりますが、
経過の表示される間隔が短いとその影響を受ける可能性があります。

あるいは、マウスを動かすことでCPUに負荷をかけないとパワーセーブモードに入ってしまうとか・・・・。
490デフォルトの名無しさん:2010/01/13(水) 11:17:06
>>488
転送に100秒かかるのは現実的にありえないので、恐らくcudaThreadSynchronize()等でカーネルの実行完了待ちを
していないのではないかと思います。カーネル呼び出しそのものは一瞬で終わりますが、
後続のcudaMemcpy(.....,...,...., cudaMemcpyDeviceToHost)時に暗黙的にそれまでに呼び出したカーネルの実行完了を待っています。

・・・・・ということかどうかは分かりませんが。
491デフォルトの名無しさん:2010/01/13(水) 11:29:27
>>489,490さん

早速の返信ありがとうございます。

cudaMemcpyでcudaMemcpyDeviceToHostを消したプログラムで、
プログラムの一番最後にだけ結果を取り出してみたところ、
正しく計算されていました。

次に、カーネルの実行部分のみをコメントアウトした場合、
やはり非常に時間がかかってしまいました。

やはり、GPUからCPUへのデータ転送に(というよりなにか同期の部分の様な気もしますが)
時間がかかっているようです。

計算用マシンなので省電力の設定はしていません。
492デフォルトの名無しさん:2010/01/13(水) 11:48:15
>>491

> cudaMemcpyでcudaMemcpyDeviceToHostを消したプログラムで、
> プログラムの一番最後にだけ結果を取り出してみたところ、
> 正しく計算されていました。

これを読むと、そもそも何度もDeviceToHostの転送をする必要がない処理という解釈で
よいのでしょうか?

DeviceToHostが遅くなる理由はハードウェア的なものから色々あります。
マザーボードを交換したという人もいました。

SDKに含まれているbandwidthTestの結果はどうなっていますか?
"--memory=pinned" を付けた場合と付けなかった場合をそれぞれ調べてみてください。

493デフォルトの名無しさん:2010/01/13(水) 11:59:12
Device 0: GeForce GTX 285
Quick Mode

Host to Device Bandwidth, 1 Device(s), Paged memory
Transfer Size (Bytes) Bandwidth(MB/s)
33554432 4340.2
Device to Host Bandwidth, 1 Device(s), Paged memory
Transfer Size (Bytes) Bandwidth(MB/s)
33554432 4193.7
Device to Device Bandwidth, 1 Device(s)
Transfer Size (Bytes) Bandwidth(MB/s)
33554432 119962.3

--memory=pinned

Device 0: GeForce GTX 285
Quick Mode

Host to Device Bandwidth, 1 Device(s), Pinned memory, Write-Combined Memory Enabled
Transfer Size (Bytes) Bandwidth(MB/s)
33554432 5758.1
Device to Host Bandwidth, 1 Device(s), Pinned memory, Write-Combined Memory Enabled
Transfer Size (Bytes) Bandwidth(MB/s)
33554432 5471.9
Device to Device Bandwidth, 1 Device(s)
Transfer Size (Bytes) Bandwidth(MB/s)
33554432 119852.3
494デフォルトの名無しさん:2010/01/13(水) 12:00:32
結果はこんな感じです。
特に片方だけ遅いというわけでもないようです。
Linuxで起動した場合、遅くなるという問題は起きませんでした。

DeviceToHostが必要なのは結果を取り出すときだけで、
計算自体には必要ありません。
495デフォルトの名無しさん:2010/01/13(水) 12:03:47
似たような話をnvidiaのforumで見つけました

http://forums.nvidia.com/lofiversion/index.php?t68705.html
http://forums.nvidia.com/lofiversion/index.php?t73047.html

返信は結構あるのですが、解決策はよくわかりません。
496デフォルトの名無しさん:2010/01/13(水) 14:46:26
・CUDA内での計算処理、ループ数とループ内のステップ数、スレッド数ブロック数、だいたいどんなもんすか
・HostToDevice、DeviceToHostで転送するメモリのサイズはどのくらいですか
497デフォルトの名無しさん:2010/01/13(水) 15:02:38
とりあえず

タイマー1,2作成
cudaMemCopy(HostToDevice)
タイマー1,2起動
<<<>>>カーネル呼ぶ
cudaThreadSyncronize()
タイマー1停止
cudaMemCopy(DeviceToHost)
タイマー2停止

してほんとにMemCopyなのかカーネルなのか確かめてみる必要は。
498デフォルトの名無しさん:2010/01/13(水) 19:23:55
コピーが細切れでforループでやたら回数呼んで転送してたりしない?
1発で全部転送するのと1/1000ずつ1000回コピーするのとでは、
かかる時間に雲泥の差があるけど。
499487:2010/01/14(木) 04:10:12
PCを再起動したら、上記の問題は出なくなりました。
お騒がせしました。
500デフォルトの名無しさん:2010/01/14(木) 09:16:24
おいww 終わりかよww
501デフォルトの名無しさん:2010/01/14(木) 11:44:30
cutil64.dllってどこに置けばいいの?
502デフォルトの名無しさん:2010/01/15(金) 05:05:43
GPU側で配列の合計を求める方法を教えてください
503デフォルトの名無しさん:2010/01/15(金) 07:59:04
サンプルのreduction見れ
504デフォルトの名無しさん:2010/01/15(金) 09:52:56
syncthreadsって異なるブロック間のスレッドも同期されるのでありましょうか?
505デフォルトの名無しさん:2010/01/15(金) 20:54:27
>>504
programing guide よめ
506デフォルトの名無しさん:2010/01/15(金) 23:10:51
Best Practices Guide
もいいこと盛りだくさん書いてあるよ
507デフォルトの名無しさん:2010/01/16(土) 19:28:55
cudaでは多次元配列の使用は推奨されてないの?
508デフォルトの名無しさん:2010/01/17(日) 12:17:08
pthreadとの組み合わせでうまく動作せずに困っています。

引数として渡す構造体に、float * device_Xを用意して
for(int k=0;k<NUM_THREADS;k++){
cudaMalloc((void**)&targ[k].device_X,
sizeof(float)*(hostX.nRow)*(hostX.nCol));
cudaMemcpy((void*)targ[k].device_X,
host_X,
sizeof(float)*(hostX.nRow)*(hostX.nCol),
cudaMemcpyHostToDevice);

pthread_create(&handle[k], NULL,
compute_thread_func,
(void *)&targ[k]);
}
と渡すと、pthread内で
cudaMemcpy(temp,argument->device_X, //argumentは渡されたvoid* argをキャストしたもの
sizeof(float)*(nRow)*(nCol),
cudaMemcpyDeviceToHost);
としてもうまく取り出せません。(中身がぐちゃぐちゃになる)

同様の処理をpthreadで呼び出す関数内で行うとうまく動作します。
スレッドごとにメモリを取るのだから、中でやってもいいのですが気になります。

何か原因になっていそうなことは無いでしょうか。
509デフォルトの名無しさん:2010/01/17(日) 12:59:47
>>508
#1個のGPUに複数のスレッドからアクセスしたいアプリケーションなのかよく分かりませんが・・・・。

CUDAはスレッド毎にGPUのリソース(コンテキスト)を管理しています。
従ってこの例では
子スレッドのcompute_thread_func内の処理は
親スレッドがcudaMallocした領域にアクセスできません。
510デフォルトの名無しさん:2010/01/17(日) 13:32:14
>>509
ありがとうございます。
複数のスレッドから一台のGPUへのアクセスです。
(後々、スレッドごとに一個のGPUにしたいのですが)

スレッドごとに管理しているのははじめて知りました。
解決しました。
511デフォルトの名無しさん:2010/01/18(月) 20:51:33
「Picture Motion Browser VAIO Edition」を追加。
超解像HDアップコンバートやノイズ除去、手ぶれ補正などの編集や動画作成を、NVIDIA CUDAによるGPU演算を使って行なえる。
512デフォルトの名無しさん:2010/01/18(月) 22:00:36
                 GT200         Fermi
トランジスタ数         14億          30億
倍精度浮動小数点  30FMA Ops/clock      256FMA Ops/clock
単精度浮動小数点       240           512
シェアドメモリ(SM)       16KB          64KB
L1メモリ             無し        48KB or 16KB
L2メモリ             無し          768KB
アドレス幅            32bit         64bit
複数のカーネル実行
      無し        16個まで(GigaThredエンジン)

*L1キャッシュ搭載
GT200では16KBのSMが32個あり、それぞれCUDAコアを8個割り当てられ、L1キャッシュが無し。
Fermiでは64KBのSMが16個。それぞれにCUDAコアが32個割り当てられ、SMから16KBか48KBのどちらかをL1キャッシュとして使用可能。
GT200に対して、3倍のSMと16KBのL1が使用可もしくは同じサイズのSMと48KBのL1が使用できるようになった。これにより、今までCUDA化できなかったプログラムの対応を増やし、さらに高速化もできる。
各CUDAコアに含まれるFPユニットは倍精度浮動少数演算を強化し、GT200に対し8倍の能力。

*L2メモリの搭載 グローバルメモリに対する高速化。
*C++をサポート
*複数のカーネルの動作をサポート
SM内部のパイプラインを強化。SFUが複数に分けられたのでタスクとデータをより効率化。スレッドスケジューラを2個。

*双方向PCIE通信
GT200ではPCIEバスの送受信をどちらか片方しか一度に実行できず、理論値8GB/s・実測4〜5GB/s程度だが
Fermiでは双方向通信が可能になり12GB/sを実現

*新しいメモリコントローラ FermiよりGDDR5まで対応し、ECCにも対応する。

*コア内部を各部でモジュール化
設定された価格帯や用途ごとにコアを設計しなおさず、機能をカットオフしたり追加したりできる。
SM単位でCUDAのコアを減らしたり、D3DやOpenGLなどの固定ハードウェアが不要なTeslaなどでオフになったりする可能性もある。
513,,・´∀`・,,)っ-○○○:2010/01/19(火) 02:32:35
                 GT200         理想のFermi        現実のFermi
トランジスタ数         14億          30億              30億  
倍精度浮動小数点  30FMA Ops/clock     256FMA Ops/clock    224FMA Ops/clock
単精度浮動小数点       240           512              448FMA Ops/clock
シェアドメモリ(SM)       16KB          64KB              〃
L1メモリ             無し        48KB or 16KB          〃
L2メモリ             無し          768KB             〃
アドレス幅            32bit         64bit               〃
複数のカーネル実行      無し        16個まで(GigaThredエンジン) 14個まで(GigaThredエンジン)
514デフォルトの名無しさん:2010/01/19(火) 04:04:04
OpenCL待ちしてたけど、GPUの対応はCUDAだけっていう開発ばっかな
Fermiで本気出すから
515デフォルトの名無しさん:2010/01/20(水) 02:23:16
GT100ってなんかメモリアクセスのレイテンシがすごくでかくない?
それを隠蔽するために、L2キャッシュが128Kになっているけど、
コヒーレンシとかどうなのかな?
やっぱりGPUはデータ並列なアプリしか向いていないのかね。
516デフォルトの名無しさん:2010/01/20(水) 16:04:40
Fermiのグローバルメモリのレイテンシが遅いってのは何処から来た情報?GDDR5に対応するんだから、帯域は大きくなりそうだけど。
517デフォルトの名無しさん:2010/01/20(水) 17:08:55
>>512
SFUは今のGT200でも複数ある。
ただ、SFUが外部のパイプラインに分かれたからSFUを使っているときに違う種類の演算ができるようになったってことじゃね・。

>>515
最適化しなければいけない
518デフォルトの名無しさん:2010/01/21(木) 03:41:00
>>516
これをみて思った。
http://pc.watch.impress.co.jp/img/pcw/docs/343/352/html/kaigai-01.jpg.html
でもGT200と一緒なんだね。
http://pc.watch.impress.co.jp/docs/2008/0617/kaigai_10l.gif

いずれにしても、何でGPUがあんなにレイテンシが大きいのかがわかったよ。
だから、coalesced accessが必要なのね。
519デフォルトの名無しさん:2010/01/21(木) 04:03:50
>>518
>いずれにしても、何でGPUがあんなにレイテンシが大きいのかがわかったよ。

俺のために説明してくれ!
520デフォルトの名無しさん:2010/01/21(木) 22:43:04
GPUのメモリのレイテンシが大きいというよりも、CPUの場合と同じぐらいはかかるといった方がいい
521デフォルトの名無しさん:2010/01/22(金) 01:50:01
CPUだとメモリチャンネルが精々2〜3チャネル位しか無いが、GT100だと12チャネルもあるから、DRAMのチャネルのスイッチングに
それ以上かかると思っていい。あと、仮にGPC1?がDRAM0チャネル上にあるデータと、
DRAM11チャネル上にあるデータを同時にアクセスする場合、当然レイテンシがかかる。
もし、GPC1がDRAM0、DRAM1だけのデータアクセスですむなら、CPUと変わらない。
最適化が必要というのはそういったところだと思う。
522デフォルトの名無しさん:2010/01/22(金) 05:43:22
MTGPがコンパイルできません。
>>463の言う、4つのファイル使って試したところ100個近くコンパイルエラーが出てしまいます。
あと「末尾を適当に書き換える。」の意味がよく分からんどす… 
エラー内容は
1>\略)\mtgp32-fast.h(117) : error C2054: 'inline' の後に '(' が必要です。
1>\略)\mtgp32-fast.h(120) : error C2057: 定数式が必要です。
1>\略)\mtgp32-fast.h(120) : error C2466: サイズが 0 の配列を割り当てまたは宣言しようとしました。
1>\略)\mtgp32-fast.h(120) : error C2085: 'mtgp32_do_recursion' : 仮パラメータ リスト内にありません。
1>\略)\mtgp32-fast.h(121) : error C2061: 構文エラー : 識別子 'inline'
1>\略)\mtgp32-fast.h(122) : error C2054: 'inline' の後に '(' が必要です。
...

WinXP32bit、VC++2005、CUDA SDK2.3
該当箇所のコード見てもどこが悪いのか分からない…助けて…。
523デフォルトの名無しさん:2010/01/22(金) 07:00:08
単にパイプラインステージが何百もあるからレイテンシがでかいのだと思ってました
524デフォルトの名無しさん:2010/01/22(金) 08:15:33
>>522
あ。おれか。
元のソースと自分のソースでdiffしてみた。
・inline を全部削除してみて。
・末尾を適当に書き換える。は、元だとプリントして捨ててしまっているので、
 利用したいように書き換えてねと。
おれはmake_uint32_random(d_status, num_data, hostbuff); として
hostbuffを自分で使えるようにしました。
525デフォルトの名無しさん:2010/01/22(金) 20:11:37
>>523
正解
メモリチャンネル云々は殆ど関係ない

CPUはメモリとのクロック差のため
GPUは長大なパイプラインのためレイテンシがデカイ
526デフォルトの名無しさん:2010/01/22(金) 20:30:44
別にパイプラインが深いわけではなくてバッファが大きいだけなんだけど。
527デフォルトの名無しさん:2010/01/22(金) 20:51:46
200-400段は十分に・・
528デフォルトの名無しさん:2010/01/23(土) 00:27:17
>>524
レスサンクス。
inlineを削除したら見事にエラーが亡くなりました(`・ω・´)
これから自分のソースに組み込もうか…と状況に入れます。

重ねて質問申し訳無いですが、hostbuffの名前からしてMTGPの乱数は一度バッファにぶち込んでから使うという事になるのですか?
>>461ようにカーネルの中で特に意識せず使いたいのだけれども…
MTGPがglobalメモリやテクスチャを使ってるのなら、Cのrand()のように連続で呼び出して使えたら良いなと思ってるんですが無理ですかね?
529デフォルトの名無しさん:2010/01/23(土) 02:00:42
>>528
おれはホスト側で使いたいので、make_uint32_randomの末尾でホスト側のバッファにコピーして使ってる。
デバイス側で使いたいなら、make_xxxxx_randomにd_buffをmain()側でとって渡し、
make_xxxx_random()内ではfreeせずにそのまま。すると次にmain()内でデバイス側関数を呼び出すときに
そのまま渡して使える。 ※スレッドが変わってはいかんので注意
530デフォルトの名無しさん:2010/01/23(土) 05:30:39
CUDAを使って大量のデータのごく簡単な統計値(最小、最大、平均、標準偏差)を計算したいんですが、何かいいサンプルとかありますか?
531デフォルトの名無しさん:2010/01/23(土) 08:51:31
CUBLASにあるんじゃ。
532デフォルトの名無しさん:2010/01/23(土) 11:54:45
>>530
そういう、「最後が一個」な演算は、reductionで探すと有る気がする
並列性を有用に使うのがなかなか面倒らしい
533デフォルトの名無しさん:2010/01/23(土) 12:09:54
OpenGL glutで時系列で変化する数値計算の結果を表示しようとしています。
GPU 2個で計算する場合、コールバック関数内でスレッドを生成することになると思うのですが、
この度(毎フレーム)にホストからグローバルメモリへデータ(時間による変化なし)を
コピーしなくてはいけません。
glutMainLoop(); 呼び出し前に両GPUにコピーした場合は、
コールバック関数内で生成したスレッドにグローバルメモリのポインタを渡しても参照できません。
データのコピーを一度だけですます方法はないでしょうか?ご教示ください。

スレッド生成は ttp://tech.ckme.co.jp/cuda_multi.shtml を参考にしました。
534デフォルトの名無しさん:2010/01/23(土) 21:06:46
>530
それぐらいだったらたぶんCPUで実行した方が速いよ
535デフォルトの名無しさん:2010/01/24(日) 00:53:03
>>533
GPU0用、GPU1用のスレッドをglutMainLoop()呼び出し前に生成するべきかと。

536デフォルトの名無しさん:2010/01/25(月) 22:22:13
thread数 = N
Mat[N];
id = threadIdx.x;

if(id%2==0){
演算A
Mat[id]にコピー
}else if(id%2!=0){
演算B
Mat[id]にコピー
}

のようなプログラムを組んでいるのですが、結果をみると最後の2つの要素と同じ計算結果が全体に入ってしまいます。

N=16なら
14の結果が0,2,4…12に
15の結果が1,3,5…13に入ってしまいます。

どこに問題があるのでしょうか
537デフォルトの名無しさん:2010/01/25(月) 22:49:59
>>536
とりあえずC言語から始めようか
538デフォルトの名無しさん:2010/01/26(火) 00:02:22
>>530

俺もこれ知りたい。
N社のSDKを見ても、画像処理のサンプルとかたくさんあっても、単純な総和計算とかないもんだね。やはり向いてないからか・。。。

ご丁寧にCのほうが早いとか教えてくださる人もいるがw
マルチパスの画像フィルターとか、
デバイスの中にある中間結果を作って、
その統計値を、次のパスの計算で使ったりするのが常套手段だから
ここでいったんホストのほうにコピーするとボトルネックになってしまう。
デバイスの中のデータの統計値を出すライブラリとか作ってくれると本にありがたいんだが
539デフォルトの名無しさん:2010/01/26(火) 00:30:52
>>530, 538
SDKのreductionサンプルが参考になると思う。 確かpdfのわかりやすいスライドが一緒に入っているはず。

CUDAのアーキテクチャって、総和とかのreduction系演算は
不向きとまでは言わないまでもちょっと頭をひねらなきゃいけない分野だよね。
540536:2010/01/26(火) 01:19:31
演算途中で計算領域が被ってただけでした。失礼しました。
541デフォルトの名無しさん:2010/01/26(火) 01:27:25
>>539
そうだね。
沢山のデータがあるなら、最終はCPUにやらせても良さそうだけど、
転送がボトルネックになるなあ。
それだったらGPU内でやらした方が速いか。

あとI/O系があるとだめだよね。
ダブルバッファやトリプルバッファが使えるようなアプリならいいんだけど。
そうなると画像、映像系ばかりになってしまうなあ。
542デフォルトの名無しさん:2010/01/26(火) 09:14:50
処理に割り当てるmultiprocessorの数を指定とか出来ませんか?
出来ればgridサイズ変えずに
そもそもOSもGPU使う場合割り当てがどうなってるのか分からないんですが
543デフォルトの名無しさん:2010/01/26(火) 10:43:54
>>542
CUDAプログラムが実行中はOSはGPUを使えないので全てのSMを使用しても問題ありません。
544デフォルトの名無しさん:2010/01/26(火) 10:47:22
5秒以上使ったらエラーが出たよ。
545デフォルトの名無しさん:2010/01/26(火) 10:50:22
SMを1個しか使用していなくても5秒以上1つのCUDAカーネルが実行されるとタイムアウト。
546542:2010/01/26(火) 11:15:31
へー、なるほど。
あとgridサイズ小さくする以外に使うSM数を制限できますか?
547デフォルトの名無しさん:2010/01/26(火) 11:41:29
できませんし、その必要もないでしょう。
548542:2010/01/26(火) 11:48:03
>>547
そうですか、ありがとうございます
並列計算の研究の一環でCUDA使ってるんで
並列数の変化でデータが取れたら嬉しいな、という理由です
549デフォルトの名無しさん:2010/01/26(火) 14:26:47
>>548
素直に描画用とは別にGPUを用意しましょう。

総和を取る処理は私も書いているけど、仮想的に二次元にデータを配置して、縦に集計するところまでをGPUでやっている。
残りはCPU側に吐き出してからCPUではSSEを使って集計。
550デフォルトの名無しさん:2010/01/26(火) 14:53:47
>>548
1番最初に実行が始まるCTAの配置は予測可能なので、
その中で使わないSMに割り当てられたCTAはコア内でダミーの演算を長時間繰り返すことでそのSMを占有し続ける。
こうすれば本来の計算は残りのSMでのみ行われるようになる。

通常時間計測できるのは全CTAが完了するまでの時間なので以下のどちらかを。
1)最後のCTAがdevice memoryにマップされたhost pinned memoryに何か書き込む。
2)ダミー演算の繰り返し回数を段々少なくしていき、計測される時間の減少率が変わるところを探す。

なお、全SMを使わないとメモリアクセス効率も落ちるのであまり面白くない。
551デフォルトの名無しさん:2010/01/26(火) 15:20:53
> 仮想的に二次元にデータを配置して、縦に集計するところまで
なるほど。ふつくしい。n次元でCPUでは最後の一次元だけやらせれば、対称になるな
552542:2010/01/26(火) 21:31:38
>>549
別に用意してこの場合メリットってありますか?
あと総和ならReductionで組んだけど今回はGPU単体の話だったんで最後までGPUでやりました
デバイスホスト間の転送時間って馬鹿にならないイメージあるんですが、CPUにやらせたほうが速いんですかね?
まあ最後のちょっとだから誤差の範囲な気がしないでもないw

>>550
結構シビアですね、
直接的な方法が無ければgridサイズ縮めてIdx周り弄ろうと思います
↑の方法で弊害無いですよね?;
553528:2010/01/27(水) 17:26:29
少し前にMTGPについて質問した者ですが、どうやら自分の要求とズレた感じでした。
thread 256、block 1でmake_uint32_random()するとバッファに768個のデータが生成されるが、でっていう…。

これはメルセンヌツイスタの高周期な乱数列の1部分って事で、本当にあの高周期な乱数を使いたいならその分のメモリが必要だということなのかな。
独自の乱数ジェネレータを作って、その768個の中から1つを取り出して…みたいな事をやり始めるとまた性質が変わってしまうし、本末転倒に。

結局、カーネルの中でシミュレーション目的の使用方法としては微妙だったので絶望。。。
スレッドID毎に使える線形合同法(遷移型)の乱数として使えるようになんとかできないものか…
554デフォルトの名無しさん:2010/01/28(木) 00:49:57
え、おれ100万個単位で作って使えてるよ。
int num_data, にちゃんとでかい数与えてるかな
555デフォルトの名無しさん:2010/01/28(木) 09:22:34
>>554
いや、num_dataの数を変えて生成される個数の事はあまり重要じゃないのよ…
問題はカーネルの中で使おうとした時、バッファに作成された乱数が並んでいる形態では微妙なのです。

例えば、100万個作ったとして256のスレ数で使うなら使用部分を分割する事になりますよね(thID==0は、バッファのindex0〜約4000、という感じ)
いや、各スレッドは100万個のうち初めのindexだけseedとして決めて、あとは順次indexを増やして使っていく感じでもいいけど、
両者とも乱数列の周期はバッファのサイズに依存してしまいます。

一方、よくある{x=x*1103515245+12345; return x&2147483647;}このような方法は、アルゴリズムが優秀だとxが4byteなら最大で2^32の周期を持ちますよね。
今の状態のメルセンヌツイスタで2^32の周期を得ようとしたら、どんだけ大きいバッファが必要かっていう…
精度の良い乱数という点では利点ありますが、globalメモリを物凄く使う割にはなんだかなぁ…という複雑な気持ち。

MTGPの形態を知らなかった自分が悪いんだけど、要はこれ乱数生成を並列化して高速にしたもので、
実際にパラレルな計算で使う用にはなりえない事が分かりました。
自分の要求としては、GPU Gems3の「CUDAによる効率的な乱数の生成と応用」がチラッと見た感じでは合致してたので、今からこっちを参考にしてみます。
長文スマソ。>>554にはとても感謝している。こんな結末で申し訳ない。
556デフォルトの名無しさん:2010/01/28(木) 09:38:33
>乱数列の周期はバッファのサイズに依存してしまいます

横から失礼しますが、
for( ; ; )
{
make_uint32_random(, , d_buff); //デバイスメモリに作らせて残す
my_kernel_func<<<>>>(d_buff, , , , ); //MTGPで作った乱数を消費
}
こんな感じとして、256スレッドが一回に8192個の乱数を使う
→make_uint32_randomは2097152個の乱数を生成する

で良いのでは? make_uint32_random() は複数回呼び出すごとに
前回のmtgp32_params_fast_tの続きから処理するわけで、周期は
2^11213-1 でしょう。÷256しても2^11205とかだ
557デフォルトの名無しさん:2010/01/29(金) 08:52:57
stupid questionですみませんが、VC++ 9.0で
1. .cppと.hのように、.cuファイル内でインクルードしているファイルが更新されたら.cuを再コンパイル対象にしたい。
2. ptxを出力したい。nvcc -ptxでは無理でした。
以上について教えてください。お願いします。
558デフォルトの名無しさん:2010/01/29(金) 19:27:06
>>557
コマンドラインから nvcc -ptx *.cu とやっても駄目?

559デフォルトの名無しさん:2010/01/29(金) 23:45:27
-keepでいいんじゃね
1.についてはSource Dependenciesを個別に設定すれば一応できる
560デフォルトの名無しさん:2010/01/30(土) 15:52:51
>>558
XP Pro 32bitとVista Ultimate 64bitの両環境で、
コマンドラインからnvcc と打つとcl.exeがないと怒られます。
プロジェクトのプロパティを参考にパスとincludeを指定してやっても
エラーは控えていませんがコンパイルできません。
VC使ってる人はどうしてるんでしょう?
561デフォルトの名無しさん:2010/01/30(土) 15:56:22
-ccbin で指定しても駄目ですか?
562デフォルトの名無しさん:2010/01/31(日) 02:17:49
もちろんVSコマンドプロンプトから打ってるよな
563デフォルトの名無しさん:2010/01/31(日) 16:27:27
>>562
ふつうのコマンドプロンプトを使っていました。
どうもお騒がせしました。
564デフォルトの名無しさん:2010/01/31(日) 16:30:07
普通にC++のコードを書けるようになってからじゃないと、学習効率が悪くてどうしようもないぞ。
565デフォルトの名無しさん:2010/01/31(日) 18:38:21
>>559
俺は556じゃないが-keep知らなかった。ありがとう。
566デフォルトの名無しさん:2010/02/01(月) 21:17:18
GPU Challenge 2010
ttp://www.hpcc.jp/sacsis/2010/gpu/

自由課題もあるそうな
567デフォルトの名無しさん:2010/02/02(火) 11:27:25
まあ俺は学生だから規定課題でるけどな
しかしCellとかに比べてあんまり最適化するとこないな
568デフォルトの名無しさん:2010/02/02(火) 18:26:32
どのくらい参加するんだろう?

俺もとりあえずエントリーしようかな。
569デフォルトの名無しさん:2010/02/02(火) 22:14:16
自由課題の方で、パターン形成する発展方程式とかの数値計算すると、絵的にも面白そうなの出来そうじゃない?
570デフォルトの名無しさん:2010/02/10(水) 10:54:42
jpegをデコードするライブラリもしくはCUDAのコードはどこかにありませんか?
571デフォルトの名無しさん:2010/02/10(水) 11:54:41
GPU Challengeの課題が増えた
メルセンヌツイスタと言われるとHack the Cellを思い出すな
572デフォルトの名無しさん:2010/02/10(水) 12:30:21
SLI環境で、プログラムを2つ実行した場合、それぞれ別のGPUを
利用する方法を教えてくれ
573デフォルトの名無しさん:2010/02/10(水) 14:52:21
> SLI環境で
えっ、ひとつにしか見えないんじゃないの?? 出来るの?
574デフォルトの名無しさん:2010/02/11(木) 00:45:35
>>572
cudaSetDevice()でそれぞれ0と1を指定する。

575デフォルトの名無しさん:2010/02/11(木) 13:21:15
>>573
東工大青木先生はGeForce4つ並べてた
OpenMPで並列化していたと思う
576デフォルトの名無しさん:2010/02/11(木) 13:39:01
>>575
CUDA版OpenMPてあるの?
577デフォルトの名無しさん:2010/02/11(木) 14:25:56
CUDA版と言えるOpenMPはない
OpenMPのスレッド指定とCUDAのdevice指定を組み合わせただけのこと
578デフォルトの名無しさん:2010/02/11(木) 14:53:48
そういうことか、今度挑戦してみようかな
579デフォルトの名無しさん:2010/02/12(金) 00:56:59
> GeForce4つ並べ

> SLI
は違うんじゃね? ケーブルで繋ぐのがSLI・・・かな
580デフォルトの名無しさん:2010/02/12(金) 10:07:29
OpenMPを使えば複数のGPUを簡単に使えるのですか?
やりかたをおしえてくれろ
581デフォルトの名無しさん:2010/02/12(金) 11:11:35
CUDAで顧客向けプログラムを作成しています。
CUDAプログラムの配布先には本体以外に何を配布すればよろしいのでしょうか?
582デフォルトの名無しさん:2010/02/12(金) 11:46:23
>>581
GeForce人数分
583デフォルトの名無しさん:2010/02/12(金) 11:49:25
TeslaかQuadroを配っておけば良いと思うよ
584デフォルトの名無しさん:2010/02/12(金) 11:56:09
cutil使わなければcudart.dllだけでよろしよ
585デフォルトの名無しさん:2010/02/12(金) 17:57:29
>>579
内部でケーブルでつながってても、
デバイスメモリが共有されるわけじゃないから
CUDA的には関係ない。
586デフォルトの名無しさん:2010/02/13(土) 04:48:44
>>580
SDKにサンプルがある
587デフォルトの名無しさん:2010/02/14(日) 12:30:31
CUDA FORTRANのセミナーが青木先生のとこで開催されるらしいが、おまいら行く?
588デフォルトの名無しさん:2010/02/14(日) 12:42:11
>>587
青木先生か、Cだったら行くんだけどな
589デフォルトの名無しさん:2010/02/15(月) 17:44:43
デバイスエミュレーション時の速度って、実際のCPUとの目安で考えたら
どのくらいスケールして考えればいいですか?

初めてエミュレーションモードを使ってみたんですが、3000倍以上の差が付いて明らかにおかしいと思うんです…
CPU: Core i7 [email protected]、 GPU:Tesla C1060
590デフォルトの名無しさん:2010/02/15(月) 17:53:40
Q720って720QMのこと?
ノートPCにTeslaが搭載されているとか、聞いたことがないんだけど
591589:2010/02/15(月) 17:56:06
追記。
grid(2,1,1)、block(256,1,1)でのカーネルで、3000倍になります。
これからgridを増やすと、さらに差が広がっていきます。

カーネルで実装した内容を、CPU版で実装したくないけど速度比較はしたい。
・・・無理でつか?
592589:2010/02/15(月) 18:06:39
>>590
Teslaは別のデスクトップPCので、エミュを動かしたのはノートPCでの方です。
紛らわしくて申し訳ない。
どちらもPCもCUDA使えるんですが、CPU自体はノートの方が性能良かったのでこちらを使いました。

ノートPCのGPU: GeForce GTX 260M
593デフォルトの名無しさん:2010/02/15(月) 18:14:45
そもそも、エミューレーションモードって非CUDA環境でも
CUDAカーネルのデバッグが出来るようにしたものでしょ

あくまでテスト用のもの
594デフォルトの名無しさん:2010/02/15(月) 18:15:25
誤)エミューレーションモード
訂)エミュレーションモード
595デフォルトの名無しさん:2010/02/15(月) 19:10:55
3000倍?そんなもんでしょ
596デフォルトの名無しさん:2010/02/15(月) 19:28:11
効率の良いブロック分けの仕方?がわからず困っています.

実行時にN個のデータ系列が与えられて,
それぞれの系列へ施す処理内容自体は同一なのですが,
その処理に用いるパラメタ値が異なります.
例えばN=3の場合,パラメタもp[0]〜p[2]の3個があって,
 データ系列0の全データ { D[0,0], D[0,1], D[0,2], ..., D[0,m0] } にはp[0]を加算,
 データ系列1の全データ { D[1,0], .... , D[1,m1] } にはp[1]を加算,
 データ系列2の全データ { D[2,0], .... , D[2,m2] } にはp[2]を加算
という具合です.

全系列のデータ数が同じ(m0=m1=m2)ならば
グリッドの次元の1方向を系列(0〜N-1)に割り当てれば良いかと思うのですが,
系列毎にデータ個数がかなり異なる場合はどうすればいいのでしょうか?
データ個数は系列ごとに少なくとも数千個くらいになります.
同じような割り振り方だと何もしないブロックが大量にできてしまいそうです.
597デフォルトの名無しさん:2010/02/15(月) 20:36:27
CにD[0,0]というものはないのでよくわからないけど、
いったん長い配列にまとめて処理して、あとでCPUでばらせばいいのでは。
D[i,j]のjについて、自分はどのpに属するのか覚えさせて。
598デフォルトの名無しさん:2010/02/15(月) 23:36:05
>>592
Nvidia Nexus使えば?
599デフォルトの名無しさん:2010/02/15(月) 23:37:13
追記
Nexus使うとネットワーク経由で、
コード書く用のPCとデバッグするPCを分けられるよ、ってことね。
600デフォルトの名無しさん:2010/02/16(火) 14:48:16
>>598
うーん、デバッグというよりは単にCPUとGPUで速度比較をしたいだけなんです。
うまく並列化して普通は、1〜50倍くらいの成果になると思うんですが・・・

目安でいいからエミュレーションモードから大体の速度が分からないのかなと。
601デフォルトの名無しさん:2010/02/16(火) 23:24:57
いまいち意味がわかんないけどCPUコードとGPUコードをデバイスエミュで実行したらCPUコードのが3000倍早いって事?
それだったらそんなもんかと。デバイスエミュは重いし。
違うんだったらごめん。
CPUとGPUで速度比較したいなら普通にCPUとGPUそれぞれ向けのコード書いて実行したらいいんじゃない??
602デフォルトの名無しさん:2010/02/17(水) 00:50:55
>>601
あ、あれ? 自分のデバイスエミュの認識自体が間違ってたかな…?
言いたかったのは、実行するハードの方での両者の比較です。
CPUコードと言うのはありません。
カーネルや、その内部で呼ぶ__device__の関数らがGPUコードだよね?それを普通に「GPU」が実行した時の速度と、
デバイスエミュを使ってCPUが実行した場合(内部では逐次計算?)の速度では、普通に「GPU」で実行した方が3000倍速いということです。

>>591の通り、GPUコードが多くなりすぎて、同じ事をするCPUコードを実装するのが面倒なのです。
デバイスエミュはCPUが実行するとの事で淡い期待を抱いてましたが無理そうな感じなんですな…
603デフォルトの名無しさん:2010/02/17(水) 01:32:32
>>602
比較する目的はなんでしょうか?
研究目的であれば面倒であろうがCPU用も実装しなければなりません。
そうでないなら比較なぞしなくてよいのではないかと。

ちなみにGPU:エミュが3000:1程度であればCPU用に普通に実装した方がGPUより速い可能性が十分にあります。
604デフォルトの名無しさん:2010/02/17(水) 15:10:51
面倒でも計算結果の比較しろよw

nvidiaのサンプルコードでも結果の比較してるだろ
605デフォルトの名無しさん:2010/02/17(水) 15:41:47
>>602
emulation modeは,名前の通りGPUでの動作を模擬しているだけで,
その計算速度とGPUの計算速度を比較することに意味はない.
emulation modeがある理由は,カーネル内にprintfとかのコードを書いて
debugしたり出来るようにするため.
従って,CPUとGPUの計算速度の比較を行いたいなら,それぞれに最適化した
2つのコードを書いて比較する必要がある.

関係ないけど,
CPUとの比較しているときにCPUのコア一つとの比較が多い気がするけど,
それフェアな比較じゃないよね.せめてOpenMPくらい使おうよと.
まぁ使うとGPUの存在感が薄れるのだけれども….
606デフォルトの名無しさん:2010/02/17(水) 17:32:51
>>603
研究なんて言えないようなものです。目的としては自己満足になりますね。
ただ、目安程度であれど比較できないとGPUとCUDAを使う意義に関わってきます。
早ければSUGEEEE!!ってなって満足し、遅ければそこできっぱり止めるという選択ができる。
そして3000:1ならまだCPUの方が早そうだというのは参考になりました。

>>605
おっしゃる通りですが、厳密に比較するまでは求めていないんです。
今自分がやってることは無意味なのか?(つまりCPUの方が普通に早い)が分かればいいんです。
grid(2,1,1)でフェアじゃないのは、コーディングが糞なので2以上じゃないとGPUで動作しないんです('A`)・・・(メモリ周りの関係で)

我侭な要求でスマン。
607デフォルトの名無しさん:2010/02/17(水) 18:07:50
逆に考えるんだ
CPU側で動作をきっちり検証したプログラムを、
GPUに移植して、速度を比べる。

GPUに本当に適した問題なら、数十倍出る場合もあるし。
608デフォルトの名無しさん:2010/02/17(水) 18:47:11
>>605
GPUの優位性をうたうような文脈で
比較対象のCPUコードが1スレッドだったら
それを評価する人間は目が余程の節穴でない限り、
CPUのコア数倍した結果と比べるでしょ。

物凄く差がある場合はそれでも十分優位性をうたえるから。
609デフォルトの名無しさん:2010/02/17(水) 21:05:25
>>605
1コアの40倍とあれば4コアの10倍と読み替えればいい訳で。
610デフォルトの名無しさん:2010/02/17(水) 22:05:37
4コアと比較したらどうなるかということではなく、
1コアと比較してる人がCPU版もまともにチューニングしてるとは思えない、ということかと。

まぁ、皆GPU版ばっかりチューニングしてますから。

611デフォルトの名無しさん:2010/02/18(木) 06:16:20
たぶんCPU版はSSEすら使っていないんだろうね。
メモリ帯域がものを言うコードでなくて、CPUがNehalemだったら、
安いGPUなんかじゃ全く優位ないからね。
612デフォルトの名無しさん:2010/02/19(金) 02:31:33
俺はNvidiaちゃんを信じるよ

http://twitter.com/NVIDIAGeForce/status/9265680539
613デフォルトの名無しさん:2010/02/19(金) 02:32:33
誤爆った/(^o^)\
614デフォルトの名無しさん:2010/02/20(土) 04:09:26
うちは理論で「***手法より*%高速化して最速!」とかやってないってのもあるけど
GPUで組んだ手法と既存の手法を比べる場合、既存のほうはベーシックにしろと指導された。
複数CPUだとかSSEを使ってガチガチに最適化した手法と比べちゃうと基準が分からなくなるからだと。
他の高速化との差を知りたければその論文と比較しろということだと思う。

CPU最適化して無いなんて糞というのも分かるけど、こういうところもあるということで。
615デフォルトの名無しさん:2010/02/20(土) 08:30:23
コードの比較もいろいろだよな。
同じアルゴリズムを採用しても、CPUでも書き手によってGPUでも明らかに差が出てくる。
でもGPUを使う場合、多くの場合はCPUよりも速くなりました。というのが目的な訳で、
CPUの方が速いならあえてGPUを使う必要はないからね。
基準が曖昧になるのもわかるけど、そもそも基準が曖昧な気がするなあ。
場合によってはかなり恣意的になることもあるし・・・・。
616デフォルトの名無しさん:2010/02/20(土) 10:07:52
Femiやばいまた延期確定かも
617デフォルトの名無しさん:2010/02/20(土) 11:37:52
一般人が入手できるのは1年後になる可能性もあるらしいね
618デフォルトの名無しさん:2010/02/20(土) 11:44:04
なんでそんな度々延期になるの
619デフォルトの名無しさん:2010/02/20(土) 12:14:45
>>618
ペーパーロンチで実際開発が
行われていないからだよ
620デフォルトの名無しさん:2010/02/20(土) 13:17:36
今回のケースは大きな欠陥があることを知りながら、小手先の改良でなんとかしようとして
「完成品」を大量生産をして、まとにチップが取れなかったのが原因だろ

1%程度とされる歩留まり率で、1チップ当たり5000ドルの原価
これでは商売にならないね
621デフォルトの名無しさん:2010/02/20(土) 13:39:05
3/19に東工大青木先生がCUDA Fortranのセミナやるんだって
622デフォルトの名無しさん:2010/02/20(土) 13:40:57
関係者の宣伝おつ
623デフォルトの名無しさん:2010/02/23(火) 08:21:59
青木先生に集客されたくねえなあ正直
624デフォルトの名無しさん:2010/02/23(火) 22:06:44
nexusをリモートで動かそうとしたが、ブレークポイントでとまらねぇ・・・。
色々試したがどうにも解決しないので教えてください。

状況としては、nexusのユーザーズガイドに沿って設定。
ためしにnexusサンプル動かそうとしたら、
ランタイムAPIプロジェクトはGetDeviceで引数に0が。
で、次の行で落ちる。
DriveAPIは落ちない。んでホスト側の画面右下に青いポップアップ出て、
ターゲットマシンにコンソール画面出てるのでプログラムは正常に動いてるっぽい。
でもカーネル関数内にブレークポイント置いても止まらず。
自分でSDKサンプルのプロジェクトの設定変えて試しても同じ。

マシン環境はこんな感じ。
ホストマシン
Vista 64bit SP2
.Net3.5 SP1
Host nexus1.0(jan 64bit)
GPU FX570
VC++ 2008 SP1
DirectX10 August 09
CUDA SDK2.3 32bit
CUDA ToolKit2.3 32bit
625続き:2010/02/23(火) 22:08:57
ターゲットマシン
Vista 64bit SP2
.Net3.5 SP1
Target nexus1.0(jan 64bit)
GTX285
VC++ 2008
DirectX 10 August 09
CUDA SDK2.3 32bit

他に設定としてはEnable Security Serverをfalse
nexus→option→Enable secure connectionをfalseにしてます。
使い方は、ホストマシンでVC起動→プロジェクト読み込み→nexusデバッグ
ターゲットマシンはデバッグモニタ起動のみ。
どこがおかしいのだろう?
626デフォルトの名無しさん:2010/02/24(水) 22:31:24
Fermi終了したらこのスレも終了するんかなあ
627デフォルトの名無しさん:2010/02/24(水) 23:16:54
the launch date for GeForce GTX 480 and GTX 470 is March 26
628デフォルトの名無しさん:2010/02/25(木) 12:42:26
>>627
ペーパーリリースで全世界で1万枚以下の出荷といううわさだけどね
一般人が手に入れられるようになるのは、下手をすると来年
良くて年末という予想がある
629デフォルトの名無しさん:2010/02/25(木) 13:15:26
やっぱ、シリコン丸ごと改良しないとだめなんか。
半分ダメで256コアでもいいんだけどww
630デフォルトの名無しさん:2010/02/25(木) 20:23:58
俺はNexusインストールすらできなかった
631デフォルトの名無しさん:2010/02/25(木) 22:02:09
消費電力280Wだっけ。。。GTX480
632デフォルトの名無しさん:2010/02/25(木) 23:43:58
アム虫キモ
633625:2010/02/26(金) 23:13:31
もうよくわからんからnexusのエミュモードでやることにした。
カーネル関数内でブレークするし、値もちゃんと表示されてそう。

>>630
OS対応してないとか?Vistaか7しかできない。
あとはOSとnexusのbitが違うとか。
634デフォルトの名無しさん:2010/02/27(土) 19:37:59
>>633
インストーラがVS2008 SP1入れてあるのに読み取ってくれなくて、
インストールができない状態だった。

Microsoftからダウンロードしたばっかりのイメージを使ってインストールしたから
当然SP1はあたっているものかと思っていたらあたっていなかった、っていう初歩的なミスだった。

ちょっくら遊んでくる
635デフォルトの名無しさん:2010/03/05(金) 11:16:51
         ,. -‐'''''""¨¨¨ヽ
         (.___,,,... -ァァフ|          あ…ありのまま 今 起こった事を話すぜ!
          |i i|    }! }} //|
         |l、{   j} /,,ィ//|       『おれはNvidiaにARE YOU READY?と言われて
        i|:!ヾ、_ノ/ u {:}//ヘ          準備していたら準備しているのはNvidiaの方だった』
        |リ u' }  ,ノ _,!V,ハ |
       /´fト、_{ル{,ィ'eラ , タ人        な… 何を言ってるのか わからねーと思うが
     /'   ヾ|宀| {´,)⌒`/ |<ヽトiゝ        おれも何をされたのかわからなかった
    ,゙  / )ヽ iLレ  u' | | ヾlトハ〉
     |/_/  ハ !ニ⊇ '/:}  V:::::ヽ        頭がどうにかなりそうだった…
    // 二二二7'T'' /u' __ /:::::::/`ヽ
   /'´r -―一ァ‐゙T´ '"´ /::::/-‐  \    128bitメモリバスだとかリネームテクノロジーだとか
   / //   广¨´  /'   /:::::/´ ̄`ヽ ⌒ヽ    そんなチャチなもんじゃあ 断じてねえ
  ノ ' /  ノ:::::`ー-、___/::::://       ヽ  }
_/`丶 /:::::::::::::::::::::::::: ̄`ー-{:::...       イ  もっと恐ろしいものの片鱗を味わったぜ…
636デフォルトの名無しさん:2010/03/06(土) 00:09:36
GTX480がそこそこ出回るらしい(core数は当初想定よりも少なくなる可能性があるが)
Fermiアーキテクチャを思っていたよりも早い時期に体験出来る可能性が出てきた
637デフォルトの名無しさん:2010/03/06(土) 20:59:14
Fermi火事出すだろうな
電気食いすぎだ
638デフォルトの名無しさん:2010/03/07(日) 10:23:33
GF100(GTX480, 470)は高電力でお値段も高めになるだろうから、
Fermiアーキテクチャをとにかく早く試したい人以外はその次のGF104がいいと思う
639デフォルトの名無しさん:2010/03/07(日) 11:05:46
半分だけの460とか出ないかな?
640デフォルトの名無しさん:2010/03/07(日) 11:26:00
この辺りの情報がそれかも知れん

The AMD's Cafe:ローコストなFermiやQuadroについて - livedoor Blog(ブログ)
http://blog.livedoor.jp/amd646464/archives/51525107.html

まだまだ先のようだ
641デフォルトの名無しさん:2010/03/07(日) 15:31:52
売り物にならない奴はQuadro逝きか。
OpenGL市場ってほんと舐められてるな。
ゲイツに縛られない自由なAPIだったはずなのに。
642デフォルトの名無しさん:2010/03/09(火) 00:29:10
643デフォルトの名無しさん:2010/03/09(火) 23:19:41
このレビューは何が言いたいのかよくわからんかった
http://pc.watch.impress.co.jp/docs/column/nishikawa/20090518_168541.html
644デフォルトの名無しさん:2010/03/16(火) 00:53:46
CUDA上の命令がどれくらいのクロックで動くかまとめられていませんか?
整数の乗算やら三角関数はプログラミングガイドに載っていたのですが,ほかの命令も知りたいです
645デフォルトの名無しさん:2010/03/16(火) 08:46:48
「どのくらい」でいいなら実測すればいいかと
646デフォルトの名無しさん:2010/03/16(火) 16:42:16
エミュレーションモードでやるとうごくのですが、GPUをつかうと動きません。

const int c = border + (blockDim.x * blockIdx.x + threadIdx.x) * step * 2;
const int r = border + (blockDim.y * blockIdx.y + threadIdx.y) * step * 2;
const int i = 1;
// atomicAdd(&count[0], 1);//ここでは動くのでatomicAddの問題ではない
if(c >= i_width - border || r >= i_height - border) return;
int i_max = -1, r_max = -1, c_max = -1;
float max_val = 0;
for (int ii = i; ii < min(i+2, intervals-1); ii += 1)
for (int rr = r; rr < min(r+2*step, i_height - border); rr += step)
for (int cc = c; cc < min(c+2*step, i_width - border); cc += step) {
float val = getVal(d_m_det, o, ii, cc, rr, i_width, i_height);
if (val > max_val) {
max_val = val, i_max = ii, r_max = rr, c_max = cc;
}
} // Check the block extremum is an extremum across boundaries.
/***********ここでd_iptsにiptを加えてもうごく*********/
// float4 ipt ;
// d_ipts[atomicAdd(&counter, 1)] = ipt;
if (max_val > 0.0004f && i_max != -1 && isExtremum(d_m_det,o, i_max, c_max, r_max, i_width, i_height, intervals)) {
float4 ipt = interpolateExtremum(d_m_det, o, i_max, r_max, c_max, i_width, i_height);
if(ipt.x >= 1)
{
d_ipts[atomicAdd(&counter, 1)] = ipt;//ここの行をコメントアウトすると動く
ipt.x += 1;
}}
最後のif文の中でd_iptsやcountにアクセスするのがだめっぽいのですが・・・
なにかif文を書いたときに同じような症状になった方や、これを見ただけでわかる方いらっしゃったら、教えてください。
よろしくおねがいします。
647デフォルトの名無しさん:2010/03/16(火) 23:39:20
とりあえず問題になってるatomicAdd(&counter, 1)の戻り値調べようか
648デフォルトの名無しさん:2010/03/17(水) 00:13:02
counterの宣言にちゃんと__device__は付いているのだろうか・・・
649646:2010/03/17(水) 00:40:32
>>647
エミュレーションで確認したところ戻り値はcounterと同じ値になっていました。
実際にGPUでうごかすと、
counterをデバイスからホストへ送るところでunspecific launchとなるか、
永久ループに入るか何かで画面が固まり、ブルースクリーンになって落ちます。

>>648
_device_をつけてグローバル変数(っていうのかわからないけど)として定義しています。
650デフォルトの名無しさん:2010/03/17(水) 09:55:20
その反応だとアクセス違反のときが多いのだがそんなことないよな?
651デフォルトの名無しさん:2010/03/17(水) 13:42:58
CUDAでつかうlong doubleってWindowsとLinuxでサイズは違うの?
652デフォルトの名無しさん:2010/03/18(木) 00:14:29
>>650
アクセス違反ってcounterの位置がおかしいってことですか?
このプログラムをいれずに単にcounterをデバイスからホストに送ることは可能でした(初期値として0をおくっていたので0が帰ってきていました)。

つまり、このプログラムのようにatomicAddをif文とか分岐が多くなるような文章内でつかうと、
今回でいえばcounterのアドレスがかわるということですか??
653デフォルトの名無しさん:2010/03/19(金) 07:46:47
654デフォルトの名無しさん:2010/03/19(金) 10:12:59
Dual-GPUとSingle-GPUを比べてる時点でアウト
655デフォルトの名無しさん:2010/03/19(金) 10:34:24
1スロットどうしの比較だから問題ない
656デフォルトの名無しさん:2010/03/19(金) 11:09:41
>>655
それを言い出すと、TeslaDが出てくるぞ。ブリッジ自体は1スロットだからなw
657デフォルトの名無しさん:2010/03/19(金) 11:22:52
はいはい、負け惜しみ
単純な計算性能では圧倒的にラデオンのほうが優れているんだよ
658デフォルトの名無しさん:2010/03/19(金) 11:32:44
比較対象にHD5870が入っていない時点で
なんか違和感があるんだが
659デフォルトの名無しさん:2010/03/19(金) 11:37:34
Tesla C1070ってなに?Fermi?
660デフォルトの名無しさん:2010/03/19(金) 11:42:09
661デフォルトの名無しさん:2010/03/19(金) 11:42:32
GT200じゃなかった?
662デフォルトの名無しさん:2010/03/19(金) 14:33:49
ttp://developer.nvidia.com/object/gpucomputing.html

CUDA Programming Guideがリンク切れしているんですが
誰か正しいアドレスを知りませんか
663デフォルトの名無しさん:2010/03/19(金) 18:21:58
高い・遅い・熱い
664デフォルトの名無しさん:2010/03/19(金) 18:52:10
S1070ってGT200×4の奴だろ。
665デフォルトの名無しさん:2010/03/20(土) 17:28:11
666デフォルトの名無しさん:2010/03/20(土) 18:02:54
CPUでの計算にインテルコンパイラを使いたいのですが、どのようにすればいいのでありまするか?
667662:2010/03/20(土) 20:32:56
>>665
ありがとうございます
668デフォルトの名無しさん:2010/03/20(土) 20:52:01
>>666
nvcc -cで*.cuをコンパイルしたら、できた*.oをiccでリンクすればいい。
Windowsの場合はnvccもiccも別々にオブジェクトを作ることになるからそれをVCでリンク。
669デフォルトの名無しさん:2010/03/20(土) 21:52:07
利用者はCUDAなんて独占的技術を求めてませんよね
670,,・´∀`・,,)っ-○○○:2010/03/20(土) 22:52:58
まして永久β版のSDKなんて論外
671デフォルトの名無しさん:2010/03/20(土) 23:30:36
まあ利用者だけが決めるわけでもないのも悲しいけど現実なのよね
672デフォルトの名無しさん:2010/03/21(日) 04:48:10
なんか面白いことに使えないかな
もったいない
673,,・´∀`・,,)っ-○○○:2010/03/21(日) 08:27:51
「何かには使える」って言ってるうちは何にも使えないまま終わるんですけどね。
ターゲットアプリケーションがあってはじめて、そのニーズに合わせてハードの機能・性能の拡充が行われうるわけで
今までであればゲームがそうだった。

ウン十並列のデータを同時処理するような用途のニーズが仮に高まってるとしても
それはCPUのSIMD拡張によってもカバーできるでしょ

674デフォルトの名無しさん:2010/03/21(日) 08:51:43
Linuxでドライバのバージョンを調べる方法を教えてください
675デフォルトの名無しさん:2010/03/21(日) 08:58:16
もう少し具体的に聞かないと・・・・。
676デフォルトの名無しさん:2010/03/21(日) 09:00:06
ドライバのバージョンによって、振る舞いを変えたいので、
UbuntuでGPUのドライバのバージョンをプログラム上から調べる方法を教えてください
677デフォルトの名無しさん:2010/03/21(日) 09:22:25
Ubuntu限定な必要があるかどうかはともかく、ドライバ自体のバージョンを知るAPIは用意されていません。
/usr/lib64のディレクトリでlibcuda.so.* のレギュラーファイルを探すのが確実かと思います。
678,,・´∀`・,,)っ-○○○:2010/03/21(日) 09:33:40
CUDA実行環境がインストールされてるかどうかを調べてライブラリを遅延ロードできるような仕組みを
標準で用意して欲しいかな
679デフォルトの名無しさん:2010/03/21(日) 20:24:40
680デフォルトの名無しさん:2010/03/21(日) 21:52:46
Fermi対応版か
肝心のブツが手元にまわってくるかも怪しいのに
681デフォルトの名無しさん:2010/03/21(日) 22:30:11
deviceQueryがあるじゃん
682デフォルトの名無しさん:2010/03/22(月) 02:31:14
Fermiは、入手しやすくなるまで松わ。
初物は爆熱で卒倒価格だろうし。
683デフォルトの名無しさん:2010/03/22(月) 14:26:17
俺は特攻する
470か480かが問題
そもそも手に入るのか、という話もあるが
684デフォルトの名無しさん:2010/03/22(月) 15:02:55
そうか。取り合えず貼っておかねばなるまい
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::。:::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::。::::::...... ...   --─-  :::::::::::::::::::: ..::::: . ..::::::::
:::::::::::::::::...... ....:::::::゜::::::::::..   (___ )(___ ) ::::。::::::::::::::::: ゜.::::::::::::
:. .:::::。:::........ . .::::::::::::::::: _ i/ = =ヽi :::::::::::::。::::::::::: . . . ..::::
:::: :::::::::.....:☆彡::::   //[||    」  ||] >>683 ::::::::::゜:::::::::: ...:: :::::
 :::::::::::::::::: . . . ..: :::: / ヘ | |  ____,ヽ | | :::::::::::.... .... .. .::::::::::::::
::::::...゜ . .:::::::::  /ヽ ノ    ヽ__/  ....... . .::::::::::::........ ..::::
:.... .... .. .     く  /     三三三∠⌒>:.... .... .. .:.... .... ..
:.... .... ..:.... .... ..... .... .. .:.... .... .. ..... .... .. ..... ............. .. . ........ ......
:.... . ∧∧   ∧∧  ∧∧   ∧∧ .... .... .. .:.... .... ..... .... .. .
... ..:(   )ゝ (   )ゝ(   )ゝ(   )ゝ無茶しやがって… ..........
....  i⌒ /   i⌒ /  i⌒ /   i⌒ / .. ..... ................... .. . ...
..   三  |   三  |   三  |   三 |  ... ............. ........... . .....
...  ∪ ∪   ∪ ∪   ∪ ∪  ∪ ∪ ............. ............. .. ........ ...
  三三  三三  三三   三三
 三三  三三  三三   三三
685デフォルトの名無しさん:2010/03/24(水) 18:34:15
東工大、気象庁の次世代気象モデルのフルGPU化に成功
http://pc.watch.impress.co.jp/docs/news/20100324_356466.html

120GPUで3.22TFLOPSか。大変なんだろうけど微妙な数字だな。
686デフォルトの名無しさん:2010/03/24(水) 19:27:10
どう微妙なんだい
687デフォルトの名無しさん:2010/03/24(水) 20:00:16
なんか膨大な演算能力は殆ど遊んでいるな。
こういう用途なら演算機減らした方が、電力効率的にはマシになるんじゃ。
688デフォルトの名無しさん:2010/03/24(水) 20:06:08
ha?
689デフォルトの名無しさん:2010/03/24(水) 20:13:50
え?
690デフォルトの名無しさん:2010/03/24(水) 20:16:26
ま、近い将来fermiに置き換わるんだろ
691デフォルトの名無しさん:2010/03/24(水) 20:34:22
>>685
1GPUあたり44.3GFlopsかぁ。維持で対応したって感じだ。
692デフォルトの名無しさん:2010/03/24(水) 20:48:15
浮動小数点演算速度が3.22TFLOPSなのか?
693デフォルトの名無しさん:2010/03/24(水) 20:48:57
それでもCPUより80倍の実行性能なんだね
694デフォルトの名無しさん:2010/03/24(水) 20:52:14
6時間の気象モデルが70分で終了するなら
同じ気象モデルを使えばリアルタイム予測が可能?
695デフォルトの名無しさん:2010/03/24(水) 23:28:24
偏微分方程式の数値解法をやる大学院生の演習課題みたいなもんですなw
696デフォルトの名無しさん:2010/03/25(木) 00:41:07
気象問題って、ノード間の影響はどうなの?
TESLAって結局PCI Expressで繋がっているから、
レイテンシが大きそうだな。
697デフォルトの名無しさん:2010/03/25(木) 01:59:47
とりあえず運用してノウハウ貯めて、
28nmのFermi2で一気にパワーアップってのがいいんじゃないか?
明確なハズレ世代を大量導入するのはちとどうかと。
698デフォルトの名無しさん:2010/03/25(木) 07:32:00
>>687
そういうのは GPU 以外に期待した方がいいんじゃないの?
電力効率なんて気にしたせいでピーク性能が落ちてゲームユーザが買わなくなったら、GPU の市場自体が崩壊するよ。
699デフォルトの名無しさん:2010/03/25(木) 14:56:59
>>696
レイテンシを隠蔽するようにcode組んだらしい
700デフォルトの名無しさん:2010/03/26(金) 00:39:01
>>699
へー、そーなんだ。
701デフォルトの名無しさん:2010/03/26(金) 00:59:41
>>693
これがよくわからんな。
なんで80倍なんだろう?
G200って倍精度の理論値って80Gflops位じゃなかった?
それに対してCPUが10Gflopsだろ。
8倍の間違いじゃないのか?
702デフォルトの名無しさん:2010/03/26(金) 03:03:04
http://techon.nikkeibp.co.jp/article/NEWS/20100324/181319/?ST=lsi
> 「最新のマイクロプロセサとの比較ではなく,チューニングの程度の
> 差もあるため,80倍という数字自体は重要ではない。GPUの活用で
> ケタ違いの性能が得られることを確認できた点に意味がある」(青木氏)

だそうで
703デフォルトの名無しさん:2010/03/26(金) 03:12:28
倍精度もハードウェアで本格対応して500GFLOPSになったんじゃないの
と思ったけどFermi世代からで、G200世代のものは90GFLOPS程度みたいだね。

これで倍精度で44.3GFLOPSなら効率50%近くということになるし
アルゴリズムとかかなり頑張っただろうね。

>>701
シェアードメモリをうまく使ったり、大量のスレッドでノード間のレイテンシを隠蔽したり
帯域がボトルネックになりにくいように出来たからじゃないの。

スカラープロセッサは、流体力学とか多体問題とかの
計算結果を相互に利用しながら並列計算する場合には
帯域がボトルネックになって効率がかなり低くなりがちらしいし、
比較対象のCPUを使ったシステムは効率が10%を下回っていたとかかも。

完全に並列化できて帯域がボトルネックになりにくい演算の場合は
10〜20倍という話だったかな。
704デフォルトの名無しさん:2010/03/26(金) 05:40:03
>>703
メモリ帯域が問題になるのはよくわかるんだけど、
それも今のNehalemあたりは30GB/sぐらいあるから、
精々teslsaとは5倍くらいだろう。
それだとメモリ転送時間は1/5、計算時間が1/8になるとして、
CPUのメモリ転送時間をA、計算時間をBとすれば、
実行時間は単純にするとC=A+Bになる。
GPUの場合はCg=0.2A+0.125Bになる。
A=10Bとしたとしても5倍程度にしかならない様な気がするなあ。
CPUの場合巨大なキャッシュがあるし、プリフェッチもあるから
その差が縮まるはずなんだけどな。
東工大のクラスのだからCPUのコードがくそだということもなさそうだから、
なんかOpteronのCPU1コアと比較してそうだなあ。

と思っていたら、>>702が書いてくれているね。

705デフォルトの名無しさん:2010/03/26(金) 05:49:43
比較するCPUが遅すぎたわけか
706デフォルトの名無しさん:2010/03/26(金) 07:17:15
このcpuの速度は、普通にべたべたfpu演算を書いたときの数字だね。
理研の姫野ベンチ並みのバカコードと対照させても意味がない。

Linpackで最近のcpuをベンチマークすると、理論値の8掛け程度の数字は出る。
TUBAMEのopteronも1コアあたり10GFlops前後。しかも倍精度で。
Linpackに比べて気象エミュは速度が上がらんのは間違いないが、
この青木とやらの記事は全然ダメだ。
nVIDIAが成果としてレファできないレベル。
707デフォルトの名無しさん:2010/03/26(金) 08:52:49
CPUというのは全然チューニングしてないレファレンスコードだろ。
よく使う手。しかもCPU名すら書いてない。

ベンチマークには2種類ある。嘘か大嘘。
708デフォルトの名無しさん:2010/03/26(金) 17:23:46
PPTを見ると、44.3GFLOPSは単精度、倍精度では15GFLOPSだね。
比較のCPUは倍精度で0.5GFLOPS以下で、単精度の44.3GFLOPSと比較し、80倍以上といってるんだね。
青木いい加減にしろよw
709デフォルトの名無しさん:2010/03/26(金) 21:19:29
これはひどい。
710デフォルトの名無しさん:2010/03/26(金) 22:05:03
>>704
この手の計算の場合はCPUのキャッシュやプリフェッチはあまり効果が無いと思うけど
Nehalemだと30GB/s程度メモリ帯域があるのか。

ただCUDAでは単なるメモリ帯域の比較だけでなく、シェアードメモリの利用や
大量のスレッドによるメモリアクセスレイテンシの隠蔽が重要になってくると思う。

>702の記事見たけど、デュアルコア2.4GHzのOpteronの1コアと
TESLA S1070の中の1基の比較なのかな・・・

>>708
倍精度だと思ったら、単精度だったのか・・・
そのpptってどこで公開されているんだろ?
711デフォルトの名無しさん:2010/03/26(金) 22:33:58
倍精度でも30ばいかい?
712デフォルトの名無しさん:2010/03/27(土) 01:43:50
なんでみんなプレスリリースくらい読まないの?
不思議
713デフォルトの名無しさん:2010/03/27(土) 03:02:10
>>708
おいおい・・・まじかよ。
かなり酷いなあ。まだ騙すことは出来るかもしれないが、
これがばれてくると偉いことになるぞ。

そういえばNVIDIAのGPUカンファレンスでCPUの2000倍速くなりましたってのがあったが、
Tesrax4、Opteron 2.4GHz 1Coreのものだった。
かなりつっこまれていたよ。
で、GPUは最適化しましたけど、実はCPUは最適化してませんだった。

>>710
この手の計算はどちらかというとストリーミングに近いから、
キャッシュやプリフェッチは十分効くよ。
特にハードウェアプリフェッチはかなり効果的だよ。
ただ、SSEを使ってしまったりすると、計算時間を隠蔽できなくなって、
今度は転送時間を隠蔽する方法を考えなくてはならなくなる。

Nehalemの中でも2000MHzのメモリに対応したものであれば、
48GB/sにもなるよ。このあたりはオーバークロック気味になるので、
コンシューマレベルでしかないけどね。

GPUを使うのを否定はしないが、いい加減嘘に近い誇張は止めてもらいたいものだ。
数倍でもいいだろう。2倍でも2日かかったものが1日で終わるんだぜ。
あんまり速いと仕事が増えるじゃねぇか!

714デフォルトの名無しさん:2010/03/27(土) 03:47:59
嘘は言ってないんだよな
比較対象が微妙すぎるだけで
CPUでも効率を出すのが難しい問題はあるから、両方ともきちんとチューニングした上で比較するのが理想ではある
まあXX倍という数字が一人歩きするのはよくないね
715デフォルトの名無しさん:2010/03/27(土) 04:43:39
>>712
そのプレスリリースってどこにあるの?

>>713
この手の計算って常に帯域を使い切っているわけじゃないの?
それならキャッシュの効果は限定的になりそうだけど、プリフェッチはかなり効果ありそう。

http://journal.mycom.co.jp/news/2010/03/24/055/index.html
> 単一のGPU(Tesla S1070)を用いた際の性能は
> 「単精度ではTSUBAMEに搭載されているOpteron比で最大で100倍を超すレベルを達成、
> 平均でも 44,3GFlopsを達成している。
> 性能が落ちる倍精度でも15GFlops程度を達成しており、
> CPU比では相当高い値を実現した」(青木教授)と説明する。

http://www.gsic.titech.ac.jp/contents/press_release0324.pdf
> スパコンTSUBAMEの単一GPUを使った計算で
> 44.3GFlops(CPUの1コアに対して約80倍)

これってやっぱり、Tesla S1070の4基を単一GPUと言って
Opteronの1コアと比較している同じパターン・・・?

あまりに酷い誇張はやめてもらわないと、有能な開発者がGPUの性能をそれなりに引き出しても
能力が低いとか言われたり、色々と深刻な事態になりかねない・・・
716デフォルトの名無しさん:2010/03/27(土) 04:54:00
実際、某社でなりかけている。

私の現場では、寧ろ旧世代のCPUを積んだサーバ機をGPUで延命させるってシナリオだから
処理能力は1.5倍でも御の字さw まぁ、実際のところはXeon1core対比で5倍程度は出たから
サーバ機一台で換算してなんとか2倍(5+1*3 vs 4)の数字は出たけど。
717デフォルトの名無しさん:2010/03/27(土) 05:08:13
>>715
結局実装アルゴリズムによるけど、
プリフェッチはかなり効くよ。

最後の2行はすごく同意だな。
わかっていない人からすると、GPU使えば数10倍になるはずと思ったりするので、
有能な奴が5倍速い書いたコードを書いたとしても相対的に低いと評価されそうだ。

>>716
たぶんこういう使い方が一番いいのかもね。
718デフォルトの名無しさん:2010/03/27(土) 07:21:48
>>715
CPU比ではそうかもしれんが
AMD比ではかなりしょぼくないか?w
719デフォルトの名無しさん:2010/03/27(土) 09:10:23
http://nttxstore.jp/_II_EA13119354
NVIDIA Tesla C2070 ETS2070-C6ER 475,545円(税込) 発売開始日 2010/9/30
720デフォルトの名無しさん:2010/03/27(土) 12:09:51
GTX 470欲しいな。でもどうせ瞬殺なんでしょ?
いいよな秋葉原に住んでるおまえらは
721デフォルトの名無しさん:2010/03/27(土) 12:47:08
>>716
GPUで延命→鯖予算獲得→新鯖にGPU移植
の流れが理想
722デフォルトの名無しさん:2010/03/27(土) 13:51:52
GPGPUでの性能評価の指針って明確に定められないのかね
CPU単一コア,レファレンスコードと比較して何倍速くなったと言っても,
そんな条件で計算すること自体なさそうなんで,意味無い気がするんだが

GPUでチューニングするなら,CPUでもチューニングするべきだろう
723デフォルトの名無しさん:2010/03/27(土) 14:00:31
AMDかintelかでめんどくさいからじゃない
724デフォルトの名無しさん:2010/03/27(土) 14:34:25
>>722 CPUまでチューニングする必要はないと思うけど、
気象コードがMPIで並列化されてないとも思えないし、1GPU内でも相当の並列化を行ってるんだから、
CPUの1コアのみと比較するのは、ちょっとやりすぎ。
で実際Xeon/X5570と倍精度で比較したら、単一コアで10倍程度、4コアで3倍程度のアドバンテージしかないんじゃない。
ノード単位だと逆に遅くなるとか。120GPUの3.2TFLOPSも単精度だし…、比較自体を都合のいいように、いいとこどりしすぎ。
ベンチマークだけでなく、せっかく実アプリをフルGPU化したのは十分意味があるのに、世間受けを狙いすぎた発表で逆に良識を疑ってしまう。
725デフォルトの名無しさん:2010/03/27(土) 15:23:41
第三者(?)が書いた記事よりも
NVIDIAの発表のほうがまだ信頼できるな。
726デフォルトの名無しさん:2010/03/27(土) 16:40:26
詐欺師の言葉のほうが信頼があるとはこれ如何に
727デフォルトの名無しさん:2010/03/27(土) 16:46:56
詐欺師はお客様に信用されなければいけない。
だから最低限の嘘しかつかない。

大道芸人は嘘をつくたびに金をもらえる。
だからいくらでも嘘をつく。
728デフォルトの名無しさん:2010/03/27(土) 18:47:44
モックアップNVIDIAとうそつきが多い野心的な学者連中の
たわ言なんて信用できないよな
729デフォルトの名無しさん:2010/03/27(土) 19:13:00
ま俺は数字しか信じない
ttp://www.anandtech.com/video/showdoc.aspx?i=3783&p=6
730デフォルトの名無しさん:2010/03/27(土) 19:26:53
数字なんていくらでもいじれるんですよ!
信用のあるデータが欲しいなら自分で実測するしかない
731デフォルトの名無しさん:2010/03/27(土) 19:36:26
つまりそのデータを公開しても
誰も信じないってわけね
732デフォルトの名無しさん:2010/03/27(土) 19:44:22
その通り!
よく分かってるじゃん
論文だって他人の実験の結果なんて基本誰も信用しないよ
とりあえず自分で再現実験してみるのは常識
733デフォルトの名無しさん:2010/03/27(土) 20:09:19
そしてその論文も誰も信用しない
734デフォルトの名無しさん:2010/03/27(土) 21:06:02
利害を共にしない数十人の人が
方法の妥当性を検証し、追試し、同じ結果が出て初めて
ある程度の信用を得る
それでも「ある程度」なのが学問の厳しい所だ
735デフォルトの名無しさん:2010/03/27(土) 21:40:16
GPUは1コアだと思いますよ。TESRA内でもGPU同士はPCI越しなんで
遅くなると思います。
3000x3000x50って1GPUにおさまるサイズと思うし
736デフォルトの名無しさん:2010/03/27(土) 21:41:34
誰も追試できないと思っているから舐めているんだろ。
今後は青木の言うことはハイハイワロスだな。
737デフォルトの名無しさん:2010/03/27(土) 21:43:30
>>735
それだったら120GPUの意味がないだろ。
あと、Teslaな
738デフォルトの名無しさん:2010/03/27(土) 21:49:48
いくつかの別な測定を同じ測定かもしれない感じで書くのはテクニックじゃないですか
1GPUで44.3GFLOPSなのに120GPUでなんで3.22TFLOPSなんでしょうか。
739デフォルトの名無しさん:2010/03/28(日) 09:52:45
Zotac GeForce GTX 480
Amazon.comでPre Order $499だったから
申し込んでしまったw (米→日転送業者使用)
740デフォルトの名無しさん:2010/03/28(日) 13:50:46
結局512spじゃなかったねGTX480
741デフォルトの名無しさん:2010/03/28(日) 15:30:51
Ultraがくる
742デフォルトの名無しさん:2010/03/29(月) 03:53:35
>>740
最初から、576にしておけばよかったのにね。
32x18で。2ブロックダメでも512で出せるのに。
743デフォルトの名無しさん:2010/03/29(月) 08:15:18
そんなことしたらますますイールドが悪くなるわけで。
744デフォルトの名無しさん:2010/03/29(月) 11:43:02
1CUDAコア破損しただけで32個分が台無しになるFermi
512すべて無事なのはほとんどないんだろうな
745デフォルトの名無しさん:2010/03/29(月) 11:50:30
PS3と同じ作戦でござる。

     ____________
    ヾミ || || || || || || || ,l,,l,,l 川〃彡|
     V~~''-山┴''''""~   ヾニニ彡|       512SPは存在する・・・・・・!
     / 二ー―''二      ヾニニ┤       存在するが・・・
    <'-.,   ̄ ̄     _,,,..-‐、 〉ニニ|       今回 まだ 全部有効にするとの
   /"''-ニ,‐l   l`__ニ-‐'''""` /ニ二|       指定まではしていない
   | ===、!  `=====、  l =lべ=|
.   | `ー゚‐'/   `ー‐゚―'   l.=lへ|~|       そのことを
    |`ー‐/    `ー――  H<,〉|=|       どうか諸君らも
    |  /    、          l|__ノー|       思い出していただきたい
.   | /`ー ~ ′   \   .|ヾ.ニ|ヽ
    |l 下王l王l王l王lヲ|   | ヾ_,| \     つまり・・・・
.     |    ≡         |   `l   \__   我々がその気になれば
    !、           _,,..-'′ /l     | ~'''  FermiのSP数は
‐''" ̄| `iー-..,,,_,,,,,....-‐'''"    /  |      |    320SP 384SP ということも
 -―|  |\          /    |      |   可能だろう・・・・・・・・・・ということ・・・・!
    |   |  \      /      |      |
746デフォルトの名無しさん:2010/03/29(月) 14:07:53
          ____
       |<三`'ヨ′
      _/6|ー廿┤
    /l ̄ KL.三.」 ̄h
.   / |   レ兮y′/ l
  〈  く   ∨ l/ ,イ |
   \_,.>、    /,L..」_
. 0ニニニ)而}ニニニニニ),リリニニ)
.   L| |_____|____| |
    l | |._______| |  ,:
 ,  l \ヽ l  |   , '/  ;'
 :, ____l_|_|_;_|_|___|_|__   ;
  |\゙;三三゙';三三三,;゙三三\ ;'
  |\\三三゙三ジジ三三,''三;'\,;'  ;'
  |、 \\三゙;三三ジジ・'三三三;\ ;
  0ト、\\\;'三三;'三三三;''三三,;'\
    \\\| 炎炎炎炎炎炎炎炎炎 |
      \\| 二I二二I二二I二二I二 |
       \LI二二I二二I二二I二二」
        0」            0」
747デフォルトの名無しさん:2010/03/30(火) 10:14:08
NVDIAフォーラムでGTX480の倍精度性能はTeslaの1/4という発言が
ありますがどうなんでしょう
748デフォルトの名無しさん:2010/03/30(火) 10:30:27
>>747
おれ、人柱としてぽちったから待っててくれ。
749デフォルトの名無しさん:2010/03/30(火) 11:15:36
>>748
俺はお前を待っているぞ
+   +
  ∧_∧  +
 (0゚・∀・)   ワクワクテカテカ
 (0゚∪ ∪ +
 と__)__) +
750デフォルトの名無しさん:2010/03/30(火) 11:36:18
Quadroと同じ戦略か。
妥当っちゃ妥当だな
751デフォルトの名無しさん:2010/03/30(火) 12:00:52
EECだけでなく倍精度も性能を劣化させたのか
GPGPUの利点がどんどんなくなってるな
752デフォルトの名無しさん:2010/03/30(火) 12:20:38
>>749
あ、748なんだけど、さすがにTesla買う金は無いのよ。
なんか、GTX480で動かして「明らかに倍精度の性能落としてやがる!!!11」と
分かるプログラムはどこかにあるかな。
753デフォルトの名無しさん:2010/03/30(火) 12:21:31
Teslaもないと比べようがなくね?

visual profilerの関数の実行時間を比較くらいしか厳密な計測はできなさそう。
754753:2010/03/30(火) 12:22:12
リーロードしてなかった、悪気はないんだw
755デフォルトの名無しさん:2010/03/30(火) 12:34:45
NVIDIA_GPU_Computing_SDK/C/bin/linux/release$ ./matrixMul
Processing time: 0.120000 (ms)
Test PASSED

Press ENTER to exit...
あたりを倍精度化してもらえばいいかと
756デフォルトの名無しさん:2010/03/30(火) 12:36:50
>>753
かぶって申し訳ないww
おれ>>739なんだけど、失敗かな。日本で入手可能になるのを
待ったほうが早くて安かったかもしんないよなorz
757デフォルトの名無しさん:2010/03/30(火) 12:41:40
>>755
おけ、matrixMulでGTX280とGTX480の比較ならやってさしあげられる。
floatのままと、doubleに全部置換した版で。
758デフォルトの名無しさん:2010/03/30(火) 12:50:39
floatは内部で型変換してるからdoubleの方が早いって聞いた事あるんだけど…
759デフォルトの名無しさん:2010/03/30(火) 12:59:07
倍精度のFMAをひたすら繰り返す感じのカーネルで計測するのがよいかと。
760デフォルトの名無しさん:2010/03/30(火) 13:09:51
>>758
どこかのCPUでintをdoubleに変換してたという話かと。
761デフォルトの名無しさん:2010/03/30(火) 13:10:18
しかし、480SPとか、AMDはリアル12コアだとか、
時代の進歩は速いものだな。
762デフォルトの名無しさん:2010/03/30(火) 14:06:01
しかし、性能はGTX295から毛の生えた程度
ていうか、もし倍精度の性能がいまいちだったらGTX480/470より
GTX295を買ったほうが安くていいかもね
763デフォルトの名無しさん:2010/03/30(火) 14:14:19
長崎大のようなことをやられたらNVDIAが東工大から呼出をうけて
「2度目はないからな」とか言われても不思議じゃないよね
764デフォルトの名無しさん:2010/03/30(火) 15:00:14
>>762
GTX295、5万円くらいだからなぁ。倍精度の性能がGTX280の2倍程度ならば…
GTX295でヨシってことになると。>>757よろしく!
765デフォルトの名無しさん:2010/03/30(火) 15:19:12
matrixMulはメインメモリの転送が時間に含まれてるしサイズが小さめ
プログラムが書けるなら1000x1000あたりの性能をお願いします
766デフォルトの名無しさん:2010/03/30(火) 15:43:23
>>760
そうなのか?
普通のCPUの構造上浮動小数点演算は、
64bitでやるから型変換をしてると聞いたんだけど
767デフォルトの名無しさん:2010/03/30(火) 15:48:57
もしかしてGPUだと話は別なのかな…
768デフォルトの名無しさん:2010/03/30(火) 18:34:02
>>766
x86アーキテクチャでは、普通は変数型に関わらず浮動小数点演算は80bitの拡張倍精度で行う。
メモリロード/ストアの際に、変数がfloat型ならfloat型に変換されはするが、
別に大した処理でもないので速度にそんな影響は出なかったと思うが。
769デフォルトの名無しさん:2010/03/30(火) 18:46:24
R3000かなんかで64bitint乗算がなくてとかなかったっけ
770デフォルトの名無しさん:2010/03/30(火) 22:56:03
>>767
GPU だとどころか、倍精度演算器が載ってない CPU だってあるから。
処理系によって話が別。
771デフォルトの名無しさん:2010/03/31(水) 02:58:13
device emulationってなくなっちゃうのね
772デフォルトの名無しさん:2010/03/31(水) 05:57:59
ちょっと整理。

・x86(fpu)
浮動小数点レジスタが80bitなので、floatを突っ込んでも80bitで演算する。
従って、floatとの変換処理が入るのでdoubleの方が速いことがしばしば。

・x86(sse)
MMXレジスタが汎用なので、floatはfloatのまま演算する。
従って、定数や標準関数でdoubleに汚染されないように気をつければfloatの方が多少速くなる。
また、MMXレジスタにfloatの方が2倍詰め込めるのでベクタ化した場合に2倍速くなる可能性もある。
更に、キャッシュ効率もよくなるのでより速くなるかもしれない。

・GPU(cuda)
単精度レジスタと倍精度レジスタが分かれているんだっけ? 倍精度についてよく知らんのでフォローお願い。
演算器の特性上、単精度の方がずっと高速に演算するし、転送量も当然半分にできる。
応用にも拠るけれど、CPUとのI/Fは単精度で内部だけ倍精度にできると最強かも。
773デフォルトの名無しさん:2010/03/31(水) 07:48:43
64bit版gccだと、-m32オプションをつけない限りもはやx87のコードは吐かないなあ。

>CPUとのI/Fは単精度で内部だけ倍精度にできると最強かも。
これって何回丸めが発生するかによるけど、精度は単精度+αだね。
でもこういうことはよくやるなあ。
データ量を減らしたくて少し精度が欲しい場合は、最終的に欲しいデータはfloatで持っておいて、
計算するときにすべてdouble型のデータにコピーして最後に結果をfloat型に戻す。
この方法をとれば、丸め誤差の発生は一回で済む。
計算の中身が超越関数使ったり、複雑であったりすると結構有効だよ。
その分速度は犠牲になるけど、メモリ帯域が支配的であると余り影響がないな。
G200系だとまだ効果はないだろうけど、Fermiなら結構役に立つんでない?
774デフォルトの名無しさん:2010/03/31(水) 11:35:13
>・x86(fpu) 
>浮動小数点レジスタが80bitなので、floatを突っ込んでも80bitで演算する。 
>従って、floatとの変換処理が入るのでdoubleの方が速いことがしばしば。 
doubleは64bitなんだから結局まるめが入るのは同じじゃないの?
775デフォルトの名無しさん:2010/03/31(水) 13:02:05
おいおいあれだけCPU側のコードが糞だといっておいて、CPUのこと知らなさすぎだろw

floatが遅くなるのは、MSVCが、floatのときは毎回メモリに書き戻すことで精度を32bitに落としてIEEE互換にするコードを出すから
レジスタ間ならfloat/double/long double関係なく80bit
776デフォルトの名無しさん:2010/03/31(水) 14:32:17
GPUの種類を取得する関数か何かはありませんか?
777デフォルトの名無しさん:2010/03/31(水) 14:42:10
>>776
サンプルでついてくるdeviceQueryのソース読んでみれば
778デフォルトの名無しさん:2010/03/31(水) 14:44:59
>>776
CUDA APIガイドに書いてあるだろ
779デフォルトの名無しさん:2010/03/31(水) 15:12:11
そうじゃなくて製品名です
780デフォルトの名無しさん:2010/03/31(水) 15:20:59
製品名って、ASUSかEVGAか判別したいってこと??
781デフォルトの名無しさん:2010/03/31(水) 15:26:11
メーカーの判別はどうがんばっても無理だろ
782デフォルトの名無しさん:2010/03/31(水) 15:32:47
じゃあせめてWindowsかMacかInaxかぐらいわかりませんか?
783デフォルトの名無しさん:2010/03/31(水) 15:33:23
製品名って言うくらいだから、ELSA GLADIAC 998 GTX Plus V2 512MBみたいなのじゃないのか。
784デフォルトの名無しさん:2010/03/31(水) 15:34:04
>>782
CUDA以前の問題。てか、そのレベルじゃ絶対無理だろ。
785デフォルトの名無しさん:2010/03/31(水) 15:53:38
#ifdef _WIN32
786デフォルトの名無しさん:2010/03/31(水) 15:55:08
まさかOpenCLの話か?
#ifdef _apple
とかやった覚えがある。
787デフォルトの名無しさん:2010/03/31(水) 16:15:17
#ifdef _appleは豆知識だな
788デフォルトの名無しさん:2010/03/31(水) 16:44:37
Inax は釣りだろ。782 は偽者じゃないか?
TOTO 向けと別の最適化するのかなw
789デフォルトの名無しさん:2010/03/31(水) 19:31:24
水流をGPUでシミュレーションして最適化するのか
790デフォルトの名無しさん:2010/03/31(水) 21:04:19
流体シミュレーションはGPGPUのメインテーマだから、まさにうってつけだろう
791デフォルトの名無しさん:2010/03/31(水) 21:06:11
OpenCL使えよ馬鹿ども
792デフォルトの名無しさん:2010/03/31(水) 21:08:09
日本の便器メーカーは水量削減に血道を上げているからな
いかに少ない水量で、効率良く、かつきっちり排泄物を流しきるか
793デフォルトの名無しさん:2010/03/31(水) 21:11:31
便器開発での計算に使用するだけでなく、
便器自体にTeslaを搭載し、
排泄物を画像認識して最適な水流を計算する。

排熱も有効利用できそうだ
794デフォルトの名無しさん:2010/03/31(水) 22:39:35
>>793
画像認識のコード書くやつは大変だな
795デフォルトの名無しさん:2010/03/31(水) 22:42:09
確かに、今は節水ということで一般家庭向けの便器は
流れが悪いといくことを感じるな。

現場では流体演算とかして設計しているのだろうか?
796デフォルトの名無しさん:2010/04/01(木) 01:09:36
TOTO 節水 シミュレーション でググってみた。
http://www.toto.co.jp/saiyo/new/techno/person/person_05_2.htm
797デフォルトの名無しさん:2010/04/01(木) 01:17:06
流体どころか三相全てシミュレートしてるんだな
798デフォルトの名無しさん:2010/04/01(木) 07:04:31
GTX470が先に発売されるみたいですね。
購入される方いますか。
799デフォルトの名無しさん:2010/04/01(木) 12:43:41
どうしてcudaはosと密接なのか?
最新のubuntuをいれたくてもいれられへん
理由を教えてくれろ
800デフォルトの名無しさん:2010/04/01(木) 14:28:01
>>799
ドライバレベルで提供されているから。
801デフォルトの名無しさん:2010/04/01(木) 19:55:02
>>797
固体ってのが生々しいな。シミュレーションするためにウンコの物性とか
測定したりしたんだろうな。
802デフォルトの名無しさん:2010/04/01(木) 20:10:39
壊れ方とかがリアルな模型があるとか聞いたことがある。
でも物体の測定データのファイル名とかはなまなましいだろうなw

シミュレーションしているときのSSとかあればいいのに。
803デフォルトの名無しさん:2010/04/01(木) 21:27:09
たしか法律で、流す水の量は決まってるんだよね。
804デフォルトの名無しさん:2010/04/02(金) 07:57:34
>>799
たぶん、nvccがgccの進化について行けていないだけだと思う。
バイナリだけなら、最新のUbuntuでも動くよ。
805デフォルトの名無しさん:2010/04/02(金) 16:58:24
最近のディストリビューションって大抵1年かそこらでサポート終わりじゃん。
1つまえのバージョンにしか入れられないと、半年程度でいれかえなきゃいけないんだよね。
そこらへんを早く何とかしてくれよ。
CentOSとかつかえばいいのかもしれんけど
806デフォルトの名無しさん:2010/04/03(土) 03:06:19
そこを何とかしてもらいたいね。
俺は古いバージョンのLinuxをVirtualBoxで新しいバージョンのLinux上で動かして、
クロスコンパイルライクなことをしているよ。コンパイルだけなら仮想化環境でも通るからな。
807デフォルトの名無しさん:2010/04/03(土) 12:32:49
GTX480で倍精度削られたのは本当らしい…

Quadroではどうなるんだろう
808デフォルトの名無しさん:2010/04/03(土) 14:22:26
今すぐ計算して論文書かなきゃって人以外は↓ここ聞いてからにした方がいいんじゃないかと。
ttp://www.hardocp.com/article/2010/03/26/nvidia_fermi_gtx_470_480_sli_review/7

「当機はまもなく離陸しますw」
809デフォルトの名無しさん:2010/04/03(土) 14:24:49
>>807
ドイツ語読めないけど、これ?
ttp://www2.hardware-infos.com/news.php?news=3497
810デフォルトの名無しさん:2010/04/03(土) 22:55:58
Q1.同じGT-240を二枚挿せばCUDAも倍近く早く処理できるようになりますか?
Q2.GDDR5とGDDR3とDDR3でCUDA動画エンコードの処理スピードはどれくらい
違いますか?GDDR3を100として。
811デフォルトの名無しさん:2010/04/04(日) 00:22:50
>>810
もう少し具体的に知りたいことを書いた方が答えやすい。

例えば動画エンコード用途に限ると「複数枚挿しはどうよ?」とか、「FermiとかATIとかの中でどれが一番速いか」とか。
812デフォルトの名無しさん:2010/04/04(日) 00:38:10
十分具体的だろ・・・。

ソフトウェアによって、複数挿に対応しているかどうかは変わるので、
使いたいソフトについて調べよう。

メモリの速さは重要だけど、GPGPUでは、メモリにアクセスするときの遅延のほうが問題となっている。
ハードウェアの構造的にもGT200系のほうがメモリアクセスが柔軟なので、GTX260あたりを検討してはどうだろう。
813デフォルトの名無しさん:2010/04/04(日) 01:19:30
具体的だろと言っておきながらソフトによって変わるとか意味不明
814デフォルトの名無しさん:2010/04/04(日) 01:38:58
>>811-812
レスありがとうございます。

CUDAの使用目的:動画エンコのみ。 使用するソフト:MediaCoder
使用するかもしれないソフト:TMPGEncKarmaPlus
現状:AVIUTLでロゴ消しとインタレ解除のプロジェクト→
TMPGEnc4で色γクロップ・リサイズしてHUFFYUVで出力→MediaCoderのx264で。
課題:Q6600でVGAでx264エンコが22fpsしか出ない。1080pだと4fps!orz
MediaCoderにCUDAでH.264エンコできる機能があるので使いたい。
GT240がGDDR3で6000円、GDDR5で7500円〜なので、二台組むより二枚入れた
ほうがいいのかも?
GDDR3とGDDR5でCUDAエンコに殆ど差がないならGDDR3のほうにしたい。
複数枚挿しはどうです?
現状G43/G41/G31なので新しくマザー買わなきゃできないけど…。

>>812
GPGPUやメモリアクセスについて仕組みとか全く知らないのですが、
GTX260はGT240の倍以上の値段だけど、倍の性能あるんですか?
wikiに書いてあるSPとCUDAコア数がどう違うのか分からないので…
もし倍の性能(エンコが倍早くなりそう)ならGT240よりGTX260を選ぶかも
しれません。PXI-EXOが1つですむし。
815デフォルトの名無しさん:2010/04/04(日) 01:42:45
>>810
素直にCorei7にしておけ。
GT240じゃ2枚さそうがCorei7の方がマシだ。
816デフォルトの名無しさん:2010/04/04(日) 02:30:20
現状CPUを強化したほうがメリット多い
CUDA使うならGTX260以上じゃないとCPUの足を引張る可能性がある
817デフォルトの名無しさん:2010/04/04(日) 04:58:16
aviutlでの処理時間考えたらCPU強化の方が妥当だな
818巻添規制中(810=814):2010/04/04(日) 06:04:59
>>815
http://www.techarp.com/showarticle.aspx?artno=520&pgno=7
でみるとi7はQ6600の1.25倍くらい早い
http://www.katch.ne.jp/~kakonacl/douga/mediacoder/v0.71_cuda.html
でみるとCUDAはQ6600の3.7倍くらい早い
∴CUDAはi7より3倍近く早い…??? CUDAは実写向き?

X58+i7買いたいけど、LGA1155待とうかと。
819デフォルトの名無しさん:2010/04/04(日) 09:47:48
>>818
あ〜、俺もこれ使ってcudaエンコしてるけど、Bフレームが4までだったり2passできなかったり
画質はいまいちですよん。たしかにCPUよりは速いとはおもうけど・・・。

新しいバージョンだと改善されてる可能性はあるけどね。
820デフォルトの名無しさん:2010/04/04(日) 11:55:03
>>814
GT240の3倍くらいの値段で売られているが、3倍速くなるとはいえないけど、
MediaCoderは複数差対応していなし、GT240を2枚買っても無駄になる。
あたらしくマザー買う予算が削れるならGTX260でもいいかと。

画質もとめるなら、i7ってのは合意。
821810:2010/04/04(日) 14:18:33
みなさん色々有難うございます。ググりながら考えてるんですが難しいですね。

>>816>>817
GTX260だと電源交換、i7はM/B&DDR3全部揃えないと…先立つものが…。(ToT)
http://www.katch.ne.jp/~kakonacl/douga/mediacoder/v0.71_cuda.html の人
は GeForce9600GT(VRAM 512MB)Vista HomePremium(SP2)で実行、CUDAエンコ
でQ6600使用率83%と書いてあるけど、GT240のほうが高速ですよね?
http://pc.watch.impress.co.jp/docs/column/tawada/20091117_329556.html によると
GeForce 9600 GTの1,800MHz/256bit メモリ帯域幅は57.6GB/sec、
GeForce GT 240のGDDR5/3,400MHz/128bit 54.4GB/sec、
GeForce GT 240のDDR3/2,000MHz/128bit 32GB/sec。
DDR2-667(5.3GB/s) DDR2-800(6.4GB/s)デュアルだと倍。
もしかしてDDR2がボトルネックになる? 
GT240 GDDR3とGDDR5でCUDAエンコの速さの違いどうなんでしょう?
そこらへんが一番気になります。
822810:2010/04/04(日) 14:19:49
>>819
最新ではBフレームが16まで、Average/Variable/CBR/2pass/3pass できるみたいだよ。
x264ではAverage/Variableは何故かコマ落ちする。

>>820
SP216&DDR3のGTX260とCUDAコア数96のGT240だと、エンコ速度二倍差が出ます?
PHARAOH 500W電源だとGTX260+Q6600はギリギリかなぁ。

(Q6600+GT240)複数台にするほうが経済的かな? G41とDDR2が1組余ってるし…
823デフォルトの名無しさん:2010/04/04(日) 15:38:15
http://hothardware.com/articleimages/Item1477/san.png
doubleはfloatの1/2*9ってとこか。

Teslaでやって1/2とかだったら、ロックなんだろうな。
824デフォルトの名無しさん:2010/04/04(日) 17:43:24
これは低すぎるのでOpenCLでDoubleがHWサポート
されてないのではないかと
825デフォルトの名無しさん:2010/04/05(月) 00:43:36
>>821
GDDR3とGDDR5とでは、メモリ帯域が倍違うので、ストリーム系のアプリでは大きく変わります。
ていうか、このクラスのボードで2枚挿しとか意味がない。
826デフォルトの名無しさん:2010/04/05(月) 01:09:55
>823−824
むしろ理論値で単精度の5分の1になるはずのRADEONの倍精度が半分程度で済んでる方が気になる

>822
GT240なんてゴミ買うぐらいならいっそ中古のQ9xxxのCPUでも買った方が良くね?
827デフォルトの名無しさん:2010/04/05(月) 03:39:12
安物買いの銭失いとはこのこと

CUDAに大きな期待を抱かないほうがいい
828デフォルトの名無しさん:2010/04/05(月) 19:17:53
>>823で、GTX295が285よりもスコア低いのはなぜ?
829デフォルトの名無しさん:2010/04/06(火) 01:17:45
>>828
単純にGPUを一個しか使っていないからだと思う。
単一GPUなら285の方が速いからね。
830デフォルトの名無しさん:2010/04/06(火) 08:54:53
>>825
CUDAエンコはストリームと違ってGDDR3もGDDR5殆ど関係無いってさ。
SP数(CUDAコア数)でほとんど性能が決まる。

>>827
最新のMediaCoderでVBRでやってみたらどう?
831デフォルトの名無しさん:2010/04/06(火) 19:53:29
MLB オバマ始球式
832デフォルトの名無しさん:2010/04/07(水) 09:15:06
HPC向けGPGPU終わりつつあるな

102 :Socket774 :sage :2010/04/06(火) 23:24:12 ID:n4owrnuu




>>98
> HPC向けはどうなるんだろう?

マキーノの話だとこんなのが。
http://grape.mtk.nao.ac.jp/~makino/journal/journal-2010-04.html#3
> 一枚5万とかで買うのでない限り GPU は価格性能比では CPU に勝てなくなってしまった

以前はGPUの方が同コストのCPU比で10倍↑とか軽く叩き出してたけど、
CPUはマルチコア化が進みまくり値段下がりまくり…
ハイエンドGPGPU買うよりCPUの方がコスパが良くなってしまった。
基本直線番長のGPGPUよりCPUの方が扱いやすいし、プログラミングも先行きわからない
CUDAやらなくても、今までやってきた事そのままで走るし…
833デフォルトの名無しさん:2010/04/07(水) 09:26:05
確かに、OpenMPとかでそれなりに性能出るならそっちの方が超簡単だもんな。
834デフォルトの名無しさん:2010/04/07(水) 12:13:09
精度を削って性能を出したマシンで有名になったのにこういう時は倍精度の話だけか
835デフォルトの名無しさん:2010/04/07(水) 12:54:34
>>832
マルチコア化が進みまくりって、↓か?当面CUDAエンコの半分にもならんだろう
http://akiba-pc.watch.impress.co.jp/hotline/20100403/ni_c6176se.html
http://akiba-pc.watch.impress.co.jp/hotline/20100327/ni_cw3680.html
836デフォルトの名無しさん:2010/04/07(水) 15:29:03
>>835
CUDAエンコは実用性ゼロと言われているだろ
HPC以外の分野でCUDAを利用している人はいないだろ
837デフォルトの名無しさん:2010/04/07(水) 15:31:47
>>834
そこ大事だよな。CPUと違って、倍精度・単精度の使い分けで性能違うもんな。
て、マキーノは昔、計算パスの場所によって計算精度が違う計算機を作ってたもんな
838デフォルトの名無しさん:2010/04/07(水) 15:33:36
>>836
エンコの中の人が面倒くさがっているだけなんじゃないの
839デフォルトの名無しさん:2010/04/07(水) 15:38:47
>>838
環境を作るのがめんどくさい。
コードを書き換えるのがめんどくさい。
最適化するのがめんどくさい。
840デフォルトの名無しさん:2010/04/07(水) 15:45:24
>>838
まともなエンコを利用できないという事実が重要
841デフォルトの名無しさん:2010/04/07(水) 18:57:43
たしかにOpteron12コアX4がFermiと同じ値段ならGPU終わるな。
既存のコードがそのまま動くし。
CUDAでこれ以上の性能が出るアプリは限られている。
842デフォルトの名無しさん:2010/04/07(水) 19:05:29
fermiの場合ボッタクリなだけのような。
最終的にはfusionみたいな物に落ち着くだろうけど。
GPUのアーキテクチャとしては変に汎用に振るより
コンパクトな割に暗号解読みたいに得意なものが速い
と言う方が良いだろう。
843デフォルトの名無しさん:2010/04/07(水) 20:15:16
>>838

正直エンコにCUDAを適応出来る処理が少なすぎる
844デフォルトの名無しさん:2010/04/07(水) 21:02:20
x264の開発者が全員RADE愛好者だったとかいうオチなら面白い
845デフォルトの名無しさん:2010/04/07(水) 21:05:12
>>839
ペガシスがKarmaPlusに導入したCUDAエンコをTXP4になかなか導入
しないのはそれが原因かw
846デフォルトの名無しさん:2010/04/08(木) 00:28:04
>>841
メニーコア化が進展すればGPUは終わるよね
実際のところ、全然進んでないからNVは助かっているけど
847デフォルトの名無しさん:2010/04/08(木) 00:33:02
メニーコアのメニーの次元が、GPUとCPUじゃ、全然違うしな
848デフォルトの名無しさん:2010/04/08(木) 00:52:10
新しいものが出てくるときはチャンスだと思うんだが、このスレではそんな気配かけらもないな。
やっぱり日本人てダメなのかね
849デフォルトの名無しさん:2010/04/08(木) 00:53:43
だって、HPC向けはコストパフォーマンス悪いし
GeForceは機能削られまくりだし、いまいちなんだよね
850デフォルトの名無しさん:2010/04/08(木) 00:56:38
ATOM+IONチップセットで
エンコ爆速になったりしないか
851デフォルトの名無しさん:2010/04/08(木) 01:25:40
>>850
動画データの転送には最低でもPenDは必要。

>>848
バカンスの概念が無い日本人はここぞって時に余力が無い。

>>841
4万のマザーに32,480円の8コア載せるより
5千円のマザーに1.6万円の4コア載せて数万のビデオカード挿す方が数倍早い
んだろうし、どっちもムーアの法則どうり進化すればGPUは当分優勢では?
852デフォルトの名無しさん:2010/04/08(木) 06:07:48
GPUで縁故するとなんであんなに汚いの?
853デフォルトの名無しさん:2010/04/08(木) 06:24:22
ソースみたいとわからん。
854デフォルトの名無しさん:2010/04/08(木) 06:27:58
SpursEngineでエンコして汚いのはハードのせい
CUDAでエンコして汚い場合はソフトが成熟してないから
855デフォルトの名無しさん:2010/04/08(木) 07:03:51
>>851
適材適所ってことだよなー
y=a*x+b を100万個×10万回 みたいな計算には巨大コアはいらない、
小さいコアがたくさんある方が速い みたいな。
856デフォルトの名無しさん:2010/04/08(木) 19:19:24
>>851
なぜ今頃ムーアの法則?
成り立たなくなってかなり経つんだが
857デフォルトの名無しさん:2010/04/08(木) 19:46:55
え?
858デフォルトの名無しさん:2010/04/08(木) 19:53:19
>>856

え?
859デフォルトの名無しさん:2010/04/08(木) 21:00:18
>>856
          _......_
     __   /.::::::::::`:.、
  /, - r, /::::i::::ハ:i:::::;::',
  r-'ヽ./イ i::::|イ/' '-ヘl:::i
  ` ー、i { l::::l '"´  ̄ l:::l <またまたwご冗談を
    l! l l::::ト、 r_っ ,ィ:::l
     l  トヽ::l弋ニ<l::::l!
     ゝ- イ`    イ^イ
        |     /-{′

http://wiredvision.jp/news/200709/2007092021.html
http://www.itmedia.co.jp/news/articles/0906/18/news006.html
860デフォルトの名無しさん:2010/04/08(木) 21:01:30
あと10年ぐらいはどうにかなりそうな気がするけど
861デフォルトの名無しさん:2010/04/08(木) 22:27:03
>>856はfreelunchは終わった発言と混同しているに1000ペソ
862デフォルトの名無しさん:2010/04/08(木) 22:27:35
>>860
どんだけ低クロックなんだよ、電算機系分野の10年ってものすげぇ進歩するんだぞ
863デフォルトの名無しさん:2010/04/08(木) 22:58:17
クロック?
ムーアの法則って集積密度の話じゃなかったっけ
864デフォルトの名無しさん:2010/04/08(木) 23:03:27
ムーアの法則なんて、明らかに無理だと分かった時点で
定義の方を変えて無理やり存続させているだけだろ。
865デフォルトの名無しさん:2010/04/08(木) 23:14:23
IntelはAMDの様子見して出し惜しみ&殿様商売
「半導体の集積密度は18〜24ヶ月で倍増する」ゆえ
CPUの性能は2年で倍近くになる。1年だと√2倍弱
GPUも同様。
866デフォルトの名無しさん:2010/04/08(木) 23:19:44
集積密度≠性能ということをきちんと理解しましょう
867デフォルトの名無しさん:2010/04/08(木) 23:53:15
GPUで無理矢理あれこれするより、
計算専用のユニットを別途開発した方がいいんじゃないの?と思う
GPUより効率よくできる部分もあるだろうし
868デフォルトの名無しさん:2010/04/09(金) 10:42:33

   ∩___∩         |
   | ノ\     ヽ        |
  /  ●゛  ● |        |
  | ∪  ( _●_) ミ       j
 彡、   |∪|   |        J>>867
/     ∩ノ ⊃  ヽ
(  \ / _ノ |  |
.\ “  /__|  |
  \ /___ /
869デフォルトの名無しさん:2010/04/09(金) 12:48:00
x264がCUDA対応してないことと、AVIUTLでCUDA使えないこと、
MediaCoderのcudaH264Enc.exeの画質をx264並みにするにはビットレートを
何割増しにすればいいのか不明なこと、
PowerDirectorは設定がゴミなこと、

が問題かな
870デフォルトの名無しさん:2010/04/09(金) 15:40:20
http://forums.nvidia.com/index.php?showtopic=165055

Double precision is 1/2 of single precision for Tesla 20-series, whereas double precision
is 1/8th of single precision for GeForce GTX 470/480
871デフォルトの名無しさん:2010/04/09(金) 17:18:50
倍精度だとteslaの1/4だけと、値段は1/5なんだよね
872デフォルトの名無しさん:2010/04/09(金) 17:46:49
ノードの数がGTX480は480でteslaは442なんだよね
873デフォルトの名無しさん:2010/04/09(金) 18:47:55
あれ、HD5870でよくね?
874デフォルトの名無しさん:2010/04/09(金) 20:10:18
http://pc.watch.impress.co.jp/docs/news/20100405_359261.html

AMDは単精度しかなかったみたいね
875デフォルトの名無しさん:2010/04/09(金) 20:58:04
IEEE754準拠ではない64bit double floatはR7xxの頃からあった。
俺は使ったことないからわからないけど。
少なくともドキュメントには、Radeon HD4xxx を除外するような文言はなかった。

R8xxはIEEE754準拠の命令が結構揃ってるよ。
876デフォルトの名無しさん:2010/04/09(金) 21:12:53
なんでラデはFFTのライブラリを出さないのか理由がわかりますか
877デフォルトの名無しさん:2010/04/09(金) 21:15:33
つくれば?
878デフォルトの名無しさん:2010/04/09(金) 21:23:09
ですよね
879デフォルトの名無しさん:2010/04/09(金) 22:31:50
http://ascii.jp/elem/000/000/513/513385/
秋葉に出たみたいです。どうしようかな。
880デフォルトの名無しさん:2010/04/09(金) 22:38:50
熱的にやめとけ。
881デフォルトの名無しさん:2010/04/09(金) 22:53:30
売り切れたそうです。GTX480、3枚買った方がいるとか。
882デフォルトの名無しさん:2010/04/09(金) 23:04:45
>>875
IEEE754準拠の精度になったのがRV770で
RV670のころからdoubleはサポートされているよ。
883デフォルトの名無しさん:2010/04/09(金) 23:45:38
3枚とかアホとしかww
884デフォルトの名無しさん:2010/04/10(土) 00:08:11
470なら3台行けるかなー
885デフォルトの名無しさん:2010/04/10(土) 01:56:40
オークションで売るんじゃないか
886デフォルトの名無しさん:2010/04/10(土) 02:23:45
PCI-EXx16 3つあるマザーでPCIと交互にあるマザーでCUDAエンコに
使うんだろう。
887デフォルトの名無しさん:2010/04/10(土) 05:14:47
結局、倍精度は削られているのかね?
削られていなければ買いたいのだが。
888デフォルトの名無しさん:2010/04/10(土) 06:32:49
まだ実測した人はいないみたいですね。スレの人が手に入れるのをまちましょう。
889デフォルトの名無しさん:2010/04/10(土) 07:09:42
GTX480じゃ倍精度無効になっているだけで
sandraのベンチのやつはEMUですが
890デフォルトの名無しさん:2010/04/10(土) 07:42:43
無効じゃなくて1/4ですよね
ベンチはOpenGLがそうなってるということで
891デフォルトの名無しさん:2010/04/10(土) 07:47:12
OpenGLのなにが?
892デフォルトの名無しさん:2010/04/10(土) 07:59:10
sandraのあれはOpenCLだろ>倍精度無効
893デフォルトの名無しさん:2010/04/10(土) 08:04:30
sandraはOpenCLだろうがGLだろうがCUDAだろうがCSだろうがvideorenderingだろうが
ハードで使えなきゃエミュでだすよ
894デフォルトの名無しさん:2010/04/10(土) 08:14:32
895デフォルトの名無しさん:2010/04/10(土) 08:54:56
>>894
ゲーム目的だったらHD5970を買ったほうがよかったのにね
896デフォルトの名無しさん:2010/04/10(土) 10:53:48
M/Bとか貧弱なんでゲーマでもないみたいでなんで2枚も買ったのか
897デフォルトの名無しさん:2010/04/10(土) 11:38:52
480/470の倍精度演算削られたのか…
倍精度演算やる人はぼったくり価格のC2050/2070買えってか
898デフォルトの名無しさん:2010/04/10(土) 11:45:47
>>897
そのソースはどこ?
899デフォルトの名無しさん:2010/04/10(土) 13:34:59
>>897
まぁ、このスレ住人が実際にCUDAで試すのを待とうや。
900デフォルトの名無しさん:2010/04/10(土) 13:57:02
米アマゾンはまだ発売前になってるね
901デフォルトの名無しさん:2010/04/11(日) 10:27:23
これだけ出回ってるのに倍精度はおろか単精度の演算を流す人もいないとは
902デフォルトの名無しさん:2010/04/11(日) 13:02:22
出来る人はこんな所に来ない、つまりここは無能の衆が集う所だから
903デフォルトの名無しさん:2010/04/11(日) 13:11:46
みんな科研費で買うんじゃない?5月まで待たないと.
904デフォルトの名無しさん:2010/04/11(日) 13:37:56
無駄遣いはやめてもらうようにこのスレのことも仕分け人に伝えとかないといかんね
905デフォルトの名無しさん:2010/04/11(日) 13:48:15
科研費が無駄に物価を高騰させてるな
さっさと仕分けされろ
906デフォルトの名無しさん:2010/04/11(日) 18:10:27
無駄な科学者・技術者は農業や林業にまわって効率を上げてやってほしい。
907デフォルトの名無しさん:2010/04/12(月) 06:21:08
470ポチった。ついでにCUDAの入門書もポチった。
両方到着は14日予定。おまえらよろしく

>>897
倍精度のテストプログラムか何かあれば提示してくれないか?
手元にGeForce系列VGAが一切ないので一切やったことがないんだ
908デフォルトの名無しさん:2010/04/12(月) 07:42:29
14日、期待してますよ。
909デフォルトの名無しさん:2010/04/12(月) 09:50:33
人柱になってくれるのに情報薄くて申し訳ないが
このスレの上の方にあるCUDA公式での行列かけ算コードを倍精度化したものを走らせるのが一番簡単かな?
手持ちがあれば提供したいが
910時々書いている人:2010/04/12(月) 13:40:47
未だELSAからボードが来ない……
911デフォルトの名無しさん:2010/04/12(月) 14:48:20
480のCUDAのベンチマーク結果はどかでみられませんか?
ゲームのベンチだといくらでもみつかるのですが。
912デフォルトの名無しさん:2010/04/12(月) 15:15:57
             _(こ^)、_
            〃、__ノノ、__,ヽ
              {.っ>  <っト、
            (⌒i  (千于`ー┴'─────┐
         (O人  `ー|                |
           /⌒ヽ(^う 見せられ.      |
           `ァー─イ    ないよ!   |
           /  (0::|__________|
             /\____/
          /   /  ⌒ヽ
      ___/  / ̄ ̄`)  ノ
     (__r___ノ     (.__つ
913デフォルトの名無しさん:2010/04/12(月) 18:54:31
914デフォルトの名無しさん:2010/04/12(月) 19:10:50
おk、14日・・・はWin7のセットアップなどもあるから無理として、15日か16日にはテストする
915デフォルトの名無しさん:2010/04/12(月) 19:23:43
あいかわらず倍精度のベンチはないもののNVIDIAがコンフォームしたって書いてあるね
916デフォルトの名無しさん:2010/04/13(火) 08:17:19
マーケティングの理由から倍精度つぶすとかやってくれるぜ全く
くあどろも同じだったら本当に萎えるわ
917デフォルトの名無しさん:2010/04/13(火) 08:20:01
やっぱり倍精度は1/4になっているのか。
Teslaだと高いしな。
Nehalemが6コア、8コアになってきて、Opteronは12コアになってきてしまったので、
CUDAの優位性がかなり下がってしまったな。

918デフォルトの名無しさん:2010/04/13(火) 08:27:05
nvidiaは1世代分戦略を間違えた希ガス
社運をHPCに賭けるなら、Fermiは倍精度つぶさずにバーゲンするべきだった
CUDAがある程度スタンダードになったことを確認した上で、Fermiの次をぼったくり価格にすれば良かったはず
PCIExpress3.0対応にしてさ

いまならCUDA捨てるの間に合うしなあ ユーザ側が

リネーム商法といい、nvidiaはほんと強気だ
919デフォルトの名無しさん:2010/04/13(火) 10:20:40
まじか。書いてあるな。萎えたな。
「NVIDIA has confirmed it - the GTX 400 series' FP64 performance is capped at
1/8th (12.5%) of its FP32 performance, as opposed to what the hardware
natively can do of 1/2 (50%) FP32. 」
920デフォルトの名無しさん:2010/04/13(火) 10:21:59
これまでの何倍速くなりました!というのがかなり限定されるのがわかって来たからね。メモリ帯域に関しても確かにCUDAが始まった頃は、CPUの10倍以上あって早かったけど、今はDual CPUだと大差無くなって来ているので、高価なTeslaを入れる意味も無いなあ。
前に誰かが書いていたけど、古いPCの延命のために使うのはありだと思うけど、ちょっと高いよなあ。
歩留まりが悪いのはわかるが。
921デフォルトの名無しさん:2010/04/13(火) 10:29:35
結局、Fermiのほどまりは何%くらいで、普通は何%くらいなんですか?
922デフォルトの名無しさん:2010/04/13(火) 11:55:56
>>921
不明
今後も確実なソースから数値が出る可能性はほぼゼロ
923デフォルトの名無しさん:2010/04/13(火) 13:23:11
konozamaだったよ

orz
924デフォルトの名無しさん:2010/04/13(火) 13:32:21
>>923
イ`
925デフォルトの名無しさん:2010/04/13(火) 16:23:45
>>921
ほどまり???
926822:2010/04/13(火) 17:12:13
MediaCoder
CUDAエンコ爆速www
Q6600の6倍早いwww
画質x264と変わらんwww
GTX260でCPU45〜51%使用www
927デフォルトの名無しさん:2010/04/13(火) 17:29:23
ふどまり
928デフォルトの名無しさん:2010/04/14(水) 12:24:12
どうやらこのスレが世界初GTX480/470CUDA倍精度性能実測報告スレとなりそうですね
929907:2010/04/15(木) 04:57:37
とりあえず470は明日到着予定。
けど、搭載予定のケースが明後日到着予定・・・
うきいいいいい

変な時間に起きてすることがない・・・
930デフォルトの名無しさん:2010/04/15(木) 05:48:41
瞑想しろ
931デフォルトの名無しさん:2010/04/15(木) 20:51:26
CUDA初心者です。

GTX295で2つのGPUを使用する場合、
cudaMemcpy (省略, cudaMemcpyDeviceToDevice);
で2GPU間の直接メモリコピーはできないのでしょうか?
せっかく1ボードにのっているのにCPUに戻すなんておかしいのではと思ってます。
932デフォルトの名無しさん:2010/04/16(金) 03:13:18
おかしくはない。
2GPUといったって結局はPCIEで繋がっているから、
SLIで2枚繋がっているのと同じなんだよ。
しかもPCIEのバスはCPUのメモリバスと違って遅いから、
仮にDMAでアクセスできるようになっても10%くらいしか改善しないと思うよ。
933931:2010/04/16(金) 06:13:10
>>932

回答ありがとうございます。
質問がまずかったかもしれない(2GPUではなく2コアと言えばよかった)ので再質ですが、
2コア間のメモリコピーをCPUに戻さずできないものかということなんですが、
やっぱりおかしくないってことなのでしょうか?
934デフォルトの名無しさん:2010/04/16(金) 07:23:08
>>933
2コアではなく、2GPUになる。
基本的に共有メモリではなく分散メモリ型になる。
なので、考え方としてはMPIを思えば理解しやすい。
たぶんやりたいことはインフィニバンドのRDMAのようなことなんだろうけど、
GTX295では無理だと思うよ。

ここにGTX295の分解写真がある。

http://www.4gamer.net/games/050/G005004/20090108044/screenshot.html?num=019

これを見ると、上のボードの左下に2枚のフレキケーブルがあるのがわかる。
これで2枚のボードが繋がっているわけ。たしかこのSLIってPCIEx1だった記憶がある。
(間違ってたらごめん)
つまり内部でSLI接続されているということ。なので2コアではなく2GPU。
おそらくフレキケーブルの一方がPCへの接続、もう一方がSLI接続。
これをみると上側のボードがマスターと思われるから、ひょっとしてGTX295は、
スレーブ側のGPUからCPUにデータを転送するのは時間がかかるのかもね。
935デフォルトの名無しさん:2010/04/16(金) 07:56:10
>>931
GTX295-GTX295間でのメモリのやりとり

ではなくて、

GTX295内でのメモリのやりとり(例えばSM間でのメモリのやりとり)

についてもしかしたら聞いているのか?
936デフォルトの名無しさん:2010/04/16(金) 08:00:37
わかりやすい解説乙
937デフォルトの名無しさん:2010/04/16(金) 08:26:03
>>935
どう読んでも最初からそのようにしか読めない。
2GPU搭載のボードの話だろ。

残念ながら俺は答えを持ち合わせていないが。
938932:2010/04/16(金) 08:35:43
>>934

リンク先の写真みました。
なるほど、内部は2枚のGPU構成だったのね。
それが、SLIケーブルを介してつながっているわけですか・・・。
CUDAってSLIケーブルを使用できないんですかね?(できるかと思ってた)
そうすると、2コアではなく2GPUになるのだということになり、
PCIeを介しない2コア間のメモリ転送はできないと理解できます。

>>935

ありがと。コア間のメモリ転送について聞きたかったので、
SMについての質問ではないんです。
939935:2010/04/16(金) 09:03:34
GTX295が1ボードSLIである事を誤解していた
申し訳ない
俺がGTX280を複数組み合わすときはSLI使わずにCPUに戻している
そんなわけで、もしSLIが使えて(性能向上するなら)俺も知りたい
940デフォルトの名無しさん:2010/04/16(金) 09:42:27
>>938
SLIって単に同期の信号と画像のストリームを流しているだけ何じゃないの?
Teslaでは使っていないよ。
http://www.systemworks.co.jp/images/t1000/td4.jpg
941デフォルトの名無しさん:2010/04/16(金) 10:04:20
SLIケーブルはそんな高速なデータ転送に使えるものではありません。

PCI-Expressデバイス同士の直接(ホストには行くかもしれないけどメモリには行かない)の
データ転送は原理的には可能ですが、対応するCUDAのAPI関数はありません。
942デフォルトの名無しさん:2010/04/16(金) 21:04:11
CPU、コアの増大、SIMD処理できる単位増加(128bit -> 256bit)などなど
GPU的になってきていて、GPUへの転送を要しない分、GPUより高速な演算が可能になったりするのでは??
943デフォルトの名無しさん:2010/04/16(金) 21:40:29
┐('〜`)┌ 何言ってるのかサッパリ
944デフォルトの名無しさん:2010/04/16(金) 22:54:47
>>942
CPU には必要だが GPU には必要の無い機能というのは常に存在する。
するとGPU の方が相対的にコストパフォーマンスが高い分野というのは、結局いつまでも無くならない(特にラスタライズ)。
逆に GPU に必要で CPU に必要ない処理もある。
また GPU では必要とされない処理というのは、相対的に CPU の得意分野だといえるので、その点では GPU に対するアドバンテージがある。
945デフォルトの名無しさん:2010/04/17(土) 00:40:57
計算機科学分野専用のアクセラレータとかないのん
946デフォルトの名無しさん:2010/04/17(土) 02:58:03
あるよ。
正確にはあったかな。
クリアスピードとかCellのギガアクセルとか。
Teslaもいってみたら専用アクセラレータじゃない?
947デフォルトの名無しさん:2010/04/17(土) 07:36:11
>>945
Cray XD1には、FPGA reconfigurable アクセラレータとかある。
Opteronのソケットに刺さるそうだ。PCI-eなんぞよりよほど速そうね。
FPGAとか、CPUが無駄に整数演算・論理演算しているところを
ものっそ小さく出来るのがいいよな。浮動小数点はダメだけど
948デフォルトの名無しさん:2010/04/17(土) 08:32:57
そこら辺があるのにGPUで高速化とかニュースに出てくるのは
コストがかかるとかもう最新のGPUのが速いとかそういうせいなのか
949デフォルトの名無しさん:2010/04/17(土) 08:41:52
そこいら辺りはかなり高いし、やっぱり数という意味でGPUにはかなわないから高くなってしまう。
さらに今となってはCPU単体とそれほどアドバンテージがなくなってきてしまった。
GPUもそうなりつつあるけどね。
950デフォルトの名無しさん:2010/04/17(土) 08:52:23
世知辛いのう
951デフォルトの名無しさん:2010/04/17(土) 09:01:04
「アクセラレータ」系で商売になってるとこってあるのかな。
(更新までの電気代含む)コストパフォーマンスで明らかにCPUorGPUに勝つるところ、というか。
952デフォルトの名無しさん:2010/04/17(土) 10:10:03
マキノ先生の関係者がやっているところがあるが
一般からの受注は厳しいだろうねきっと
953デフォルトの名無しさん:2010/04/17(土) 11:08:14
コスト度外視で一次キャッシュを1GBくらいにしたCPUとか出ないかな
954デフォルトの名無しさん:2010/04/17(土) 11:14:28
>>953
できたとしても遅くなるよ。
955デフォルトの名無しさん:2010/04/17(土) 11:15:51
じゃあキャッシュを無くして、
一次キャッシュやレジスタで使われるような記憶装置を
主記憶装置にするとか
956デフォルトの名無しさん:2010/04/17(土) 11:31:14
1000までに倍精度の報告が聞きたいです
957,,・´∀`・,,)っ-○○○:2010/04/17(土) 12:21:35
>>955
L1キャッシュに使われてるトランジスタは1ビットに6〜8トランジスタ必要
単純にFLIP-FLOPだけで650億トランジスタ必要だな。


















コストもだが消費電力が半端ないぞ
958デフォルトの名無しさん:2010/04/17(土) 13:27:11
アクセラレータ…絡みで
「SpursEngine×4搭載の映像処理カードが近日発売」
ttp://akiba-pc.watch.impress.co.jp/hotline/20100417/etc_leadtek.html
どうなんだろw PCIe×4てのが。でもPS3の2.5台分くらいの能力がある?
959デフォルトの名無しさん:2010/04/17(土) 13:49:30
>>958
SpursEngineってプロセッサの数とクロックが半分くらいじゃなかったっけ?
だから1機で1/4くらいだと思うんだけど。
960デフォルトの名無しさん:2010/04/17(土) 14:42:02
48*4=192gflopsやね
961デフォルトの名無しさん:2010/04/17(土) 15:04:27
>>960
すごい話なんだがすごいと思わなくなってる自分はおかしい
962デフォルトの名無しさん:2010/04/17(土) 15:14:33
SpursEngine×4で192gflopsね
963デフォルトの名無しさん:2010/04/17(土) 16:10:21
CUDAとDirectComputeどっちが速く動く?
964,,・´∀`・,,)っ-○○○:2010/04/17(土) 16:22:56
16コアすげーな
965デフォルトの名無しさん:2010/04/17(土) 16:46:15
まさに4x4
966デフォルトの名無しさん:2010/04/17(土) 17:18:11
http://akiba-pc.watch.impress.co.jp/hotline/20100417/image/sfld1.jpg
昨今のフルアーマービデオカードと比べると
めっさスカスカだなw
967デフォルトの名無しさん:2010/04/17(土) 17:27:35
っていうかSpursEngineのマルチチップ構成って
PPE無いから、SPEはCPUが制御する感じなのかね?
968942:2010/04/17(土) 19:21:55
>>944
ありがとうございます。
住み分けがなされそうですね。
969デフォルトの名無しさん:2010/04/18(日) 00:18:10
今週も決着せず来週に続く、みたいですね
970デフォルトの名無しさん:2010/04/18(日) 04:15:14
並列性を極めると、1ビットALUとかになるのかな。if文とか最小リソースになるw
doubleが必要なら、64個が組んで動くw
971デフォルトの名無しさん:2010/04/18(日) 07:32:09
コネクションマシン(Connection Machine)
972デフォルトの名無しさん:2010/04/18(日) 11:19:16
480の倍精度は意図的に速度が控えられているけど、floatを2つ使ってdoubleの精度を出すアルゴリズムはないのでしょうか?

973デフォルトの名無しさん:2010/04/18(日) 11:23:03
英語のフォーラムでもじつは全部ソフトじゃねとか蒟蒻問答してる
974デフォルトの名無しさん:2010/04/18(日) 11:32:44
doubleとfloatの速度を比較したベンチはどこかにないの?
975デフォルトの名無しさん:2010/04/18(日) 12:03:35
そういえばCM-2も単精度が2倍速いのでわざわざそれを自慢してた
976デフォルトの名無しさん:2010/04/18(日) 12:26:57
倍精度が必要ならAMDのマニクール買ったほうがはるかにコスパがいいな
977デフォルトの名無しさん:2010/04/18(日) 13:06:20
CUDAの方が簡単に性能が出るプログラムもあります
978デフォルトの名無しさん:2010/04/18(日) 14:09:07
MagnyCoursのコスパがよいはずがないだろう・・・
979デフォルトの名無しさん:2010/04/18(日) 14:31:09
アプリによってはマニクールの方がコスパ良い可能性は十分にあるとおもうぞ
980デフォルトの名無しさん:2010/04/18(日) 14:34:00
>>972
取り合えずIEEE754を調べて見よう。
多倍長も有るけど、それだと整数だしな。
981デフォルトの名無しさん:2010/04/18(日) 14:37:53
>>979
Teslaと比べるならあるかもな。
8コアの安い奴のQuadでならこっちの方がなんでもできて速いだろう。
982デフォルトの名無しさん:2010/04/18(日) 14:46:14
>>970
いやいや極めるならVLIWでしょう。
8192bitのVLIWとか見てみたいものだ!
983デフォルトの名無しさん:2010/04/18(日) 17:16:06
>>977
tesla1枚買う金で、48コア(4CPU)マニクールが買えるけど
それに勝てるの?
984デフォルトの名無しさん:2010/04/18(日) 17:28:11
そう言って売り込んでみれば?
無理だろうけど
985デフォルトの名無しさん:2010/04/18(日) 17:31:57
利害関係者でもないのに売りこみなんてしないよ
でも事実でしょ
986デフォルトの名無しさん:2010/04/18(日) 17:33:33
どういう事実?
987デフォルトの名無しさん:2010/04/18(日) 17:34:54
CPUのみの値段で比較?
988デフォルトの名無しさん:2010/04/18(日) 17:40:17
teslaよりマニクールのほうが倍精度で性能を比較すれば
ずっとリーズナブルだっていう事実
989デフォルトの名無しさん:2010/04/18(日) 17:40:57
数字で出してよ
990デフォルトの名無しさん:2010/04/18(日) 17:43:13
>>983 はTeslaとマニクールをそれぞれ幾らで買うつもりなのだろうか・・・。
991デフォルトの名無しさん:2010/04/18(日) 17:43:15
面倒だから自分で詳細に出す気はないよ
信じたくないなら信じてもらえなくていいし
992デフォルトの名無しさん:2010/04/18(日) 17:44:50
>>990
マニクールは8コアなら3,4万で買えるけど12コアのマニクールは
10万ぐらいしたはず
993デフォルトの名無しさん:2010/04/18(日) 17:44:56
おいおい、比較したんだろ?
994デフォルトの名無しさん:2010/04/18(日) 17:54:51
Opteron 6164 HEは約8万円ぐらいで販売されている
4使っても32万円ぐらい
今度出るtesla C2050の価格と同じくらい
995デフォルトの名無しさん:2010/04/18(日) 18:06:57
6168
744*4=2976
1.9*12*4*2*2=364.8

6176se
1386*4=5544
2.3*12*4*2*2=441.6

c2050
2499
1.215*448=544.3
996デフォルトの名無しさん:2010/04/18(日) 18:08:56
で、何を比較したんだ?
997デフォルトの名無しさん:2010/04/18(日) 18:10:02
そもそもOpteronって倍精度積和算1サイクルでできるのか
998デフォルトの名無しさん:2010/04/18(日) 18:10:53
>>996
プログラミングのしやすさまで考慮すれば圧倒的にCPUのみの構成
のほうがいいだろ

軽い気持ちで書きこんで悪かったよ、GPU信者さん
999デフォルトの名無しさん:2010/04/18(日) 18:11:33
>>997
最近のCPUならできる
1000デフォルトの名無しさん:2010/04/18(日) 18:12:17
1000げと
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。