- 1 名前:デフォルトの名無しさん mailto:sage [2007/09/17(月) 14:54:28 ]
- 本家
developer.nvidia.com/object/cuda.html
- 968 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 17:28:20 ]
- お前はあほかw
- 969 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 17:49:31 ]
- タイムアウトになる原因はそのでかいループのせい
せいぜいミリ秒単位でタイムアウトを判断してるから ミリ秒以下で応答しないようなカーネルは絶対に書いては駄目 cudaThreadsSynchronizeは発行したカーネルがすべて終了するのを待つだけ グローバルメモリは読み書きは出来るが前後は保障されないので 1スレッドが書き込みする箇所は限定する必要がある 共有メモリを使って他のスレッドが書き込んだ内容を参照して利用する場合に カーネル内部で___syncthreadを使う これが本来の同期の意味
- 970 名前:デフォルトの名無しさん [2009/01/19(月) 19:44:51 ]
- >>952の話
>>968のように言われるのは分かって書いてみたんだけど NVIDIA_CUDA_Programming_Guide_2.0.pdfのp34-35のようなコードが マニュアルに書いてあるのがおかしいと思う。 __global__ void myKernel(float* devPtr, int pitch){} そもそもこんな書き方じたいが書けるけど間違えな使い方だと。 この書き方しているとこにやらないようにこの部分に×印つけてほしい。 あとはコンパイラがえらくなったらfor多重ループをうまく処理する アセンブラぐらい作ってほしい。(OpenMPでパラレルfor指定すると#のタグだけ でプロセッサ使ってきって高速化なるんだけどね。そこまでぐらい将来 的にはしてほしい。)
- 971 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 20:53:12 ]
- 文句言っても何にもならない。
そう悟る時がくるまで気長に待ちましょうよ。 そうすれば成長しまっせ。
- 972 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 23:38:15 ]
- それよりも先ず、日本語を何とかしてくれ。
>間違えな使い方 >しているとこにやらないように >プロセッサ使ってきって
- 973 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 23:41:25 ]
- そのサンプルはあくまでもcudaMallocPitch()がどういう風にメモリを確保するかの説明だからなぁ。
きっとライターは、まさかそのまま動かそうとされるは思っちゃいまいよ。
- 974 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 02:02:49 ]
- ところでドライバ180なんだが2Dモードだかなんだかで消費電力抑える為に
ドライバが自動的にクロックを下げて3Dゲーム動作させると上がる仕様なんだけど CUDA実行しても上がらないぞw
- 975 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 02:08:30 ]
- ドライバを替えてくださいw
つーか、それって169.09のときに指摘されて直したんじゃなかったのか?>NVIDIA
- 976 名前:デフォルトの名無しさん [2009/01/20(火) 03:40:32 ]
- d_a[0][blockIdx.x][blockIdx.y][threadIdx.x]
って使おうとしたら"expression must have arithmetic or enum type" ってでたんだけど何がいけないんすか? 教えてください。
- 977 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 07:58:55 ]
- >>976
d_aがポインタなら、途中で解決できない状況があるのかも。
- 978 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 08:41:39 ]
- 共有メモリで構造体を使いたいのだけど
例えば struct data { int a; char b; } func<<<dim3(), dim3(), SIZE * sizeof(data)>>>(); __global__ kernel(){ __shared__ data d[SIZE]; } こんな感じでやるとCUDAとC側のパック構造が違うせいだと思うけどおかしくなる どうやれば出来るの?
- 979 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 08:59:56 ]
- パックが違うのだけが理由なら、
struct data {int a; char b; char dummy[3];}とでもしておけばいいじゃん。
- 980 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 13:53:14 ]
- ただでさえ少ない共有メモリをそんな無駄に使えない
- 981 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 20:44:37 ]
- >>977
世の中夜勤帰りで朝から寝てる人だっているんだよ? 引っ越しの時ちゃんと挨拶行った? 顔合わせたら軽く会話するとかしてちゃんとコンタクト取り続けてる? 日頃からそういうコミニュケーションが取れてればいつ洗濯機を回していいのか いつ静かにしなければならないのか 迷惑を掛けないように生活出来るはずなんだが
- 982 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 23:36:58 ]
- >>980
マジで言っているのなら、設計が悪い。 どうしてもパディングしたくないくらい逼迫しているなら、int一個を切り分けて3バイトと1バイトで使え。
- 983 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 00:22:25 ]
- 共有メモリが制限されてるのに無駄な領域作って
ほとんどをグローバルメモリに追いやる方がよっぽど設計が悪いでしょw
- 984 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 00:25:51 ]
- GPUのメモリレイテンシって12とかの世界だぞ
CPU用のDDR2で5だからな intを内部でcharとして扱うプロセスを考慮しても共有メモリ使った方が早いんだよ
- 985 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 00:35:27 ]
- CUDAで共有メモリを使うこと自体、無駄な同期待ちが発生するから避けたいところだと思うが。
coaxschedな読み書きができるなら、共有メモリより遅くないぞw
- 986 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 02:24:30 ]
- >>975
(エンバグの)歴史は繰り返す。
- 987 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 12:18:47 ]
- >>CUDAで共有メモリを使うこと自体、無駄な同期待ちが発生するから避けたいところだと思うが。
え? 共有メモリってCPUで言う所のただのレジスタみたいなもんで同期は指定しないと発生しないと思うけど ところでローカル変数をすべて共有メモリに置いた場合のが早いんだけど ローカル変数ってデバイス上のメモリに確保されるだけで共有メモリより遅いレベルのメモリを使ってるっぽいね
- 988 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 18:11:15 ]
- あー、表現が悪かった。共有メモリを共有目的に使うと同期を取る必要が出てくるから同期待ちが発生するということ。
レジスタみたいに使うのなら確かに関係なかったね。 で、レジスタよりも速いかどうかについてはptx見てみたいところ。
- 989 名前:,,・´∀`・,,)っ-○◎● mailto:sage [2009/01/21(水) 18:18:05 ]
- 見た感じリードレイテンシはこれくらい
レジスタ>>Const Memory>Shared Memory>>>>DRAM
|

|