【GPGPU】NVIDIA CUDA質問スレッド

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
2デフォルトの名無しさん:2007/09/17(月) 14:55:24
グプグプー
3デフォルトの名無しさん:2007/09/17(月) 21:03:53
>>1
GPGPUスレと統合じゃだめなんか?

http://pc11.2ch.net/test/read.cgi/tech/1188374938/
4デフォルトの名無しさん:2007/09/18(火) 10:06:32
おお、いつの間にこんなスレが。一応あっちで回答しているけどどうしようか。
5デフォルトの名無しさん:2007/09/19(水) 14:34:55
削除依頼出しとけ
6デフォルトの名無しさん:2007/09/21(金) 05:49:47
WindowsのCUDAとLinuxのCUDAで書式に何か違いはありますか?
7デフォルトの名無しさん:2007/09/21(金) 12:09:20
削除依頼出しとけ
8デフォルトの名無しさん:2007/09/21(金) 15:15:23
三角関数や指数関数はないの?
9デフォルトの名無しさん:2007/09/21(金) 15:25:30
削除依頼出しとけ
104:2007/09/21(金) 15:59:09
>>6
基本的に同一。但し、Win用nvcc(コンパイラ)では64bit版にはできないこととオブジェクトモジュールがMS仕様なことに注意。
更に、nvccはgccで実装されているので、C++のnewやvectorはそのままではリンクできなくなってしまうことにも要注意。

>>8
math.hにある、float系の関数は大抵使えると思っていい。エミュレーションモードなら全部使えた筈。
また、sin(), cos()などの一部の関数は組み込み命令(intrinsic)版が使えるので更に高速。
実際の例は、GPGPUスレ参照で。
http://pc11.2ch.net/test/read.cgi/tech/1188374938/71-72
11デフォルトの名無しさん:2007/09/21(金) 16:19:38
CUDAとかって何らかの標準化の動きはあるの?
12デフォルトの名無しさん:2007/09/22(土) 14:43:16
笛吹けど踊らず
# まぁ、笛吹いている会社の中でも踊らない連中がいるみたいだし
13デフォルトの名無しさん:2007/09/29(土) 08:08:41
CUDAは無料ですか??
14デフォルトの名無しさん:2007/09/29(土) 09:38:17
ソフトは無料、ハードは有料なんじゃね
15デフォルトの名無しさん:2007/09/29(土) 22:08:38
CUDAなんてハードはありません。
16デフォルトの名無しさん:2007/09/29(土) 22:10:13
処で、テスラc870ってQuadroFXの一番上の奴とどこが違うんだ?
17デフォルトの名無しさん:2007/09/29(土) 23:03:54
>>15
おマイ馬鹿か、環境の事に決まってるだろ
18デフォルトの名無しさん:2007/09/30(日) 02:33:09
Compute Unified Device Architecture
        ~~~~~~~
19デフォルトの名無しさん:2007/09/30(日) 14:58:40
CompUte Driver Architecture
204:2007/10/01(月) 12:05:40
ちょっとメモ。
device側メモリは共有メモリであろうとグローバルメモリであろうと、
並列動作で一箇所に書き込もうとすると(当然の如く)破綻する。
従って、ヒストグラム作成のようなロジックはそのままでは実装できない。
生データをソートしてから集計するロジックを書いてみたが、さてこいつをどう並列化するか。
--
__global__ void devSum(int begin, int end, int idx, float2 * tmp)
{
int ic = begin;
float2 sum = make_float2(tmp[ic].x, tmp[ic].y);
for (++ic; ic < end; ++ic) {
sum.x += tmp[ic].x;
sum.y += tmp[ic].y;
}
ar[idx] = sum.x;
ai[idx] = sum.y;
}
--
単純に考えると開始位置を検索しなければならないが、それ自体にコストが掛かりそうだ。
21デフォルトの名無しさん:2007/10/12(金) 18:56:43
>>20みたいな処理って数値演算よりデータ転送の比重が多すぎて、
並列化させる旨みは非常に少ないと思うんだけどどうなのよ。
本家のフォーラムでいわゆるセマフォを実装して集計処理やらせようとしてる人がいたけど、
そういう問題をCUDAでやる事自体がそもそも間違っとる、みたいに言われてた。
かく言う自分も似たような事しようとしてたけどパフォーマンス出ないんで諦めて、
問題の分割方法から見直したら上手くいったりした。
22デフォルトの名無しさん:2007/10/12(金) 18:57:14
>>20みたいな処理って数値演算よりデータ転送の比重が多すぎて、
並列化させる旨みは非常に少ないと思うんだけどどうなのよ。
本家のフォーラムでいわゆるセマフォを実装して集計処理やらせようとしてる人がいたけど、
そういう問題をCUDAでやる事自体がそもそも間違っとる、みたいに言われてた。
かく言う自分も似たような事しようとしてたけどパフォーマンス出ないんで諦めて、
問題の分割方法から見直したら上手くいったりした。
23デフォルトの名無しさん:2007/10/12(金) 18:58:08
二重orz
244:2007/10/12(金) 19:29:53
>>21
>20の処理は、最初に定数テーブルを仕込んでおいて幾つかパラメータを渡して計算させるのがメイン。
>20に書いているのは最後の集計部なんだけど、結果はarとaiに入るのでそれを転送するだけ。
集計をGPUにやらせられないとなるとtmpを転送しなければならないので、それをなんとかしたかったわけ。
で、未だその後修正掛けていないけど、begin, endのペアをidxの値の分だけを定数テーブルに
仕込んで置けることが判ったからなんとかなりそう。そうすればidxの値の分だけ並列に走らせられることだし。
25デフォルトの名無しさん:2007/10/15(月) 12:09:23
>>24
状況はわかったけど最後の方で言ってる意味が良くわからん…俺の頭がヘタレなのか。

今のとこ、並列で集計処理するのに一番早そうかなって思ってるのはデータを半分ずつ加算してく方法。
例えば処理したいデータがnコなら、n/2コのスレッドで2コずつデータ加算。後はリカーシブにやる。
(めんどいからとりあえずnは偶数としてね)
これならlog_2 nのオーダーで集計出来んじゃね?ってかんじ。

実装したことないがスレッド数が変わるのが厄介かな…今は
if(tx==0) {
 for(i=0;i<BLOCKSIZE;i++)
  sum+=data[i];
}
みたいに横着してる。他で十分高速化してるんでとりあえず後回し中。
26デフォルトの名無しさん:2007/10/16(火) 23:58:44
GPUでテクスチャの全てのピクセル値の合計を求めたいってこと?
1x1サイズのミップマップ作って、ピクセル数を掛けるのはどう?
速いかどうかは知らんけど。
27デフォルトの名無しさん:2007/10/17(水) 06:58:08
opensuse 10.3でCUDAは動く?
28デフォルトの名無しさん:2007/10/19(金) 10:01:25
Linuxサポートしてるから動くんじゃね?
29デフォルトの名無しさん:2007/10/22(月) 10:32:10
>>27
ドライバが載らなくても取り敢えずエミュレータは動くでしょうね。
つーか、本家に10.1用と10.2用は置いてあるから試してみては?
ttp://developer.nvidia.com/object/cuda.html
30デフォルトの名無しさん:2007/11/20(火) 15:20:50
>>27
もしかしたら、標準でインストールされるgccのバージョンが違う所為で動かないかも知れない。
その場合、10.2にインストールされているバージョンのgccをインストールしておけば大丈夫。
# 要はnvccが内部でgccを使っているから、gccのバージョンに依存していると。
# ドライバはOKだった筈。
31デフォルトの名無しさん:2007/11/25(日) 09:41:58
GeForce 8400GSの安いカードでもCUDAを試すことはできますか?
32デフォルトの名無しさん:2007/11/25(日) 12:05:37
>>31
ドキュメントには書かれていないので微妙。
時期的には、CUDA1.0に間に合うタイミングで出たと思うけど……
# 1.0のドキュメントに書かれているのはこれら。
--
GeForce 8800 Ultra
GeForce 8800 GTX
GeForce 8800 GTS
GeForce 8600 GTS
GeForce 8600 GT
GeForce 8500 GT
Quadro FX 5600
Quadro FX 4600
Tesla C870
Tesla D870
Tesla S870
--
# 1.1betaのリリースノートには8800GTに対応とある。
33デフォルトの名無しさん:2007/11/25(日) 18:24:52
>>31
8800を買うのが無難
34デフォルトの名無しさん:2007/11/25(日) 20:07:13
安く済ませるなら、(消費電力の少ない)8600GTもお勧め。
第2世代(と思われる)8800GTは割とパフォーマンスがよさそうだけどね。
35デフォルトの名無しさん:2007/11/25(日) 20:07:50
>>31
公式にはサポートされていない。
でも、ノートパソコンで動いたという人もいるくらいだから、動く可能性がないわけではないと思う
36デフォルトの名無しさん:2007/11/28(水) 01:39:57
8400Mは対応してたはずだけど、普通の8400の方は対応していないんだよね
自作板でサンプルが動いたという報告があったような気みするけど、
対応していない製品を使うのは心配だよね
37デフォルトの名無しさん:2007/11/29(木) 23:46:49
8600買ってきたー
試したいのだけど、まず取っ掛かりはどこからいけばいいですか><
38デフォルトの名無しさん:2007/11/30(金) 00:20:36
>>37
>29にある本家から一式拾って、ドライバとツールキットとSDKを入れて、
サンプル一式をビルドして動かしてみるよろし。
39デフォルトの名無しさん:2007/12/05(水) 18:31:17
64bit 版 ubuntu7.10にインストールしたいのですが、どれをダウンロードすればよいのでしょうか?
40デフォルトの名無しさん:2007/12/05(水) 18:48:07
ttp://developer.nvidia.com/object/cuda.htmlかttp://developer.nvidia.com/object/cuda_1_1_beta.htmlから
x86-64のDriverとx86-64のToolKitとSDKを拾えばいいとして。
ToolKitはどれが使えるかは不明。nvccがgccを使うから、インストールの状況によるので単純じゃない模様。
41デフォルトの名無しさん:2007/12/07(金) 08:32:31
ubuntu版きてるーーーー
42デフォルトの名無しさん:2007/12/07(金) 12:33:05
7.04ってなんだYO
43デフォルトの名無しさん:2007/12/07(金) 13:31:11
タイムリーなんだか間が悪いんだかw
44デフォルトの名無しさん:2007/12/08(土) 02:28:34
NECのVALUESTARを使ってるんですが
nVIDIAをインストールしようとすると

NVIDIA setupプログラムは、現在のハードウェアと互換性のあるドライバ
を見つけることができませんでした。

と表示され、インストールができません。
何が原因なんでしょう?
OSはVistaです。
45デフォルトの名無しさん:2007/12/08(土) 08:33:55
>>44
NECのVALUESTARなんてどうでもいい情報よりもグラボの情報だせよん
46デフォルトの名無しさん:2007/12/08(土) 12:14:51
なぜココで聞く。
ハードウェアスレに聞け
47デフォルトの名無しさん:2007/12/10(月) 13:04:06
>>44
そもそもVista対応のCUDA対応ドライバがありません。
48デフォルトの名無しさん:2007/12/13(木) 00:22:06
>>44
>nVIDIAをインストールしようとすると
って時点で意味がわからんのだが、
とりあえずデバイスエミュレータ(-deviceemu)でどうよ?
49sage:2007/12/15(土) 19:52:50
2次元配列を使用したいのですが
以下のサンプルコードを参考にしてみましたがうまく使えません
よろしければご教示お願いします

/* 2D array test */
#include<stdio.h>
#include<cutil.h>
#define width 4
#define height 4

// device code
__global__ void myKernel(float* devPtr, int pitch)
{
for (int r = 0; r < height; ++r) {
float* row = (float*)((char*)devPtr + r * pitch);
for (int c = 0; c < width; ++c) {
float element = row[c];
}
}
devPtr[1][1]=0.0;
}


int main(){
float* devPtr,an;
size_t pitch;
cudaMallocPitch((void**)&devPtr, &pitch,
width * sizeof(float), height);
myKernel<<<100, 512>>>(devPtr, pitch);
CUDA_SAFE_CALL(cudaMemcpy2D((void**)an,pitch,(void**)&devPtr,pitch,4*sizeof(float),4,cudaMemcpyDeviceToHost));
5049:2007/12/17(月) 15:07:07
自己解決しました!
5149:2007/12/17(月) 16:13:39
勘違いでした
誰かヘルプ。。。
52デフォルトの名無しさん:2007/12/17(月) 18:50:43
何がどう巧くいってないと判断したのかよく分かりませんが。
cudaMallocPitch(), cudaMemcpy2D()じゃなくて、cudaMalloc(), cudaMemcpy()では巧くいったの?
それと、テストしたソースは丸ごとコピペするか、どっかにアプロドして欲しい。
53デフォルトの名無しさん:2007/12/18(火) 11:25:32
>アプロド
なんか可愛いw
54デフォルトの名無しさん:2007/12/18(火) 12:07:39
>>49
>devPtr[1][1]=0.0;
float * devPtrなんだから、エラーになる。

>CUDA_SAFE_CALL(cudaMemcpy2D((void**)an,pitch,(void**)&devPtr,pitch,4*sizeof(float),4,cudaMemcpyDeviceToHost));
cudaMemcpy2D()で転送する先のanが初期化されていないから絶対にまともにコピーできない。

サンプルをよっぽど誤読しているのか、Cの経験が全く足りていないのか、いずれにしても阿呆過ぎる。
55デフォルトの名無しさん:2007/12/18(火) 12:14:10
>>49
>float* devPtr,an;
このanは只のfloat型。

cudaMemcpy2D()の第1,3パラメータのキャストもおかしい。
もしサンプルにそう書かれていたのなら、そのサンプルがタコ。
56デフォルトの名無しさん:2007/12/19(水) 13:38:10
処で、サイトが更新されて、CUDA ZONEって目立つようになったね。
1.1は未だbetaなのか正式リリースなのか、中味は変わっていないみたいだけど。
ついでに、使えるチップの一覧も更新されているので転記。
--
GeForce Tesla Quadro
8800 Ultra C870 FX 5600
8800 GTX D870 FX 4600
8800 GTS S870 FX 1700
8800 GT FX 570
8600 GTS FX 370
8600 GT NVS 290
8500 GT FX 1600M
8400 GS FX 570M
8700M GT FX 360M
8600M GT Quadro Plex 1000 Model IV
8600M GS Quadro Plex 1000 Model S4
8400M GT NVS 320M
8400M GS NVS 140M
8400M G NVS 135M
NVS 130M
5756:2007/12/19(水) 13:56:13
表をそのまま貼ったから見難くなったのは勘弁。
補足しておくと、FX/Plex/NVSはどれもQuadroシリーズ(非OEM)ね。
細かく見てたら、8800GTが追加された他に8800GTSに512MBが追加されている。
しかも、クロックが既存の8800GTSよりも速いだけでなくShaderClockでは最速に。
MemoryInterfaceが512bitだから、8800GTSというより8800GTの系列かしら。
まぁこれで、旧8800GTS(640MB/320MB)は消える方向なんでしょうね。
58デフォルトの名無しさん:2007/12/22(土) 15:09:32
ほほー
廉価版でCUDA試してみたいだけの奴は8400あたりでもOKということか。

ありがたやありがたや
59デフォルトの名無しさん:2007/12/31(月) 18:53:34
CUDAを使用できるGPUのうち、
GeForceとQUADROのどちらの方がCUDAに最適なのでしょうか?
60デフォルトの名無しさん:2008/01/03(木) 00:07:49
>>59
「最適」の基準によります。
入手性、価格、バリエーションではGeForceシリーズに文句なしで軍配が上がりますが、
個別の性能はそれぞれ異なりますので。
因みに、TeslaはQuadroFX5600(-アナログ回路)相当だそうです。
あー、QuadroPlexを買える待遇なら、違う意味で最適かもしれません。
61デフォルトの名無しさん:2008/01/07(月) 12:11:34
処で、8800GTXでどこまで速度が出るのか実測してみた。
単純な実数の足し算をループで回しただけなんだが、約43GFlops出た。

一方、ShaderClockは1350MHz、プロセッサ数は128、ということなので計算上は(1クロック1演算なら)172.8GFLOPSとなる。
命令セット上は、積和が1クロックで実行できるから2倍して約350GFLOPSだからカタログスペックはこの値なのだろう。
実際には、ループを構成するには実数の足し算の他に整数加算、整数比較、条件ジャンプの3クロックが必要になる。
従って、約43GFLOPSとなって実測値と見事に一致した。

というわけで、(メモリアクセスが無視できるなら)アセンブリ(ptx)出力から所要時間を割り出すことができる模様。
問題は、メモリアクセスが絡むとどれだけ遅くなるかで、こちらの方は今後調査の予定。
62デフォルトの名無しさん:2008/01/07(月) 21:38:50
ニーモニックて公開されてるんだっけ? or 固定長?
63デフォルトの名無しさん:2008/01/07(月) 23:24:57
5秒制限とかあるらしいけど
これどうやって回避するんだろう
64デフォルトの名無しさん:2008/01/07(月) 23:36:08
>>62
ptx出力を睨めっこすれば大体当たりがつく。どっかで公開されてるかも知れんが。

>>63
5秒も計算させたまま帰ってこないような組み方すると、どうせ遅くなるから余り気にならない。
単純なループだけならXeonの方が速いからね。
65デフォルトの名無しさん:2008/01/10(木) 15:13:03
>>61
おつー

これは目安に使えそうだね
66デフォルトの名無しさん:2008/01/11(金) 11:30:09
ttp://www.nvidia.com/object/cuda_home.html

CUDAのサイトリニューアルされてるね。
相変わらずfor Vistaはまだだけど。
67デフォルトの名無しさん:2008/01/11(金) 14:40:01
>>66
一応>56で指摘済み。

処で、cufftを使ってみた。
SDKのサンプル(convolutionFFT2D)では100MPix/sの処理速度があるような実行結果が得られたけれど、
実際に試してみたら4096x4096の大きな画像を使っても10MPix/sしか出ない。
どうも、オーバヘッドが大きくて速度が出にくいみたいだ。
まぁ、サンプルと違ってテストしたコードは「プラン作成」「メモリ確保」「メモリ転送」「FFT実行」
「メモリ転送」「メモリ破棄」「プラン破棄」を全部実行しているからだとは思うけど。
と言うことで、来週辺りは実際のプログラムに組み込んだ形でテストしてみる羽目になりそうだ。

そうそう、8800GTXをCUDA1.0で動かした場合と8800GTをCUDA1.1で動かした場合で
convolutionFFT2Dの所要時間が殆ど変わらなかった。GPUの性能差を埋める程度にはCUDA1.1で改善されたのかな?
6866:2008/01/11(金) 15:23:14
ずっと旧トップページをブクマしてて今日やっと転送されるようになったので
気づいてなかったスマンコ

1.0になってから遊んでいなかったので久しぶりに遊んでみよう。
69デフォルトの名無しさん:2008/01/11(金) 22:18:42
>>67
メモリ転送は、PCI-Expressの性能で上限があるはず。
たぶんこれがかなり時間食ってると思う。
4K×4kは画像なんでしょうか。大きいですね。
70デフォルトの名無しさん:2008/01/12(土) 00:56:15
PCIe 1.1と2.0でどれぐらい差が出るのか気になりますね。

3DMarkのベンチマークやゲームではほとんど差が無いみたいですが
CUDAだとやはりそのあたりがボトルネックになる場合も出てくるでしょうかね。

またメモリ容量に依存する場合もやはり多いのでしょうか?
7167:2008/01/12(土) 06:35:30
>>69
FFT解析絡みのことをやっているので、周波数空間像を拡げてから逆FFTなんてことをしばしば。
まぁ、4096x4096は単にテストするのが目的でしたが。

>>70
未だPCIe2を試せる環境がないからなんとも言えませんが、演算の種類によっては影響出るでしょうね。
私のところのプロジェクトでは寧ろ、GPUとCPUを巧く並行動作できるかどうかの方が影響大きいのですが。
72デフォルトの名無しさん:2008/01/18(金) 11:50:14
むぅ、周波数合成みたいなロジックをCUDAに移植したんだが、余り速度が出ない。
元のソースが三角関数テーブルを使っていたのでメモリアクセスが足を引っ張っているのかと思って
__sincosf()を使ってみたが、今度は何故か実行ごとの所要時間のばらつきが大きい。
速いときはXeon並の速度になるのに遅いときは3倍くらい時間が掛かる。
はてさて、超越関数ユニットの数が少ないのだろうか……
73デフォルトの名無しさん:2008/01/18(金) 15:08:32
超越関数は級数近似と思われ
see /cuda/include/math_functions.h
74デフォルトの名無しさん:2008/01/18(金) 17:05:57
いえいえ、ちゃんとニモニックもあるのですよ。そっちを使うとドキュメントに拠れば32クロックだそうで。
但し、そいつが「To issue one instruction for a warp,」とあるからぶつかるのかなと。
75デフォルトの名無しさん:2008/01/21(月) 00:26:07
8800前後の機種の日本での売れ行きがかなり芳しくないようだがこれは何を意味するのだろう.本国でのアメリカでは使用例(論文)が着実に出つつあるから,なんだかそいつらの為だけに開発されてる感じじゃない??
76デフォルトの名無しさん:2008/01/22(火) 23:13:36
8800系って、日本ではNEETゲーマーが買い漁るから
1$=200円くらいのボッタ栗値段が付いてしまって、
貧乏ラボじゃ買えん罠。箱もヲタ臭くてボスの目
が気になる。
77デフォルトの名無しさん:2008/01/22(火) 23:24:09
つ [玄人志向]
7875:2008/01/23(水) 00:48:46
そうか,研究者の間であまり大量に出回っていないと思ったが,そういう事だったのか.>76
国内で一番CUDA使いこなしているのはどこのチームだろう?
79デフォルトの名無しさん:2008/01/23(水) 01:17:56
まぁ、CUDAでXeonに勝つ速度を叩き出している漏れが一番だねw
80デフォルトの名無しさん:2008/01/23(水) 12:23:21
なるほど、確かに>79が一番阿呆かも知れない。

大してネタがないのだけれど、保守代わりにメモage。
--
※nvccでコンパイル時に、制限に注意しつつ-use_fast_mathを指定する方がいい。
・三角関数や対数などの超越関数は、>74が指摘したようなニモニック(sin.f32など)を使ったコードを出力するようになる。
・また、巨大な数(数字忘れた)で割る割り算の精度を確保する為の回避ロジック(分母分子とも0.25を掛ける)も省略されるようになる。
# つまり、割り算(dif.f32)には制限があると言うこと。
・但し、冪乗関数はeの冪も10の冪も2の冪のニモニック(ep2.f32)を使い、それに定数を掛けるようだ。

※__sincosf()は最適化を阻害するので、__sin(), __cos()を使って実装した方が良さそう。
# __sincosf()はどの道sin.f32とcos.f32を別々に使うので、別々にしても遅くなることはない。
--
あとで整理してどっかに上げとくかな。
8180:2008/01/23(水) 16:03:38
>80を一部訂正。
・但し、冪乗関数はexpf()は1.4427を、exp10f()は3.3219を、それぞれ掛けて(mul.f32)からex2.f32を使うようだ。
82デフォルトの名無しさん:2008/01/28(月) 23:07:10
すみません。質問です。
3次元の格子上の各点で計算をするプログラムを書きたいのですが、
各点のインデックスを作るとき、たとえば以下のように書くのは間違いですか?

CUDAで3次元格子上のシミュレーションをやるときに使う一般的な方法が
ありましたら、教えていただければさいわいです。

#define IMAX 64
#define JMAX 64
#define KMAX 64
#define IDX(i,j,k) ((k)*IMAX*JMAX+(j)*IMAX+(i))
float *dVel;
int main() {
cudaMallocArray(dVel,0,sizeof(float)*IMAX*JMAX*KMAX);
初期化&デバイスにデータ転送の関数();
dim3 grid(IMAX-2,JMAX-2,1);
dim3 thread(KMAX-2,1,1);
 while(1) {
問題のfunction<<<grid,thread>>>(dVel);
if(収束) break;
}
}
__global__
void 問題のfunction(float *dVel) {
int idx = blockIdx.x+1; int idy = blockIdx.y+1;int idz = threadIdx.x+1;
float cx = (dVel[IDX(i+1,j,k)]+dVel[IDX(i-1,j,k)])*0.5;
float cy = (dVel[IDX(i,j+1,k)]+dVel[IDX(i,j-1,k)])*0.5;
float cz = (dVel[IDX(i,j,k+1)]+dVel[IDX(i,j,k-1)])*0.5;//こんな感じの計算がやりたいです
この後、四則演算が続く。
}
83デフォルトの名無しさん:2008/01/29(火) 04:47:39
3次元格子は扱っていないから一般的な方法は知らん。
で、>82で流れはあっていそうだけど効率は悪いと思うよ。
ブロックごとにdVelをSharedにキャッシュした方がいいかも知れない。
# まぁ、動くものを作る方が先だけど。
84デフォルトの名無しさん:2008/01/29(火) 09:10:24
>>83
ありがとうございます
吐き出される数値を見て、ぜんぜん計算されてなさそうなので、
心配をしていました。

効率悪いことは覚悟で、まずは動くものにしてみます
85デフォルトの名無しさん:2008/01/29(火) 09:43:00
>82のコードは断片だと思うから敢えて指摘しなかったけど、一応注意点を列挙。
・(少なくとも安定するまでは)CUT_SAFE_CALL()でAPIを括っておいた方がデバッグしやすい。
# エラーチェックを毎回書くのも面倒でしょ。
・cudaMallocArray()は扱いが難しいので、cudaMalloc()にした方が楽では?
86デフォルトの名無しさん:2008/01/29(火) 12:56:30
そうそう、忘れてた。
初期の段階ならエミュレーションで動かした方がデバッグプリントできるから楽かも。
87デフォルトの名無しさん:2008/01/29(火) 13:30:21
>>85,86
どうも、アドバイス感謝です。
なんか、動かすとOSリセットかかる凶悪なプログラムに育ちました
もちろん実行はユーザ権限でやってるのに、そんなことできるんですね

エミュレーションでやってみます
88デフォルトの名無しさん:2008/01/29(火) 13:40:59
そうなんだよねえ。
昔ビデオカードのドライバ無理矢理作らされてひどい目にあった。
89デフォルトの名無しさん:2008/01/29(火) 14:06:29
>>87
それはあれだ、CPUでいうところのSegmentation Faultだと思う。
明後日の場所をアクセスすると、そうなりがち。
それと、XWindow環境なら5秒ルールにも注意。
# 仕事なら、移植作業を特価で承りますゼw
9087:2008/01/29(火) 19:04:21
コンパイルされたバイナリを実行しないで、GPU使ってるか、エミュレーションしてるか見分ける
方法ってありますか。nvccに-deviceemuつけてコンパイルしてるつもりだけど、どうやら
まだデバイス上で動いているみたいなんです。

まあ、おかげさまでOSは落ちずにXだけ落ちるようになりましたがw

>>89
学業の一部ですので、コツコツ勉強しながら自力でなんとかやらせていただきます
91デフォルトの名無しさん:2008/01/29(火) 21:31:21
XWindow環境なら5秒ルールに引っかかってしまうのか
知らなかった
92デフォルトの名無しさん:2008/01/30(水) 08:07:06
CUDAをGentooに乗せた人いますか?
ディストリビューションをのせかえるのは大変なので
他のディストロ用のCUDAをインストールしたら
SDKがまともにコンパイルできないのです…
93デフォルトの名無しさん:2008/01/30(水) 14:06:51
gccのバージョンが違うんじゃない?
CUDAに使えるgccを別途拾ってこないとダメじゃないかな。
# あと、DirectXとか。
## まぁ、エラー処理のところを作り替えちゃえばいらないけど。
94デフォルトの名無しさん:2008/01/30(水) 16:37:38
質問です。
cudaで演算を行うプログラムを作成し、なんとかcore2duoの
80〜100倍の処理速度のものが完成したんですが、
プログラムをdll化してVC++で作成したUIから呼び出したところ
処理速度がcpuの4〜5倍に落ち込んでしまいました。

何が原因かはわかりませんが、タイマーを使って調べたところ
cudaMemcpy関数の処理速度が激しく落ちていました。
これはやはりdll化したことが原因なのでしょうか?
しかしNVIDIAのフォーラムにはdll化は問題なくいけると書いてありました。
dll化もフォーラムのとおり行いました。
cudaMemcpy以外の処理はdll化前と変わらない速度で行われているようです。
いったい何が原因でこのようなことになってしまったのでしょうか?

どなたか解決法、もしくは同じ問題を扱ったことのある方いましたら
アドバイスをよろしくお願いします。
95デフォルトの名無しさん:2008/01/30(水) 18:49:56
それだけじゃ判らんなぁ。
cudaMemcpy()の転送方向は?
HostToDeviceだったらCPUキャッシュ、DeviceToHostならGPUの処理未終了、って辺りかな。
取り敢えず、デバイス側関数呼び出しから帰ってきてもそれはGPUの処理終了じゃないってことに注意。
96デフォルトの名無しさん:2008/01/30(水) 19:03:48
>>95さん
足りない説明ですみませんでした。方向はDeviceToHostです。
問題は計測している時間の中にGPUの終わっていない処理にかかってる分も
含まれてしまっているということですね。
だとしたら納得いきます。
カーネル実行直後にメモリーコピーを行っているので。

まずはそれぞれの処理にかかってる時間をちゃんと測れるようにがんばってみます
ありがとうございました!!
97デフォルトの名無しさん:2008/01/30(水) 19:07:29
CUDAを始めるに当たって、何をインストールすればよいのでしょうか?
とりあえず、Visual C++ 2008はインストールし、グラフィックドライバを最新のものにしました。
CUDA SDK以外に必須のものを教えてください。
98デフォルトの名無しさん:2008/01/30(水) 19:15:15
必要なもの。
・英語力
・忍耐
・(cudaの動く)GPU
・(cudaサイトからリンクされている)ドライバ
・ランタイム
・SDK
99デフォルトの名無しさん:2008/01/30(水) 23:54:00
Linuxでやろうとしてます。どのような
マシンを組んで、どのディストリを入れる
のが良い&安上がりですか?
100デフォルトの名無しさん:2008/01/31(木) 05:28:40
>>99
安定性を求めるのならメーカー製のものがよいが、自作するつもりなら
少なくともマザーボードは鉄板にすること。
それから、電源が貧弱だとトラブルの元になりやすい。
ビデオカードのお薦めはGeForce 8800 GT。
101デフォルトの名無しさん:2008/01/31(木) 10:41:05
安西先生、8800は安くないっす…。
102デフォルトの名無しさん:2008/01/31(木) 12:56:52
目的が判らんから何とも言えんが、安さ優先なら8600GTでいいんじゃね?
余裕があるなら8600GTSで。8800GTは消費電力も発生熱量も大きいから、
筐体の空冷性能が悪いと巧くないかも知らんことだし。
103デフォルトの名無しさん:2008/02/01(金) 19:37:13
Visual Studio 2008ではコンパイルできないのでしょうか?
104デフォルトの名無しさん:2008/02/01(金) 20:45:43
現在
C:\Program Files\NVIDIA Corporation\NVIDIA CUDA SDK\projects
以下にあるtemplateを書き換えて使っています。
他のディレクトリに移すと、コンパイルできなくなってしまいます。
他のディレクトリに移す場合、どこを書き換えたらよいのでしょうか?
105デフォルトの名無しさん:2008/02/02(土) 09:05:14
>>103
できない。
>>104
Visual Studioの新規作成で作成すればよい。
106デフォルトの名無しさん:2008/02/05(火) 09:19:22
プロファイラがリリースされたようですね
107デフォルトの名無しさん:2008/02/05(火) 17:45:28
SLI構成でCUDA使ってる人はいますか?
SLIにするには、ボード増設すればいいだけ的なことが書いてあったけど、
一枚から二枚に移行するにあたって、気をつけることってなにかあったら
教えてください。
108デフォルトの名無しさん:2008/02/05(火) 19:12:00
>>106
どこ? ぱっと見で見つからない……

>>107
ボード増設だけではSLIにならない気もす。ボード完直結のケーブルが要るような……
逆に、CUDA使う分には別段困らないと思うけど。
109デフォルトの名無しさん:2008/02/05(火) 20:42:22
>>107
SLIは同一型番のカードでないとうまくいかないことが多いみたいですね。
最低でもメモリ容量やクロックは合わせないとだめなんじゃないでしょうかね。

それからチップセットによってはx16の2枚のフルレーンではなくx8の2枚となるのも要注意でしょうか。

>>108
SLIと非SLIのマルチGPUでパフォーマンスに差が出るのかも気になりますね。
110デフォルトの名無しさん:2008/02/06(水) 21:05:28
ホスト側のメモリの確保はmallocを使わないといけないのでしょうか?
サンプルコードを見るとmallocが使われていますが、newじゃ駄目なのでしょうか?
111デフォルトの名無しさん:2008/02/06(水) 21:57:45
newは使えないって言うのをどこかで見たなぁ
112デフォルトの名無しさん:2008/02/06(水) 23:18:31
Linuxなら大丈夫。Windowsの場合、nvccはgccベースなのにVCのリンカを使うからおかしなことになる。
113デフォルトの名無しさん:2008/02/07(木) 06:27:16
iostreamをインクルードすると、

"C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE\xlocinfo", line 77: error
:
          support for exception handling is disabled
              throw runtime_error("bad locale name");
              ^
と行ったエラーが大量に出てコンパイルできません。何が問題なのでしょうか?
OSはWindowsXPです。



114デフォルトの名無しさん:2008/02/07(木) 06:43:58
あんたの頭。
115デフォルトの名無しさん:2008/02/07(木) 07:49:52
>>113
ロケールが悪いと書かれてるが?
116デフォルトの名無しさん:2008/02/07(木) 07:55:34
ロケールが悪いんじゃなくて、
ロケールが悪いというエラーを返すために例外を投げてるのが悪いんでしょ
117デフォルトの名無しさん:2008/02/07(木) 13:53:04
floatを4つ使うよりfloat4を使った方が高速なの?
float3とかfloat4の利点がいまいちわからないのだけど
118デフォルトの名無しさん:2008/02/07(木) 14:14:17
globalメモリからのアクセスなら、floatはld.global.f32が使われる。
float2ならld.global.v2.f32が使われる。float3, float4も恐らく同等。
尤も、struct {float x, y}だとしてもfloat2扱いしてくれるから使いたくなければ使わなくてもいい。
119デフォルトの名無しさん:2008/02/07(木) 15:19:37
GPGPU#2スレから来ました。

extern __shared__ int shared[]; 
でsharedメモリを使えますが、複数の配列を使いたい場合はどのようにすればよいのでしょうか? 

120デフォルトの名無しさん:2008/02/07(木) 17:53:32
>>119
<<<>>>の呼び出しで共有メモリを確保する方法を使う場合、
<<<>>>で共有メモリのサイズを指定して何らかの__shared__ポインタで場所を指定するだけ。
つまり、複数の配列を使いたければ自分で監理するしかありません。
例えば、
extern __shared__ char sharedTop[];
__shared__ int * sharedInt1 = (int *) (sharedTop + 0);
__shared__ int * sharedInt2 = (int *) (sharedTop + elemOfInt1 * sizeof(* sharedInt1));
というように。
勿論、
func<<<blocks, threads, elemOfInt1 * sizeof(* sharedInt1) + elemOfInt2 * sizeof(* sharedInt2))>>>();
のように呼ぶ必要があります。
121デフォルトの名無しさん:2008/02/07(木) 18:21:09
<<<>>>に入れるブロックの数とかスレッドの数ってどうやって決めればいいのでしょうか。
いまは、適当に縦横の格子点数で決めてるんですが。
ちなみに、使っているGPUは以下のものです。
Device 0: "Quadro FX 4600"
Major revision number: 1
Minor revision number: 0
Total amount of global memory: 804585472 bytes
Total amount of constant memory: 65536 bytes
Total amount of shared memory per block: 16384 bytes
Total number of registers available per block: 8192
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: 1188000 kilohertz
122デフォルトの名無しさん:2008/02/07(木) 18:26:18
ちなみにsharedが速いということはほとんどないから、安心してglobalを使え。
むしろ、コピーする分遅くなる。
まあ、CPUの様に高速なL1キャッシュでも積むようになれば別なのだろうけど。
123デフォルトの名無しさん:2008/02/07(木) 18:27:00
>>121
プログラムによる
124デフォルトの名無しさん:2008/02/07(木) 19:57:12
>>121
ドキュメントを読む限り、スレッド数はワープ単位にするべきかと。
それと、できる限りCPU側でループさせない方がいいと言う点からいけばブロック数は
1000-10000位は欲しいということになるらしい。
まぁ、実測してみればいいんじゃね?
125デフォルトの名無しさん:2008/02/08(金) 19:52:20
GPUとCPUに分散させて計算させることはできませんか?
126デフォルトの名無しさん:2008/02/08(金) 20:03:31
できます。CUDAで言えば、GPU側を起動した後CPUはGPUを待たずに処理できます。
127デフォルトの名無しさん:2008/02/09(土) 03:18:24
CUBLASとCUFFTをソースコードからコンパイル出来た方がいたら、ぜひやり方を教えてください

ソースはココからダウンロードできます
http://forums.nvidia.com/index.php?showtopic=59101
128デフォルトの名無しさん:2008/02/09(土) 05:42:34
サンプルがなかったっけ?
129デフォルトの名無しさん:2008/02/09(土) 08:06:18
>>128
何のサンプル?
CUBLASやCUFFTのサンプルならその他のCUDAのサンプルごとSDKに同梱されていると思うけど。

>>127
ソースからコンパイルする目的は?
130デフォルトの名無しさん:2008/02/11(月) 21:01:30
>>122
再帰的につかう変数をsharedにもってくると、断然速いだろう?
131デフォルトの名無しさん:2008/02/12(火) 03:11:08
CUDAで再帰って使えるんですか?
132デフォルトの名無しさん:2008/02/12(火) 08:06:11
CUDAで再帰って使えないと思うような根拠があるんですか?
133デフォルトの名無しさん:2008/02/12(火) 13:37:22
ところで、CUDAって何て読むの?

キューダ? シーユーディーエー?
134デフォルトの名無しさん:2008/02/12(火) 13:42:45
>>133
お好きにどうぞ。
一般的な英語の発音ルールに乗っ取るなら「カダ」になるのかも知れませんが、
barracudaからの連想で「クーダ」と発音する方がそれっぽいかも知れません。
135デフォルトの名無しさん:2008/02/12(火) 13:43:07
s/乗っ取る/則る/
136デフォルトの名無しさん:2008/02/12(火) 20:31:08
クーダの方が語感的にいいな
137デフォルトの名無しさん:2008/02/12(火) 22:39:15
Kirk氏の講演を聴いたことがあるが
クーダと言っているように聞こえた
138デフォルトの名無しさん:2008/02/13(水) 00:30:47
139デフォルトの名無しさん:2008/02/13(水) 14:20:22
Windows版の開発もLinux版のようにコマンドラインだけでやれる方法はありませんか?
140デフォルトの名無しさん:2008/02/13(水) 15:56:54
VisualStudioを使わなければOK!
cl.exeやnmake.exeの使い方は自分で調べてくれ。
141デフォルトの名無しさん:2008/02/14(木) 15:21:59
祭りだ祭りだ
Japan CUDA カンファレンス 3/6(木)@本郷
http://www.loopinc.jp/nvidia2008/
142デフォルトの名無しさん:2008/02/15(金) 19:10:36
ブロックやグリッド数を2つ以上必要な場合ってどのような場合なのでしょうか?
143デフォルトの名無しさん:2008/02/15(金) 20:09:39
GPUのプロセッサ数はどこでわかりますか?
144デフォルトの名無しさん:2008/02/15(金) 23:24:30
>>142
GPUの性能を活かすためには、並列度を上げる必要があります。
逆に、ブロックやグリッドが1だとプロセッサを使い切れなくてパフォーマンスが出ません。

>>143
GPUの仕様か、CUDAのドキュメントに書いてあります。
アプリケーションから動的に取得することはできないようです。
145142:2008/02/16(土) 19:59:42
ブロック数が1つだと、並列には実行されることはないのでしょうか?
プログラミングガイドを見ると、ブロックの中に複数のスレッドがあるのですが、
このスレッドというのは、CPUのスレッドのように並列には実行されないのでしょうか?
146デフォルトの名無しさん:2008/02/16(土) 20:07:15
だから用いるThreadの個数を指定するの
例のソースコードなんかを読んだ方が良いよ
147デフォルトの名無しさん:2008/02/16(土) 20:16:33
そう言えば次の廃エンドになるらしい9800GTXではCUDAもやっと2.0とかになるのか?
148デフォルトの名無しさん:2008/02/17(日) 10:16:54
CUDAは範囲外のメモリを読み込もうとしてもエラーを返さないのですか?
149デフォルトの名無しさん:2008/02/17(日) 10:44:07
>>148
APIはエラーを返すけど、デバイス側の関数は必ずしもエラーを返さないね。
下手すると落ちるけど。
150デフォルトの名無しさん:2008/02/17(日) 14:34:08
blockIdxとthreadIdxは0から始まるのですか?
151デフォルトの名無しさん:2008/02/17(日) 14:48:10
はい。例えばfunc<<<m, n>>>()と呼び出した場合は、
それぞれ0からm-1, 0からn-1の値をとります。
二次元型、三次元型の場合も同様です。
152142:2008/02/17(日) 15:08:14
ブロック数を1つから2つに増やして、スレッド数を100から50に減らして実行してみたのですが、
速くなるどころか逆に2倍くらい遅くなってしまいました。そういうもんなのでしょうか?

dim3  grid( 1, 1, 1);
dim3  threads(100, 1, 1);

dim3  grid( 2, 1, 1);
dim3  threads(50, 1, 1);
153デフォルトの名無しさん:2008/02/17(日) 15:44:38
プログラムにもよると思うけどありえる話だろうね
154デフォルトの名無しさん:2008/02/17(日) 15:53:10
何スレッドが同時に動くかはGPUによっても違うので一概には言えませんが、
少なくとも8の倍数にはなるのでスレッド数50や100は効率が落ちます。
例えばスレッド数を64にしても50のときと所要時間は変わらないかも知れません。
又、デバイス側の関数呼び出しは完了していても演算自体は終わっていないかも知れません。
cudaThreadSynchronize()してから時間を計った方がいいかも知れません。
155デフォルトの名無しさん:2008/02/19(火) 17:46:37
研究室のPCにLinux入れてCUDA動かしてますが、
ユーザ権限実行でもOSが死ぬプログラムを余裕で書けてしまいますね
これはCUDA使う以上、仕方ないことなんですよねきっと
バグのあるデバイスドライバ使ってるのと同じことと、あきらめるしか
ないのでしょうか
156デフォルトの名無しさん:2008/02/19(火) 18:03:53
vista対応と自動回復が働いてくれることを渇望しましょう
157デフォルトの名無しさん:2008/02/19(火) 19:31:36
そして危険なプログラムが走らないような検証系に進むのであった。
といってもDirectX動かす権限があればOS死ぬのは容易いような。
158デフォルトの名無しさん:2008/02/19(火) 19:36:50
vista対応マダー?
159デフォルトの名無しさん:2008/02/20(水) 05:07:39
vistaは要らない子。
*BSD対応マダーー??
160デフォルトの名無しさん:2008/02/20(水) 21:32:15
いやむしろTRON対応
161デフォルトの名無しさん:2008/02/21(木) 13:54:22
*BSD対応は確かに欲しいな・・・。
っていうか、オプソにするくらいの気持ちじゃないと
この規格は普及せんような・・・。
将来的にnVIDIAのGPUが携帯電話などに使われて行った時に
なかなか面倒じゃないかなぁ。
162デフォルトの名無しさん:2008/02/24(日) 00:15:33
NVIDIAはしばらく内部仕様公開しないだろうね。
ptxは読めてもその先の動作がわからないから辛いわ。
AMDには圧倒的に差をつけていそうだし。

GeForce9600出ましたな。
8800はStreamProcessorが128個×1.35GHzだったけど,今度は64個×1.625GHzみたい。
並列度が低い場合でも早くなるっていうこと?
163デフォルトの名無しさん:2008/02/24(日) 00:31:43
164デフォルトの名無しさん:2008/02/24(日) 00:44:42
>>157-158
ユーザースペースで動作させた場合の性能が気になりますね。

>>159-161
*BSDやgentoo等への対応も欲しいですね。

欲をいえばVista以外でのHybrid SLIのHybrid Power対応も w
自動切換えとかGeForce Boostとかは無理でも、コマンド一発でオンボとカードを切り替えられるようになるといいのですが。
165デフォルトの名無しさん:2008/02/24(日) 09:31:22
doubleにはいったいいつ対応するのか
166デフォルトの名無しさん:2008/02/24(日) 09:38:24
167デフォルトの名無しさん:2008/02/24(日) 14:10:04
http://www.nvidia.com/object/cuda_learn_products.html
9600GT,CUDAも実行できなければ遅い。doubleが使える世代への場繋ぎでしょう。
168デフォルトの名無しさん:2008/02/24(日) 14:17:49
>>167
NVIDIAは伝統的に新しいGPUでCUDAが使えるようになるまでに少なくともドライバを更新してくるから、
今のところ未だ、9600GTでCUDAが使えるようにならないとは言えない。
169デフォルトの名無しさん:2008/02/24(日) 14:28:20
普通に使えるようになるでしょ。つかヘッダとか弄ったら使えたりして。

で、VC2008+cuda1.1の食べ合わせって駄目なのかよ。1.0はいけるらしいけど orz
http://forums.nvidia.com/index.php?showtopic=53494
170デフォルトの名無しさん:2008/02/26(火) 07:10:16
Vistaのbeta版が3月の終わりごろに出るらしい

http://forums.nvidia.com/index.php?s=70658fb133a8b4a52524f6ec7f2f3408&showtopic=60431
171デフォルトの名無しさん:2008/02/26(火) 11:05:55
>>170
d
172デフォルトの名無しさん:2008/03/02(日) 23:09:30
ずっと上の方で誰か質問しててまだ回答無いけど、
ゲフォ8400GSでCUDA動きますか?
WinXPでは動いたんだけど、Fedora Linuxでは
認識しなくてエミュレーションに成ってしまった。

何かと金の掛かるWinではCUDAやりたくないです。
173デフォルトの名無しさん:2008/03/02(日) 23:27:05
>>172
一覧にはあるから使えるんじゃないかというレスがあった希ガス。
問題は、ドライバをインストールできるかどうかでそれは端末とBIOS次第かな。
ToolKitはFedora7用のがあるそうだから、逆にそれ以前のはダメかもしれない。
あーでも、エミュレーションでコンパイルできているなら大丈夫か。
コンパイルオプションを指定すれば、ちゃんとGPUコードのモジュールもできるんじゃないかな。

デバイス認識させるのは癖があるから要注意で。
Xが動く状況じゃないと、巧く認識できなくて苦労した記憶がある。
巧く認識できていれば/dev/nvidia0と/dev/nvidiactlができている筈なんで、
それがないならroot権限で正しくコンパイルできたGPUコードのサンプルを動かせば
ドライバの.koを使ってデバイスのエントリができる筈。
Linuxのデバイス周りは詳しくないんで、頓珍漢なことを書いているようなら失礼。
174デフォルトの名無しさん:2008/03/03(月) 10:30:40
しかし、VisualStuido2005EEと組み合わせれば無料でできるのに「金の掛かる」とはまた意味不明な……
WindowsならGPUのプロファイリングツールも使えるし、それはそれで悪くない選択だと思うんだけどね。
# といいつつ、未だ自宅で環境整備してないけどw
175デフォルトの名無しさん:2008/03/03(月) 10:32:18
8600GT WIN2Kの俺に謝れ!!!

XPが無い…
176デフォルトの名無しさん:2008/03/03(月) 10:36:43
>>175
Win2kで動かないのであれば、WinXP買うのも馬鹿馬鹿しいね。ゴメン、配慮が足りなかった。
177デフォルトの名無しさん:2008/03/03(月) 18:37:47
XPが嫌いってだけのもあるんだけどなー
ムダに重たくて
178デフォルトの名無しさん:2008/03/03(月) 18:50:25
>>177
テーマをクラシックにするか、システムプロパティでパフォーマンスを優先にすればWin2Kに較べて重くないと思いますよ。
179デフォルトの名無しさん:2008/03/03(月) 18:58:12
構ってちゃんの相手するなよ・・・
180デフォルトの名無しさん:2008/03/04(火) 02:14:10
そもそもWindowsが糞高いし、ソース付いて来ないし。
不自由過ぎてハックする気が萎える。
181デフォルトの名無しさん:2008/03/04(火) 17:32:33
こんちわす。
.NET環境からCUDAとデータの受け渡しをする例、なんてのは
無いもんでしょうかね。既存のVB.NET、C#.NETの統計解析を
高速化致したく。

相関係数=Σ(xj-xk)^2÷√Σ(xj-xjの平均)^2*(xk-xkの平均)

なんてのが多発し、j,kは1〜1000、それぞれ1万点ずつ、x1〜x1000の全ての
組み合わせで計算、という具合です。でも「総和を取る」とかはGPUは
苦手でしょうかね・・・。
182デフォルトの名無しさん:2008/03/04(火) 17:44:36
総和は苦手なので、適当に分割して小計を求めてから最後に総計を求めることになると思う。

それはさておき、先ずはその相関係数の式自体を変形してみてはどうだろう。
分子も分母のそれぞれも平均値を使わない形にできるはずだが。
# ついでに言えば分母の最後は2乗が抜けている希ガス。
それをやると、平均を使う2パス処理ではなくΣxj, Σxj^2, Σxk, Σxk^2,...などを求める1パスですむ筈。

あ、肝腎のVB/C#からの呼び出し方はわかんね。CUDA側は"*.obj"になるからリンクさえできればなんとかなるのかな?
まぁ、計算量が充分大きいならCUDA側を"*.exe"にして起動するようにしても大差ない気もするけど。
183デフォルトの名無しさん:2008/03/05(水) 12:43:43
どうもどすえ。自分なりにお勉強してみました。
.NET←→CUDAは、UnmanagedMemoryStream/共有メモリ/セマフォ、とかで
なんとかなりそうです。典型的な処理は以下のようにすればよいのかなと。

・データは、(128×8)センサー{測定データ64個単位×256}のように
CPU側で整形する。平均0、分散1に正規化し、欠損・異常値の前処理も
しておく。これはNオーダーの処理なので十数秒ですむ。

・GPU側には、C(j,k)=(A(j,k)−B(j,k))^2 (j,kは0-7)
つまり8×8画素の画像の、差の二乗?を繰り返し計算させる。
D(j,k)=D(j,k)+C(j,k)で集計する。
センサー(0〜1023番)対センサー(0〜1023番)なんで、N^2オーダー。
今はここに数時間掛かってます。

・終わったらホスト側でD(j,k)を取り出して、画素を全部足す。

数時間が数分になってくれると嬉しいのですがw
「GPU Gem」第三版を注文したので、もうちょっとお勉強してみるす。
184デフォルトの名無しさん:2008/03/05(水) 13:27:36
だから、相関係数を求める式を変形しろって。
CUDA云々以前だぞ。
185デフォルトの名無しさん:2008/03/05(水) 14:02:20
え、相関係数を求める式にはもう「平均」は無いすよ。
ごめんどこ怒られてるのかわかんね・・・
186デフォルトの名無しさん:2008/03/05(水) 14:29:04
「相関係数」でぐぐれかす
187デフォルトの名無しさん:2008/03/05(水) 14:33:41
お前ら両方とももういい加減にしろ
188デフォルトの名無しさん:2008/03/05(水) 16:49:01
統計の基本:
相関係数は普通ピアソンの積率相関係数を指す。
これは、r = Sxy / √(Sxx * Syy)で求められる。
このとき、Sxyはx,yの共分散、Sxxはxの分散、Syyはyの分散。
分散はSxx = Σ(xi - x ̄)^2。Syyについても同様。
# ここではxの平均を便宜上x ̄で現わす。
この式は、Sxx = Σxx - Σx*Σx/nに変形できる。
このとき、Σxxはxiの平方和、Σxはxiの総和。
また、共分散はSxy = Σ(xi - x ̄)*(yi - y ̄)。
この式は、Sxy = Σxy - Σx*Σy/nに変形できる。
このとき、Σxyはxiとyiの積の総和。
つまり、相関係数はr = (Σxy - Σx*Σy/n)/√((Σxx - Σx*Σx/n)*(Σyy - Σy*Σy/n))。
従って、線形時間で求められる。また、1回のスキャンで充分なので、各要素を保存する必要がない。
189デフォルトの名無しさん:2008/03/06(木) 01:21:05
上のほうにもあるけど、総和の計算って実際どーすればいいんだ?
スレッドブロックごとに小計を求めて、各ブロックの結果をまとめるとかいう
方法になりそうなのは予想できるが、実際どんな風に書けばいいのかわからん。

具体的にはベクトルの長さが出したいんだが、各要素の2乗の和がうまく出せない。
ヒントでもいいので分かる方教えてください。
190デフォルトの名無しさん:2008/03/06(木) 02:29:35
1つのブロックを総和の計算に割り当てる…とか
そんなことしか思い浮かばん
191上の方の人:2008/03/06(木) 07:58:00
後で暇があったら実際のコードの集計部分だけ晒してみるか。
192デフォルトの名無しさん:2008/03/06(木) 19:32:29
CUDAを使ったjpegの展開ライブラリはありませんか?
193デフォルトの名無しさん:2008/03/06(木) 19:55:22
IDCTはそこそこ効率よさそうだけど前段のビットストリーム分解が不向きっぽいぞ。
194デフォルトの名無しさん:2008/03/06(木) 22:20:39
>>191
そうしてくれると助かります。
よろしくお願いします。
195デフォルトの名無しさん:2008/03/06(木) 23:43:14
デイビッド・カーク氏来日,CUDAカンファレンス2008開催

ttp://www.4gamer.net/games/032/G003263/20080306051/
196デフォルトの名無しさん:2008/03/07(金) 04:38:20
やっとできたらしい日本語版のCUDAZONEとプログラミングガイドの日本語版。
ttp://www.nvidia.co.jp/object/cuda_develop_jp.html
しかし、機械翻訳そのままなのかな。余りに訳が酷くて原文読まないと意味が判らんとは……
197デフォルトの名無しさん:2008/03/07(金) 15:34:38
CUT_EXIT(argc, argv)はなんでargc, argvを与えなくちゃいけないのでしょうか?
198デフォルトの名無しさん:2008/03/07(金) 15:54:16
>>197
引き数にnopromptが指定されていない場合は
"Press ENTER to exit..."のメッセージを出して入力待ちにするためです。
詳しくは、cutil.h参照で。
199デフォルトの名無しさん:2008/03/07(金) 18:23:26
floatであった変数をいくつかまとめてfloat4を使うようにしました。
そうしたところプログラムの実行速度が10%ほど落ちたのですが、float4よりfloatの方が
実行効率がよいのでしょうか?
200デフォルトの名無しさん:2008/03/07(金) 23:32:28
よく知らないが、float4ってSIMD用の型じゃないの?
201デフォルトの名無しさん:2008/03/08(土) 00:20:55
単にまとめただけじゃ速くならないと思う。一番いいのは-ptxして出力眺めることなんだけどね。
202デフォルトの名無しさん:2008/03/08(土) 09:24:11
なんで、nvidiaのフォーラムには韓国語はあるのに日本語はないの?
203デフォルトの名無しさん:2008/03/08(土) 11:42:50
流石にそれはnvidiaに聞いてくれ。需要が少ないと言うか、要望が少ないのだろ。
半島人と違って日本人は奥床しいからw
204デフォルトの名無しさん:2008/03/08(土) 11:57:24
アメリカの地下鉄とかの案内板や自販機にハングルはあるけど
日本語はないとかいう話を思い出しました w

東大キャンパスであった、CUDAカンファレンス2008の動画とかは公開されないのでしょうかね?
205デフォルトの名無しさん:2008/03/08(土) 21:17:16
ずいぶん前の話だが、20-26あたりで議論されてる問題って結局どんな風に
並列処理するのが最適なんだ?
総和の計算の話が出てたから思い出したのだが。
前に試行錯誤したが、高速化できなかったり、値がおかしくなったりして
あきらめてしまっていた。
どうぞ皆様知恵をわけてください。

この前のカンファレンスでも言われていたがチューニングにかける時間を
惜しんではいけないのだね。
206デフォルトの名無しさん:2008/03/08(土) 21:27:59
総和みたいな計算は向いてないとも言ってたけどね
207デフォルトの名無しさん:2008/03/08(土) 21:59:03
>>205
結局>20は、>24で書いたようにインデックスで並列にした。
要はこんな感じ。
--
大きな配列tmpがあるとき、下図の+で区切られた範囲ごとに集計したい。
tmp+-----+-----+--------+-----+---+...
つまり、1番目のセクションは最初の(先頭の)+から次の+まで、2番目のセクションはその次の+まで……
ここで、こんな構造体を考える。
struct sections {short begin, end;}
こいつの配列を作って次のように値をセットする。
{{0, 6}, {6, 12}, {12, 21}, {21, 27}, {27, 31}, ...}
これをデバイス側に転送しておいて、一つのデータスレッドが一つのセクションを担当する形で集計した。
この方法の問題点:
・セクションのサイズが不均衡なので、ワープ内でも不均衡だと無駄なからループが発生してしまう。
# 1ワープ内では同じインストラクションが走ってしまうため。つまり、使用効率が落ちる状態。
・セクションサイズがワープ内では極力等しくなるようにソートすると、今度はアクセス場所がランダムになる。
# 先程の配列が、例えば{{0, 6}, {6, 12}, {21, 27}, {301, 307}, ...}のようになってしまう。
いずれにしても、綺麗に並べることができない。
但し、今回は前段のtmp配列への演算結果の格納が所要時間の大半を占めたために適当にチューニングして放置。

尚、予告した集計のロジックは、総和ではなく↑とも違う小計算出だったので条件が違うと言うことでパス。
総計は興味があるので、その内テストできたら改めて晒そうと思う。
208デフォルトの名無しさん:2008/03/09(日) 13:44:37
いきなりですが質問です
xp64でVisualStudio2005と8800GTS(G92)がありCUDAドライバー、
ツールキット、SDK、と入れたんですが、結局ビルド方法とか
どのPDFに書いてあんだろ、というのがよくワカンネですよ。

VS2005のプロジェクト設定をx64に変えて、cutil32D.libを
拾ってきたZIPから解凍して入れたら、mandelbrotとか一応
動いたけど。他のmandelbrot描画ソフトより劇速なんで、
動いてはいるみたいです。
209デフォルトの名無しさん:2008/03/09(日) 16:10:18
うーん、IDEは使ってないから判らないなぁw
pdfじゃなくて、ReleaseNoteか何かにビルド方法かいてなかったっけ?
後で見てみるわ。
210205:2008/03/09(日) 23:15:54
>>206
確かに言っていた。まぁそれは言われなくとも自明なことなんだが。
ついでに、CUDAがあるからGPUに向いていない処理も容易に書けるようになってしまった
とも言っていたな。
だが、膨大なデータをホストに書き戻して、総和を計算し、その結果をまたデバイスに
送って使うということは出来れば避けたかった。
GPUが苦手な処理でもデバイス側でやらせるというのがいいのか、転送コストを覚悟の上で
ホストに戻して計算したほうがいいのか実際確かめるために試行錯誤してみている。

>>207
説明ありがとう。
おかげで24でかかれていたことが理解できたよ。
その考え方は思いつかなかったな。
俺ももうちょい考えてみていい感じにできたら晒そうかと思う。
211デフォルトの名無しさん:2008/03/10(月) 02:56:03
ベクトルの総和を出すscanlarge.pdfを見てみると、
elementsが65536ならCPU−GPUでほぼ一緒、
100万elementsでGPUがCPUの5倍速い、ようですね。
なるほどGPU向きではないな・・・
212デフォルトの名無しさん:2008/03/10(月) 03:54:26
HostがCore2Duo辺りなら未だいいんだけど、Woodcrest辺りだと厳しいんだよねw
超越関数を大量に使う演算だと、GPUが随分有利になるんだけど。
# SSEには超越関数がない→ベクタ化のためには関数テーブルが必要→メモリ消費→キャッシュミス
213デフォルトの名無しさん:2008/03/10(月) 11:09:00
cudaでfloat4*float4ってできないの?
各要素ごとに4行に分けて書かないとだめ?
214デフォルトの名無しさん:2008/03/10(月) 18:33:07
>>213
float4 * float4 はないみたいだ。
ちなみに、
--
__device__ float4 a, b, c;
__device__ static void func()
{
c = make_float4(a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w);
}
--
こんなコードを書いてみたけど、
--
.global .align 16 .b8 a[16];
.global .align 16 .b8 b[16];
.global .align 16 .b8 c[16];
:
:
ld.global.v4.f32 {$f1,$f4,$f7,$f10}, [a+0]; //
ld.global.v4.f32 {$f2,$f5,$f8,$f11}, [b+0]; //
.loc 4 12 0
mul.f32 $f3, $f1, $f2; //
mul.f32 $f6, $f4, $f5; //
mul.f32 $f9, $f7, $f8; //
mul.f32 $f12, $f10, $f11; //
st.global.v4.f32 [c+0], {$f3,$f6,$f9,$f12}; //
--
こうなった。
215デフォルトの名無しさん:2008/03/11(火) 19:17:03
FreeBSDのLinuxエミュでCUDAを使っているんだけど、
Linuxと比較してどれくらい速度が落ちているのかな?

ほぼネィティブと同程度ならこのまま使っていこうかと
思っているんだけど。
216デフォルトの名無しさん:2008/03/12(水) 05:34:03
Windows上でコンパイルしているのですが、nmakeは使えないのでしょうか?
cygwinのmakeコマンドであればコンパイルできるようなのですが、nmakeを使うと
NMAKE : fatal error U1077: 'C:\CUDA\bin\nvcc.EXE' : リターン コード '0xc0000005'

Stop.
となってコンパイルできません。このエラーは何を意味しているのでしょうか?
217デフォルトの名無しさん:2008/03/12(水) 05:43:10
float4ってsimdで計算してくれないの?
218デフォルトの名無しさん:2008/03/12(水) 07:57:11
>>217
そもそもsimdなんてありませんが何か。つーか、>214で回答ついてるっしょ。

>>216
nvccが終了ステータスに5を積んでいるようですが、
ちゃんと動いた結果ならnmake側で無視することができると思います。
そもそもちゃんと動いてますか?

>>215
4種類ほどボード別に速度を測ったデータがあるからそれでも載せてみましょうか。
219216:2008/03/12(水) 08:30:07
>>217
早速のご回答ありがとうございます。
Makefileの内容ですが、非常に初歩的な

test.exe: test.cu test_kernel.cu
    nvcc test.cu

です。直接、コマンドプロンプトから打ち込んだ場合、問題なくコンパイルできます。
220デフォルトの名無しさん:2008/03/12(水) 08:49:24
>>219
レス番違いますぜ。
取り敢えず、nvccがエラーステータスを返しているかどうかと、
nmakeでそれを無視できないか調べてみてはいかがでしょう。
221デフォルトの名無しさん:2008/03/12(水) 12:49:19
そういうわけで、各ボードの比較表を作ったので貼ってみる。
--前半
"name","Tesla C870","GeForce 8800 GTX","GeForce 8800 GTS","GeForce 8800 GT","GeForce 8600 GTS","GeForce 8600 GT","使用コマンド"
"totalGlobalMem","0x5ffc0000","0x2ff50000","0x27f50000","0x1ffb0000","0xffb0000","0xffb0000","deviceQuery他"
"[MiB]",1535.75,767.31,639.31,511.69,255.69,255.69,
"sharedMemPerBlock","0x4000","0x4000","0x4000","0x4000","0x4000","0x4000",
"[KiB]",16,16,16,16,16,16,
"regsPerBlock",8192,8192,8192,8192,8192,8192,
"warpSize",32,32,32,32,32,32,
"memPitch","0x40000","0x40000","0x40000","0x40000","0x40000","0x40000",
"[KiB]",256,256,256,256,256,256,
"maxThreadsPerBlock",512,512,512,512,512,512,
"maxThreadsDim",512,512,512,512,512,512,
,512,512,512,512,512,512,
,64,64,64,64,64,64,
"maxGridSize",65535,65535,65535,65535,65535,65535,
,65535,65535,65535,65535,65535,65535,
,1,1,1,1,1,1,
"totalConstMem","0x10000","0x10000","0x10000","0x10000","0x10000","0x10000",
"[KiB]",64,64,64,64,64,64,
"major:minor",1:00,1:00,1:00,1:01,1:01,1:01,
"clockRate","1350000[kHz]","1350000[kHz]","1188000[kHz]","1512000[kHz]","1458000[kHz]","1188000[kHz]",
"textureAlignment","0x100","0x100","0x100","0x100","1x100","0x100",
222デフォルトの名無しさん:2008/03/12(水) 12:49:57
--後半
"with Xeon",,,,,,,"使用コマンド"
"convolutionFFt2d","145.05[MPix/s]","107.99[MPix/s]","99.57[MPix/s]","107.00[MPix/s]",,,"convolutionFFT2D"
"convolutionRowGPU","1100.00[MPix/s]","1071.34[MPix/s]","717.34[MPix/s]","1457.11[MPix/s]",,,"convolutionTexture"
"cudaMemcpyToArray","1209.69[MPix/s]","1141.85[MPix/s]","1049.30[MPix/s]","1483.92[MPix/s]",,,
"simpleTexture","1180.83[MPix/s]","1125.08[MPix/s]","799.22[MPix/s]","910.22[MPix/s]",,,"simpleTexture"
"clockTest",24766,24930,25346,22396,,,"clock"
"with Core2Duo",,,,,,,"使用コマンド"
"convolutionFFt2d",,,,"106.64[MPix/s]","41.21[MPix/s]","32.93[MPix/s]","convolutionFFT2D"
"convolutionRowGPU",,,,"1433.39[MPix/s]","467.43[MPix/s]","375.54[MPix/s]","convolutionTexture"
"cudaMemcpyToArray",,,,"1475.25[MPix/s]","893.47[MPix/s]","596.14[MPix/s]",
"simpleTexture",,,,"873.01[MPix/s]","370.00[MPix/s]","285.30[MPix/s]","simpleTexture"
"clockTest",,,,24066,65006,71736,"clock"
223デフォルトの名無しさん:2008/03/12(水) 13:58:27
これってプログラミングガイドの最後にあるやつ?
224デフォルトの名無しさん:2008/03/12(水) 14:29:37
CUT_EXITを実行せずにプログラムを終了した場合、どのような悪影響がありますか?
225デフォルトの名無しさん:2008/03/12(水) 15:01:43
>>221
SharedMemoryって16KBしか割り当てられないのですか??
226デフォルトの名無しさん:2008/03/12(水) 15:10:28
幾ら何でも同じスレの中くらい検索してくれたっていいじゃないか(TT

>>223
いいえ、サンプルプログラムの出力です。

>>224
なーーんにも。どうしても気になるならcutil.hを眺めてください。

>>225
この表では、1block辺りのSharedMemoryのサイズを示しています。
227デフォルトの名無しさん:2008/03/12(水) 18:15:17
Cのmallocの場合、NULLかどうかでメモリが確保できたか判別できますが、
cudaMallocでメモリが確保されたかどうかを調べる方法を教えてください
228デフォルトの名無しさん:2008/03/12(水) 18:31:03
CUT_CHECK_ERROR
229デフォルトの名無しさん:2008/03/12(水) 18:31:16
cudaMalloc()
cudaError_t cudaMalloc(void** devPtr, size_t count);
allocates count bytes of linear memory on the device and returns in *devPtr a pointer to the allocated memory.
The allocated memory is suitably aligned for any kind of variable.
The memory is not cleared. cudaMalloc() returns cudaErrorMemoryAllocation in case of failure.
230228:2008/03/12(水) 18:42:05
ああ、あとデバッグモードじゃないとだめだよ
231デフォルトの名無しさん:2008/03/13(木) 03:10:17
warpサイズって簡単に言うと何?
232デフォルトの名無しさん:2008/03/13(木) 06:48:58
同一インストラクションが同時に走る、演算ユニットの集まり?
233デフォルトの名無しさん:2008/03/13(木) 13:50:16
CUDA初心者です。
CUDA難しいよ
難しいよCUDA
・<<<Dg, Db, sizeof(float)*num_threads*4>>> て書いたら動かないんすかね。
 int sharemem_size = sizeof(float)*num_threads*4;
 <<<Dg, Db, sharemem_size >>> て書いたら動いた。
・畳み込み演算させたら、CPUでやるより1.7倍しか速くないの(´・ω・`)
・動いてる間、システム全部固まってる。最初焦った。
CUDAの道険しいナリ
234デフォルトの名無しさん:2008/03/13(木) 15:37:14
初歩的な質問かとは思いますが、各ストリームプロセッサにそれぞれ1つずつスレッドが割り当てられるのですか?
235デフォルトの名無しさん:2008/03/13(木) 18:22:14
__syncthreads()ではブロック内でしか同期できませんが、全ブロックを同期したいときは
カーネルを抜けていったんCPU側に戻すしかないのでしょうか?
236デフォルトの名無しさん:2008/03/14(金) 02:24:24
cudaMallocHostとCのmallocの違いを教えてください
237デフォルトの名無しさん:2008/03/14(金) 05:10:46
>>235
確かカーネルは非同期で実行されたはずだから、
カーネルを連続で呼んだら同期されない・・・と思う。

<<<カーネルの呼び出し>>>
cudaThreadSynchronize();
<<<カーネルの呼び出し>>>
ならいけるんじゃないの?自信ないけど。
238デフォルトの名無しさん:2008/03/14(金) 11:06:04
>>236
cudaMallocHostでメモリ確保すると、ページングなしスワッピングなし
物理メモリに連続して常駐、のメモリ領域が確保されるはずなのだ!
と思ってcudaMallocHost使ってます。mallocとmlockの合せ技?
239デフォルトの名無しさん:2008/03/14(金) 16:02:07
Windows, VC2005なんですが、PTXを出すためのオプションはどこに
書けばいいんどすか( ・ω・`)
苦労してPhenomの6倍速いまで持ってきたんですが、さすがに
この先はアセンブラ見てみないと何をどうすればいいか分からんどす。

モノは信号処理用の畳み込み(4096)どす。
240デフォルトの名無しさん:2008/03/14(金) 16:41:32
>>239
プロパティでカスタムビルドであることをチェックできない?
オプションは言うまでもなく -ptx
241デフォルトの名無しさん:2008/03/14(金) 16:56:28
グラフィックカードを2枚挿した状態で、メインメモリからGPU側に転送する際に
どのようにしてGPUを指定すればよいのでしょうか?
カーネルから見られるのは、1枚のGPUだけという認識でよろしいのでしょうか?
242デフォルトの名無しさん:2008/03/14(金) 23:48:11
>>241
cudaGetDeviceCount()からcudaChooseDevice()あたりでは。プログラミング
ガイドのD.1。二枚刺しテラウラヤマシス

>>240
プロジェクトのプロパティのカスタムビルドステップ、等にもコマンドライン
指定が何もなかとです。次はVSディレクトリに潜って.cuのRuleファイルを
探してみるです。
243デフォルトの名無しさん:2008/03/15(土) 03:32:18
RuntimeAPIとDriverAPIの違いを教えてください。
244デフォルトの名無しさん:2008/03/15(土) 12:17:00
CUDA素晴らしすぎです。ようやくグリッドとブロックとスレッドと
globalとsharedとconstantを理解して、今「Xeonより100倍速いぜ!」
な速度を叩き出しています。もっとチューニングがんばってみよう。

>>243
RuntimeよりDriverの方が低レベルとして書いてありますけど、
似たようなの一杯有るし、違い良く分からないですよね。
245デフォルトの名無しさん:2008/03/15(土) 13:20:14
恐らくは、Driverの方はC++で使うことを想定してない。
実際問題として、nvccはC++としてコンパイルするのでRuntimeAPIの方が使いやすいと思う。
246デフォルトの名無しさん:2008/03/15(土) 17:14:57
>>244
segdmm のC800では120GFlops程度と言われていますが

4coreのXeonでも75GFlopsです。

どのくらい違いますか教えてください。
247244:2008/03/16(日) 00:22:24
>>246
やってみたのが4096単位データ×128個に対して4096のフィルタで
コンボリューション掛ける、なんですが、Xeon2GHzの1スレッド
だと250M操作/秒位しか出来ないですよ。キャッシュミス連発?
GeForce8800ですと、28G操作/秒で動きます。
248244:2008/03/16(日) 04:08:51
あ、そんで、Xeonでやるとこうだってのはもれじゃ無くて既存の
なので、弄れないし、作りはよく分からんのです。とりあえず
「このルーチン速くするライブラリ作れんか?CUDAとか言う奴で」
と言われてやってみたら100倍速いので怒りが有頂天になった所です。

でも冷静に考えると、CPU側もカリカリに書けばあと10倍位速くなる
可能性はありますわな。たぶんSSEとか使ってないし。
でもそこから10倍にするには、つまりもう何台かパソコン追加しないと
ならんわけなので、やっぱりCUDA可愛いよ可愛いよCUDAw
249デフォルトの名無しさん:2008/03/16(日) 08:32:33
私のところじゃ、Xeonの3-10倍だなぁ。単体テストで。
# 他の演算と組み合わせると、1.5-2倍が限度(TT
250デフォルトの名無しさん:2008/03/16(日) 09:07:29
「Xeon」てみなさんが言ってるのは、DPマシン8コアのこと?それとも1コアのこと?
1コアに負けるんじゃ確かにちょっと悲しいよね。
251デフォルトの名無しさん:2008/03/16(日) 09:14:14
1スッドレ、って書いてるじゃん
252デフォルトの名無しさん:2008/03/16(日) 09:34:49
つまりこういう暑苦しい感じが最強だと。
喧嘩してる場合じゃねぇ!Quadコア×デュアルCPU+8800GTXの2枚刺し、
の友情で最強を目指そうじゃないかお前ら!夕日に向かって海まで走れ!
敵は巨大行列のLU分解だ!手ごわいぞO(N^3)!
253デフォルトの名無しさん:2008/03/16(日) 12:57:56
グリッド数、ブロック数、スレッド数の決め方がよくわかりません。
例えば独立な300個のスレッドがあった場合、
一つのブロックに300のスレッドを割り当てるのがよいのでしょうか?
それともスレッド数は1つで300のブロックを作成するのがよいのでしょうか?
ワープ数などはどのように考慮すればよいのでしょうか?
254デフォルトの名無しさん:2008/03/16(日) 13:54:06
>>253
あくまでも漏れの場合ですが、
ブロック数=16。これは使っているカードの「Multi Processor」に合せて。
 違うグリッドに属するデータのやり取りは出来ない事に注意。
スレッド数=512。目安で。
で、カーネル関数でループで処理を回す場合、最外では
for (i = 0; i < maxcalccount; i=i+スレッド数×ブロック数)
のようにします。これで8192単位での並列化になります。
ループ内部では、グローバルメモリからたとえば1ワード読むなら
sharedメモリ[スレッドID]
 =グローバルメモリ[スレッド数×ブロック数+ブロックID×スレッド数+スレッドID]
となります。
floatを使う場合、スレッドが512なら、各スレッドで最大8ワードもてますが、
sharedメモリは使い切らないほうが良いようです。
255デフォルトの名無しさん:2008/03/16(日) 14:57:39
ブロック数は、どうせ多く割り当ててもCUDA内部で直列に並べるだけだから
非同期で少しでもCPUと並列にしたい場合を除けば大目に割り当ててOK。
スレッド数についても多い分はどうせ別のワープに割り当てられるから多めでOK。
但し、同期を取る場合には多過ぎるとダメ。
手元のデバイス関数の場合、ブロック数*スレッド数は少なくとも1024か2048以上必要(8800GTXの実測で)。
これらを踏まえると、スレッド数が32ならブロック数は64以上、スレッド数が64ならブロック数は32以上くらいか。
ブロック数の上限は、実測しながら適当に調整するとして、大体1024を超えるといくつでも変わらないと思う。
# これも、具体的なテスト用のサンプル用意したいところだね。
256デフォルトの名無しさん:2008/03/16(日) 16:42:50
>>188みたいな話が載っている本で使っている本があれば教えてほしいなあ。

入門書の理屈を素直になぞっているような人間には、普通のcpuとgpuとの差を出せなさそう。
257デフォルトの名無しさん:2008/03/16(日) 17:01:32
>>256
>188は統計学を知らんと自分で導けないし、統計学学ぶ香具師がプログラマになるとも限らんしね。
Webでも知識があることを前提としているか、律儀に平均値との差を求める方式しか載ってなかったり。

私の場合は、電卓の統計機能が個別のデータと平均値の差を使わずにどうやって標準偏差を得るのか
不思議に思って調べて以来の知識かな。
ってことで、統計学を知らない私も>188みたいな話の解説があるなら見たい希ガス。
258デフォルトの名無しさん:2008/03/16(日) 17:05:10
CUDAというかGeforceってSIMDなの?
SSEは確かに1つの命令で4つとかの足し算が行われるけど、
CUDAの場合、どれがそれに当てはまるの?
259253:2008/03/16(日) 17:17:24
>>254>>255
早速のご回答ありがとうございます。
基本的にはスレッド数は目一杯であとはブロックすうを調整すると言うことでいいみたいですね。
ところで、処理する数がスレッド数×ブロック数で割り切れない場合、最後のループはどうするのがいいのでしょうか?
やはりifでやるしかないのでしょうか?
260255:2008/03/16(日) 17:38:35
>>259
んにゃ、私はブロック数もスレッド数も実測で決定している。
で、割り切れない場合はループ数で制御するのがいいみたい。
# やっぱり説明するためにはさんぷるが必要かw

>>258
GPUの場合は、SIMDじゃなくてMIMDということになるのかな。
CUDAで考えると、Warp単位で同じインストラクションを走らせて、
複数のデータスレッドを処理するイメージ。

だから、条件分岐をCUDAで書いても、Warp単位で同じインストラクションなので
データスレッドごとに条件が違うと無駄が生じてしまう罠。
詳細は手ごろなサンプルがないので割愛w
261253:2008/03/16(日) 18:08:52
>>260
やっぱり基本は実測なのですね。
ところでループ数で制御するというのはどういうことなのでしょうか?
処理する数/(スレッド数×ブロック数)=ループ数
だと思うのですが・・・
262255:2008/03/16(日) 18:27:15
例えばこんな感じ。
__global__ void func(float const * a1, float * a2, unsigned num)
{ // 実際には一時変数を使った方がいい希ガス
for (unsigned idx = blockIdx.x * blockDim.x + threadIdx.x; idx < num; idx += gridDim.x * blockDim.x) {
a2[idx] = a1[idx] * a1[idx];
}
num=ブロック数*スレッド数ならどのスレッドでもループは一回だけ回る。
num<ブロック数*スレッド数なら、暇なスレッドが発生する(から効率は宜しくない)。
num/(ブロック数*スレッド数)が11と12の中間なら一部のスレッドは12回回って残りは11回回る。
このループ回数が1や2じゃなければ、暇なスレッドの割合が相対的に少なくなる寸法。
# これが理由で、ブロック数は無闇に増やせばいいというわけでもないということになる。
あー説明が下手な私(:;
# サンプル作ったら誰か買わない?w
こういう回し方をすることによって、近くのスレッドが近くのメモリをアクセスする状態のままループが進行する。
つまり、ProgrammingGuideで言うところの"coalesced"。これをプログラミングガイドでは「結合した」と訳しているけど……
263253:2008/03/16(日) 20:27:25
>>262
ありがとうございます。
なるほど非常にうまい手ですね。
プログラミングガイドはなんか日本語訳がめちゃくちゃで非常に読みにくいですが、
がんばって解読したいと思います。
264デフォルトの名無しさん:2008/03/16(日) 20:55:07
shared memoryを使ったら、global memoryを直接使うより遅くなってしまいました。
どうも、カーネルを実行する際のshared memoryの確保に時間がかかっているようなのですが、
カーネルを実行するたびに毎回確保するのではなく、常時確保するような方法はないでしょうか?
265255:2008/03/16(日) 21:20:30
>>264
その現象は確認していないので不明です。
が、保持する方法は多分ないでしょう。
実は一つ問題があって、shared memoryは16バイト同時アクセスができないので
その点でglobal memoryより遅いのは確認済みです。
# ptx出力を見れば見当がつきますが。
266デフォルトの名無しさん:2008/03/17(月) 00:53:35
>>261
もれは、CUDAに投入する前に、CPU側で後詰めゼロとかやって、
「CUDA内では一切条件判断は不要」を原則にしています。

>>264
global、sharedへのアクセスがcoalescedじゃないと、めがっさ遅くなります。
それと、sharedに確保した後で、ブロック内の各スレッドでデータを
shareしない場合には、そもそもsharedを使う理由無いです。レジスタ
に順番にグローバルから読んで処理すればいいです。
267デフォルトの名無しさん:2008/03/17(月) 06:10:01
ブロック間の同期をとる方法を教えてください
268デフォルトの名無しさん:2008/03/17(月) 09:17:39
「ブロック」は、そもそも同時にブロック001とブロック002が動いているか
どうかも分からないんで、同期出来ないんでは?
CPU側で、カーネル関数その1呼び出して、cudaThreadSyncronizeして、
カーネル関数その2呼び出す。ではないかと。
269255:2008/03/17(月) 09:22:38
一応、__syncthreads()という手はありますよ。
但し、全ブロックが同時に動いているわけではない点には注意。
つまり、上の方に書いた分割方法で書いたような大きなブロック数の時には
恐らく巧くいかないかかなり待たされることになるかも知れず。

私の手元のロジックでは、ブロック数が64の時には巧いこと同期が取れています。
# C870, 8800GTX, GTS, GTでしか確認してないけど。
270デフォルトの名無しさん:2008/03/17(月) 14:41:06
>>269
それって各ブロック内のスレッドの同期じゃないの?
271255:2008/03/17(月) 14:55:21
あー、そうそう。失敬、その通りです。
>269は全て、「ブロック」を「スレッド」に読み替えてください。
# どっかでブロック数に切り替わってしまった……_/ ̄|○

と言うことで、やっぱりブロック間の同期は取れないのでした。
272デフォルトの名無しさん:2008/03/17(月) 15:29:11
>>268
カーネル2はカーネル1が終了してから実行されるんじゃないの?
273デフォルトの名無しさん:2008/03/17(月) 15:56:55
>>272
そこが良く分からんのです。
サンプルではcudaThreadSyncronizeでカーネル呼び出しを挟んでるんで、
一応もれも呼び出すことにしておるのですが。
274デフォルトの名無しさん:2008/03/17(月) 16:04:25
>>273
今、挟んだのと挟んでないのを比べてみたけど、全く同じ結果だった。
ifがあるので、各ブロックはばらばらのタイミングで終わるはずなのだが。
275255:2008/03/17(月) 16:10:18
前にも書いたかもしれないけれど、カーネル終了を明示的に知る手段はないので注意。
つまり、<<<>>>による呼び出しから復帰しても、GPUの処理が終了したわけではないので。
なので、次のような呼び出しをした場合、k1()とk2()は並列に動く可能性があるわけ。
--
k1<<<1, 8>>>();
k2<<<1, 8>>>();
--
終了を保証するには、cudaThreadSynchronize()を呼ぶかcudaMemcopy*()を呼ぶかすればOK。
276デフォルトの名無しさん:2008/03/17(月) 19:44:31
カーネルのループの段数を増やしたら、スレッド数が512だとカーネルの実行ができなくなった。
256ならできる。257はだめ。なんでだろう・・・
277デフォルトの名無しさん:2008/03/17(月) 19:51:18
1BlockのThread数の制限512ってのと関係があるのでは?
278デフォルトの名無しさん:2008/03/17(月) 19:59:35
ちょっと舌足らずだったかもしれませんが、カーネル内のループの段数を増やしたところ、そのカーネルが実行できなくなってしまいました。
そこで、スレッド数を512から256に減らしてみたところうまくいきました。
スタックか何かがあふれてしまったのではないかと疑っているのですが・・・調べる方法がわからず行き詰まってしまいました。
279デフォルトの名無しさん:2008/03/17(月) 20:10:15
実行できないってことは何かエラーが出るの?
280デフォルトの名無しさん:2008/03/17(月) 23:59:13
使っているレジスタの総数が8192を超えたとか。
unrollしすぎだとか。
281デフォルトの名無しさん:2008/03/18(火) 05:17:35
カーネルを2つ同時に実行できますか?
2枚のカードでそれぞれ別のタスクを割り当てて、並列で実行したいのですが。
282デフォルトの名無しさん:2008/03/18(火) 07:49:07
ブロック数が少なければ、勝手に同時実行するな。
283デフォルトの名無しさん:2008/03/18(火) 08:14:14
Maximum memory pitchって何?
284デフォルトの名無しさん:2008/03/18(火) 08:33:44
VCのnmakeって使えないの?
cudaをコンパイルできるサンプルMakefileがあったら教えてください。
285デフォルトの名無しさん:2008/03/18(火) 11:56:28
>>281
サンプルのMultiGPU、8800GTS+8400で試したら動いたよ。
単にこれ、WINAPIのCreateThreadして中でカーネル関数呼んでるだけですな。
でWaitForMultipleObjectsでWindowsスレッドの終了待っている。

>>283
2次元配列でGPUのメモリを使うときの幅じゃないすか。
cudaMemcpy2Dとか使うときに気にするんだと思われ。
ごめん二次元配列使ってないので良く分からない。
8800GTSも8400も262144bytesです。
286デフォルトの名無しさん:2008/03/18(火) 14:42:22
演算性能がボトルネックになっているのか、バンド幅がボトルネックになっているのか知る良い方法はないものか
287デフォルトの名無しさん:2008/03/18(火) 15:15:30
>>286
演算抜きでcudaMemcpyのHostToDevice、DeviceToHostだけやって
時間を測って見る、そして演算入りの時間と比べる、でどうだろう。
288デフォルトの名無しさん:2008/03/18(火) 16:42:29
__constant__ floatとconst floatの違いって何?
__constant__の方が速いの?実測してみたけど、全然違いが出ないのだけど。
ちなみに何故か定数を直接、式の中に書いたら唯一5%ほど遅くなった。

289デフォルトの名無しさん:2008/03/18(火) 18:11:38
プログラミングガイドの5章が全然わかんねー
結局のところcoalescedって何よ
Figure 5-2の右側は何でダメなの????

教えて偉い人
290デフォルトの名無しさん:2008/03/18(火) 23:54:19
>>288
__constant__は全部で64Kバイトある定数格納用メモリ、ホストから
memcpyすることが出来る。const floatは8192個のレジスタを使って
処理される。なので、普通のコード内定数はconst、ホストからどさ
っと書き込みたい固定データは__constant__でいいと思い。

>>289
5-2の右側は、132=33×4、だから? 各スレッドは、
16×sizeof()×何か+スレッドID、にアライメントされた
アドレスにアクセスしないとcoalescedしてくれないと。
291289:2008/03/19(水) 04:35:23
>>290
coalescedを辞書で調べても「合体した」とかしか出てこないので、いまいち意味がよくわからないのですが、
結局0番スレッドは
a[0]
a[16]
a[32]
:
1番スレッドは
a[1]
a[17]
a[33]
:
以外のアドレスにアクセスしないようにすればよいと言うことでいいのでしょうか?
292デフォルトの名無しさん:2008/03/19(水) 04:51:32
要は、配列のアクセスはarray[m * blockDim.x + threadIdx.x]のような形で
blockDim.xは16の倍数になればよろしって話なんじゃないかと。
293デフォルトの名無しさん:2008/03/19(水) 11:08:25
cuMemGetInfoフリーメモリと合計メモリを取得したのだけど、4MBにしかならない。
使い方は
unsigned int f,m;
cuMemGetInfo(&f,&m)
でいいんだよね?
294デフォルトの名無しさん:2008/03/19(水) 11:35:28
>>291
つまり「coalesced」は・・・もれの理解では・・・
・sharedメモリには入出力が32bit×8ポートずつあるかも。
 でも開始アドレスは一個かも。
・各スレッドからのアクセス要求アドレスが「0,4,8,12,16,20,24,28」の場合、
 GPU側で「ではsharedメモリの出力を綺麗にストリーミングプロセッサに
 一個ずつ割り当てればいいのであるな、開始アドレスは0だな」と判断し
 てくれるのかも。

>>293
もれの場合は、debugでは動くけどReleaseでは動かないのね。
debugでは FreeMem 465529088 TotalMem 536543232
と取れた。8800GTS/512MB。理由分かったら教えてください。
295デフォルトの名無しさん:2008/03/19(水) 19:26:24
>>290
__constant__って書き換えられるの?
296デフォルトの名無しさん:2008/03/19(水) 22:06:01
>>295
__constant__は定数メモリと考えればいい。
つまり、GPUからは書き換えられないのでCPUから書き換えると。
# constな変数は初期化はできるけど代入できないのと似てるかもしれない。

>>294>>293
>294のdebugでの数値は多分正しい値が出ているみたいだね。
>293の方は、もしかしたらエラーが返っていないかな?
私のところでも、整数にして201だったかのエラーが返ってきていたのだけれど、
その状態では値をセットしてくれないようだった。
つまり、もしかしたら>293の4MBとというのはfとmが未初期化で偶々入った不定値かも。
# 気になるなら、0で初期化してみればいい。

>>294>>291
coalescedなアクセスパターンにすることは、sharedだけでなくglobalでも重要なので
慣れておくことをお勧め。まぁ、例えば>262に書いたようにすればいいだけだけど。
297デフォルトの名無しさん:2008/03/19(水) 23:54:01
>>295
cudaMemcpyToSymbol()でCPUからセット出来るよ!
速いし64KBあるんで結構便利です。
298デフォルトの名無しさん:2008/03/20(木) 00:01:09
問題は、ベクタアクセスできる__global__と違って1データずつのアクセスになるから
逆に遅くなるケースもあることだな。
299デフォルトの名無しさん:2008/03/20(木) 12:55:05
ややこしさはCellとあんまり変わらなそうだな。
300デフォルトの名無しさん:2008/03/20(木) 14:25:54
>>299
とにかくメモリのコピーがヤヤコシイんだわ。ホスト側、GPUの
グローバルメモリ、GPUのチップ内メモリで転送しまくらないと
いかんで。やり方間違えると全然性能出ないし。
Cellはその辺どうなの?
301デフォルトの名無しさん:2008/03/20(木) 14:28:32
256kしかないLSでやりくりするのが大変って聞いたな
302デフォルトの名無しさん:2008/03/20(木) 15:10:07
両方試した私に言わせて貰えば、どっちもどっち。
確かにCBEは256KiBの壁がねぇ。GPUも64KiBの壁やcoalescedの沼があるけど。
超越関数を使える点ではCUDAが有利。ホストの性能でもPPEじゃ結構泣けるし。
303デフォルトの名無しさん:2008/03/20(木) 16:02:10
PPEはひどいよな。ホステスにC2D使ってるけど、ifがいっぱいあるような場合はC2Dの方が速いしね。
304デフォルトの名無しさん:2008/03/20(木) 16:14:13
>>298
それ実験してみたんだけど、変わらないみたい。
・global→shared(行列多数)と__constant__に置いた定行列で行列積
・global→shared(行列多数)とsharedの一部に置いた定行列で行列積
で、後者が1%遅いくらいだった。リードオンリーなだけで、コアとの距離や
所要クロック数はconstantもshared・レジスタも同じなのかもと?
305デフォルトの名無しさん:2008/03/20(木) 16:28:58
CUDAで逆行列を求める方法を教えてください
306デフォルトの名無しさん:2008/03/20(木) 16:49:55
page-lockedってどういう状態を表すのでしょうか?
307298:2008/03/20(木) 17:42:11
>>304
-ptxでニモニックを出力してみれば違いが判るかと。
例えば、ld.global.v2.f32はあるけどld.const.v2.f32はないからld.const.f32が2回になってしまう。
coalescedなアクセスができるglobalは4クロックでアクセスできるからsharedやconstと変わらないわけで。
尤も、一旦そのパターンから外れるとglobalは数百クロックだそうだから途端に劇遅になるけど。
308298:2008/03/20(木) 17:48:04
>>305
先ずは、逆行列を求めるプログラムをCで書いてみてください。
それの、ループの部分を分割する方向でGPU関数を作るのが第一歩になります。

つーかさぁ、一行質問する人達ってなんなの?
情報交換する気がなくて、単にくれくれの精神なんだったら勘弁して欲しいんだけど。
# なんか回答者が数人とそれより少し多いレス要員だけで持ってる気がするよ……

>>304
あーそうそう、書き忘れたけどレジスタアクセスは1クロックじゃなかったカナ。
確実にメモリよりも速いみたい。
309デフォルトの名無しさん:2008/03/20(木) 19:43:17
nvccにはO2とかの最適化オプションは無いのでしょうか?
310デフォルトの名無しさん:2008/03/20(木) 20:26:00
-Wallが使えないみたいね
たぶん無さそうな予感
311298:2008/03/20(木) 21:19:57
一部のオプションはgccと共通ですよ。
例えば、-O3(恐らく-O2なども)や-pgは使えます。
312デフォルトの名無しさん:2008/03/20(木) 23:15:10
>>299
どっちもどっちで、用途や慣れの問題だと思う。302がいうように、SFUの有無は
大きいが、それも用途しだい。
自分的には比較的情報がオープンなCellのほうがいろいろいじりやすいと思うが、
最近人気なくて心配。たぶんそのうちLarrabeeが全部かっさらってくんじゃないかな。
313デフォルトの名無しさん:2008/03/22(土) 18:23:49
GeForce 9800 GX2で現バージョンのCUDAは動きますか?
314デフォルトの名無しさん:2008/03/22(土) 18:28:28
ストリーム番号の同じカーネルやメモリコピーは順番に、違うものは並列に実行される??の認識でいい???
315デフォルトの名無しさん:2008/03/22(土) 18:43:27
テクスチャメモリの容量はどのようにすれば調べられるのでしょうか?
どこかに資料があるのでしょうか?それとも何かAPIがあるのでしょうか?
316デフォルトの名無しさん:2008/03/22(土) 23:25:42
いつも適当に答えてるおじさんです。まことにもうしわけない。
>>313
もれ、8800GTS(G92)で動いてるから、×2で二個見えるんじゃないかと
予想しますけど、一応どっちも対応外だから。漢は度胸でひとつ人柱に。
>>314
ストリームが二つあっても、実行順は関係ないのではと予想。ストリーム
1の半分実行した後ストリーム2の半分実行、もありえるかと。
cudaStreamSynchronizeでストリームの実行完了を待たないといけないです。
>>315
テクスチャメモリはグローバルメモリのキャッシュですが、実サイズが
不明ですね。cudaGetDevicePropertiesでは「alignment=256Bytes」と
読めます。これ以下と以上で実行時間を調べてみると、キャッシュミス
してるかしてないかわかるのではないでしょうかと。
317デフォルトの名無しさん:2008/03/23(日) 13:19:47
openSUSE 10.3でCUDAは動きますか?
318デフォルトの名無しさん:2008/03/23(日) 13:33:44
動くらしい
319デフォルトの名無しさん:2008/03/23(日) 17:02:07
次のバージョンっていつ頃出るの?
新しいカードも出ているわけだしそろそろ、SDKの方もアップデートしてほしいものなのだが
320デフォルトの名無しさん:2008/03/23(日) 23:52:41
Vista64と9600,9800対応版が欲しいすね。
早く出してくれないとAMD/ATIに浮気したくなりますよ。
321デフォルトの名無しさん:2008/03/24(月) 10:55:41
サンプル作ると言いつつなかなか暇が取れない私が来ましたよ。

>>313
ドライバが対応しているかどうかが問題。ドライバが認識さえすれば、動くとは思いますが。

>>314
ストリームのご利用は計画的に。ちなみに、CUDA1.0世代の(要はG8xかな)GPUだと
処理の隠蔽ができないらしく、全く速くならないという噂もあります。

>>317
>27-30
荒らしじゃないんだったら、スレくらい検索してほしいと思う今日子の頃。
# いや、荒らしなら検索如何に関わらずご遠慮願いますが。

>>319
取り敢えず、待つしか。下手すると夏の新製品までお預けの可能性も。

>>320
え〜、待っていれば倍精度も来るのに。
322デフォルトの名無しさん:2008/03/26(水) 23:04:49
英wikiでは、9600GTでもcudaできることになっている
悪い子と漢は居ね゛ーがー
323デフォルトの名無しさん:2008/03/26(水) 23:38:52
>>322
もれ9600GT買おうと思ってる。
ARCTICのS1Rev2が付く、という報告待ち・・・。ファンレスで使いたくて。
324デフォルトの名無しさん:2008/03/31(月) 21:17:49
http://www.nvidia.com/object/cuda_learn_products.html

9800GX2 CUDA OKだとでてるよん
325デフォルトの名無しさん:2008/04/01(火) 00:04:20
おー、更新されている。情報THX。
ドライバは変わっていないから、チップ依存なんですかね。
326デフォルトの名無しさん:2008/04/04(金) 22:15:16
ML115祭りに参加してOpetron使用をポチりました。
で、nbody.exeを実行すると・・・・ 160〜170GFLOPSという値が。

うぅ・・速過ぎる。初めて見るそのパワーに感動ものですた。
327デフォルトの名無しさん:2008/04/04(金) 22:15:54
忘れてた GPUは8800GTですぅ。
328デフォルトの名無しさん:2008/04/04(金) 22:24:35
そろそろまじめに実用的実装に入らないのかな?
圧縮解凍ソフトに組み込むとか
暗号化ソフトに組み込むとか
一番簡単なのは画像処理ソフトだろうけど
329デフォルトの名無しさん:2008/04/05(土) 02:08:09
大真面目に実用的な実装で悪戦苦闘していますが何か。
330デフォルトの名無しさん:2008/04/05(土) 09:56:17
画面の解像度によって使えるメモリ量は変わりますか?
331デフォルトの名無しさん:2008/04/05(土) 12:08:56
CUDA使うアプリをインストーラで配るにはどうしたらいいもんだろうか?
というところが。Vista対応してないし。
332デフォルトの名無しさん:2008/04/05(土) 13:45:15
CALならドライバ要らずなんだけどなぁ。
なんで別途ドライバが必要なんだろ。
つかVista版ドライバは3月の終わりごろじゃなかったのかよ!
333デフォルトの名無しさん:2008/04/05(土) 15:56:48
XP用のビデオドライバをインストールできるはずだから、その状態でXP用のCUDAドライバ入れられれば動くんじゃないかな
と無責任なことを言ってみる
334デフォルトの名無しさん:2008/04/05(土) 16:12:49
>>332
たぶん時差
335デフォルトの名無しさん:2008/04/05(土) 19:34:29
ttp://japanese.engadget.com/2008/03/27/windows-vista-nvidia-28-8/
cudaなんかやってる場合じゃないよな
336デフォルトの名無しさん:2008/04/05(土) 19:52:25
戦犯はマイクロソフトだろ・・・
337デフォルトの名無しさん:2008/04/05(土) 20:08:59
黒歴史確実なOSだからスルーでいいよ
338デフォルトの名無しさん:2008/04/05(土) 20:15:04
え、俺パフォーマンス100倍UPにちょー期待してんだけど
339デフォルトの名無しさん:2008/04/05(土) 22:09:08
普通にopenGL使ったオープンソースのキット使ったほうがいいだろ
340デフォルトの名無しさん:2008/04/05(土) 23:52:39
今月リリース予定のCUDA 2.0ベータ版でVistaサポートだってさ
341デフォルトの名無しさん:2008/04/06(日) 00:55:39
CUDAを有効に使うのなら、gccとの相性から考えてもLinuxで使うだろ。JK
342デフォルトの名無しさん:2008/04/06(日) 01:32:22
仮想メモリが使ってみたいんだもの。
343デフォルトの名無しさん:2008/04/06(日) 06:31:34
ローカル変数はどこに格納されるのですか?
shared memoryでしょうか?
344デフォルトの名無しさん:2008/04/06(日) 08:35:00
スタックフレームはないようなので、全てレジスタに格納されると思って宜しいかと。
ローカルに大きな配列取ろうとしたらどうなるのかはしらんなぁ。
ptx出力して読んでみたら?
345デフォルトの名無しさん:2008/04/06(日) 09:32:54
>>341
商売にならんじゃないか。建前はどうでもいいんですよ。
売れるかどうかだけです。
346デフォルトの名無しさん:2008/04/06(日) 09:49:44
「商売にできない」の間違いですね。
347デフォルトの名無しさん:2008/04/06(日) 11:51:20
エンコソフトでCUDA使ったやつ売れれば儲かりそうね。
動作検証が非常に大変だろうけど。
Vista対応不可って所で今の所どうにもならないですなぁ。

漏れがいま一番熱望してるのは、XilinxがCUDAに対応して、
FPGAのコンパイル・シミュレーションが劇速になること。
ああ夢のようだ・・・
348デフォルトの名無しさん:2008/04/06(日) 16:11:58
GPUで計算させているのだけど、その間のCPU使用率って100%なんだけど、これって正常なの?
349デフォルトの名無しさん:2008/04/06(日) 16:28:42
正常です。
ブロック数がPE数より多い場合は待たされることがありますし、
メモリ転送や同期を取るときには当然待たされます。
実は待っている間もしっかりCPU時間を消費するのです。

従って、GPUとCPUを巧く連携させて高パフォーマンスを狙うには
いかに待たずに済ませるかが鍵になるので、Streamの使用は必須になってくるかと。
350デフォルトの名無しさん:2008/04/06(日) 16:37:26
くそ速いglReadPixelsとして使えるかと思ったが
CUDAで扱うデータしかWrite Readできないのね

ぐすん
351デフォルトの名無しさん:2008/04/06(日) 16:53:37
CUDAにもGLサポート関数があるから、もしかしたら連携できるんじゃないの?
サンプルの、simpleGL辺りになんかない?
352デフォルトの名無しさん:2008/04/06(日) 19:06:19
PBO使え
353デフォルトの名無しさん:2008/04/06(日) 19:22:37
GT200と99GX2はどっちが高性能でしか?
354デフォルトの名無しさん:2008/04/07(月) 10:28:11
このスレの住人なら知っていますね、あの糞開発ツールのことを

・自分のプログラムのバグなのかコンパイラのバグなのかわからない
・他の仕事に応用できない糞開発ツールの独自世界を必死に学習している
・テキストエディタで書いたほうが効率的なのに糞UIツールを懸命に使っている
・糞開発ツールを批判すると「性格が悪いから糞ツールを批判するんだ」と言われる

糞だけど、政治的な理由で無理やり使わされているんですよね。
もう、あんな厨の作った糞ツールを我慢して使うのはやめましょう。

・糞開発ツールを部下に押し付ける上司の命令は無視しましょう。
 上司は糞開発ツールが使われる実績を作ることであの会社のごきげんをとっているのです。
・糞開発ツールを使わせる上司の下では働けません、と上司の上司に直訴しましょう。
・あの糞開発ツール提供会社には「おたくの糞開発ツールは話にならない」と突き放しましょう。
 バグレポートなどしてはいけません。改善要求などもってのほかです。
 あの会社はあなたたちのことをテスター/モルモットとしか思っていません。
・あの会議で「糞開発ツールを使ったら生産性がxx%アップしました」
 なんて話が出たら力強く机を叩き、会議室を出ましょう。
 あの人たちは糞開発ツールをマンセーすることで立場を確保しているのです。

糞な開発ツールを糞だと言える、そんな当たり前の環境をみんなの力で取り戻しましょう。
355デフォルトの名無しさん:2008/04/07(月) 14:17:07
GX2はSLIと同じように2つのgridを使う必要があるのでしょうか?それとも、1つのgridで両方のGPUを使えるのでしょうか?
356デフォルトの名無しさん:2008/04/07(月) 14:26:08
CUDAにSLIは関係ありません。
二枚挿しのことをSLIと呼ぶのは間違いです。
何故なら、SLI用コネクタを挿さなくてもCUDAではGPUを二つ使うことができるからです。

で、肝腎な9800GX2ですが予想ではGPUが二つ見える筈なので、一つの時のままだとダメな気がします。
357デフォルトの名無しさん:2008/04/07(月) 15:24:49
2つのGPUを使うには、CPU側もマルチスレッドにする必要があるのですか?
358デフォルトの名無しさん:2008/04/07(月) 16:17:21
Streamを使えばシングルスレッドでも何とかなるんじゃないかと思うので、是非とも試してみてください。
# 因みに、StreamはCUDA1.1からの機能なのでサンプルのmultiGPUでは使っていません。
359デフォルトの名無しさん:2008/04/08(火) 18:48:35
ビデオカード2枚刺しの場合、2枚のビデオカード間のデータのやりとりはPCIe経由なのですか?
360デフォルトの名無しさん:2008/04/08(火) 22:08:50
>>359
CUDAにはチップ間の転送なんてなかったと思いますが。
361デフォルトの名無しさん:2008/04/08(火) 23:54:35
CUDA 2.0 in this month

http://forums.nvidia.com/index.php?showtopic=63956

Vistaもサポートするよ。
362デフォルトの名無しさん:2008/04/09(水) 00:10:04
一方のVistaはMSに見捨てられた。
363デフォルトの名無しさん:2008/04/09(水) 00:27:55
PGがゴシップ記事鵜呑みにするなよ・・・
364デフォルトの名無しさん:2008/04/11(金) 16:05:33
Linux でCUDA使っていますが、pthreadを使って以下のようにスレッド内でcudaMemcpyを呼ぶと
invalid device pointerでcudaMemcpyに失敗します。なぜでしょうか。
スレッドを作らずに、mainから直接testCopy(NULL)と呼び出すと、問題ありません。

#include <pthread.h>
#include <cutil.h>
#define NUM 512
int *h_buf=NULL;
int *d_buf=NULL;
pthread_t thread;
void *testCopy(void* args) {
CUDA_SAFE_CALL(cudaMemcpy(d_buf, h_buf, sizeof(int)*NUM, cudaMemcpyHostToDevice));
CUT_CHECK_ERROR("Copy failed");
}
int main(int argc, char **argv) {
CUDA_SAFE_CALL(cudaMalloc((void**)&d_buf, sizeof(int)*NUM));
CUDA_SAFE_CALL(cudaMallocHost((void**)&h_buf, sizeof(int)*NUM));
for(int i = 0; i < NUM; i++) h_buf[i] = i;
pthread_create(&thread, NULL, &testCopy, NULL);
pthread_join(thread, NULL);
}
365デフォルトの名無しさん:2008/04/11(金) 18:24:09
Linuxよく判ってないけど次の点をチェック。
・cudaMallocHost()はメモリのページロックをしてしまうので、malloc()にしたらどうなるか。
・そもそもスレッドを分ける意図は何か。Stream系APIでは事が足りないのか。
366デフォルトの名無しさん:2008/04/11(金) 19:16:30
CUBLASの使用においても他スレッドで確保したメモリは扱えないので注意が必要です
367364:2008/04/12(土) 00:04:48
>>365
mallocも、newも試したのですが、だめでした。
CUDAの制御をするスレッドと、GUIの面倒を見るスレッドを分けたかったのです。
>>366
スレッド、またいじゃだめなんですか。それは、CUDAの仕様なのでしょうか。
368デフォルトの名無しさん:2008/04/12(土) 00:23:19
>>367
CUDAの面倒を見るスレッドでメモリ確保すればいいだけじゃん。
369デフォルトの名無しさん:2008/04/16(水) 17:03:58
370デフォルトの名無しさん:2008/04/16(水) 18:12:45
NVIDIA必死だなw
371デフォルトの名無しさん:2008/04/16(水) 23:56:06
AdobeのPremierとか、先に取り込んだとこの勝ちになるんじゃね?
372デフォルトの名無しさん:2008/04/17(木) 14:41:57
373デフォルトの名無しさん:2008/04/18(金) 16:34:55
otu
374デフォルトの名無しさん:2008/04/23(水) 01:01:57
CUDAプログラミングガイドに書かれているGPUの解説は
CUDAで使う場合限定の話ですか?CUDA対応GPUが行う処理全てについてですか?
例えば複数のグリッドで共有するメモリなど。
375デフォルトの名無しさん:2008/04/23(水) 23:17:01
>>374
共通する点もあるとは思いますが、CUDAでは(利便性と引き換えに)GPUの利用に
制限が掛かっていることから類推して当てにならないと思った方がよさそうです。
376デフォルトの名無しさん:2008/04/24(木) 23:35:24
夏ぐらいまでにCUDAで一本何か作ろうと思うけど
今から始めるなら2.0がいいの?というか何が違うんだ?
377デフォルトの名無しさん:2008/04/24(木) 23:50:27
まずはEmuでつくれ
378デフォルトの名無しさん:2008/04/27(日) 18:53:52
Visual Studio 2005じゃないとだめなのね
379デフォルトの名無しさん:2008/04/27(日) 19:05:52
サンプルが2005じゃないとビルドできないですね
380デフォルトの名無しさん:2008/04/27(日) 20:39:58
AMDの新しいbetaSDKって
Radeonじゃ動かんよね?
381デフォルトの名無しさん:2008/04/27(日) 20:46:11
>>380
スレ違い。

>>379
Linux版はインストールされているgccがあれば大丈夫。
# cygwinのgccが使えるといいんだけどねぇ。
382デフォルトの名無しさん:2008/04/27(日) 20:52:27
>>379
金がないってことか?
Express試用したら?
383デフォルトの名無しさん:2008/04/27(日) 21:32:45
>>381
スレねーじゃん
ケチくせーこと言わないで教えろよ
384デフォルトの名無しさん:2008/04/27(日) 21:34:29
GPGPUのスレあるだろ
385デフォルトの名無しさん:2008/04/27(日) 22:38:28
>>381
逆にgccのバージョン違ってると上手く動かないけど。
個人的には*BSDで動いて欲しい。それも64bitで。
386デフォルトの名無しさん:2008/04/27(日) 22:44:17
>>385
そんときは、違うバージョンのgccを入れて設定を変えておけばいいらしい。
なので、ドライバは兎も角nvcc(とemu)は*bsdでも動く可能性はあるかと。

あー、今確認のために見に行ったら2.0betaの案内がCUDAZoneにも出てますね。
CudaVisualProfilerも2.0betaが出ているらしい。

>>384
だってAMDのは知らないし〜
387デフォルトの名無しさん:2008/05/04(日) 02:02:07
かけ算にかかるクロック数や足し算にかかるクロック数を知りたいのですが、
そのような資料はないものでしょうか?
388デフォルトの名無しさん:2008/05/04(日) 08:38:43
ガイドブック。
389デフォルトの名無しさん:2008/05/04(日) 08:47:28
>>387
基本的に、掛け算も足し算も同クロック。
問題は、そこに至る過程なのでptxを出力してループ内の行数を数えるとか
メモリアクセスの個数を数えるとか。
そもそもプロファイラを使いこなせとか。
390デフォルトの名無しさん:2008/05/06(火) 18:16:16
SLI環境で、GPUから別のGPUに直接データを転送することはできるのでしょうか?
もしできるのでしたら、やり方を教えてください
391デフォルトの名無しさん:2008/05/06(火) 19:48:28
>>390
>355-360
392デフォルトの名無しさん:2008/05/13(火) 14:13:18
CUDAってnVidia限定でしょ?
サンプル動かして感動したけど
せっかく作っても使える環境が限られると意味ないね
393デフォルトの名無しさん:2008/05/13(火) 22:32:10
確かに、仮令MacやLinuxで使える場合があったとしても、Windowsの半数以上で使えないからね。

まぁ、使いたい人が使うからいいのよ。
394デフォルトの名無しさん:2008/05/14(水) 00:14:56
スレッドをいくつか使うときに

スレッド0、1,2の計算が終わってから
スレッド4の計算を始めるってどうやって書けばいいの?

待ち同期どうやって作ればいいか解らない
395デフォルトの名無しさん:2008/05/14(水) 00:27:53
GPU側関数で同期を取るのは__syncthreads()でできるけど、
恐らくそれではパフォーマンスが出ないと思われ。
スレッドは数個だけ動かしている積もりでもWarp単位でしか動かないので、
分割の仕方を見直した方がよさそう。
396デフォルトの名無しさん:2008/05/26(月) 20:14:25
ついに、gtx 280がでるね。
第2世代型の統合シェーダーアーキテクチャってどんなんかな。
倍精度サポートとか、10秒で計算打ち止めへの対処とかいろいろありそうだけど。

自分的には、分岐への弱さの改良とか、ブロック間の同期機構とか、手を入れてくるんじゃないかと思う。
あとは、各種メモリの配分をどうしてくるか注目。shared memoryを倍増とかあるかな。
397デフォルトの名無しさん:2008/06/01(日) 23:08:01
取らぬ狸のなんだが
GTX 280/260ではかなりの高速化が見込まれるがどう?
398デフォルトの名無しさん:2008/06/01(日) 23:16:46
消費電力がやばすぎると思う
399デフォルトの名無しさん:2008/06/01(日) 23:17:36
>>398
お前そんなネガ発言すると
このスレをN房の溜まり場にすっぞコラ?
400デフォルトの名無しさん:2008/06/01(日) 23:53:38
400Wゲトー
401デフォルトの名無しさん:2008/06/02(月) 00:09:32
IU鯖で使えるくらいになってほしいとこだよなあ
402188:2008/06/03(火) 12:50:08
今頃になって説明の間違いに気づいた……

>188の説明において、途中に出てくる分散と共分散の式が全て(n-1)で割られてないや。
相関係数の段階では分母子に出てくるから消えてなくなるんで忘れていた。
スレ違いだけど間違いを放置するのも難なんで念の為。
# Excelの分散は分母が(n-1)で、共分散は分母がnなんて仕様なのに気づいて、ここを思い出した。
403デフォルトの名無しさん:2008/06/09(月) 19:12:05
CUDAを使ったプログラムは専用ドライバが入っていない環境では動かないですか?
配布は無理がありますか
404デフォルトの名無しさん:2008/06/09(月) 23:32:27
っ[knoppix for CUDA]
405デフォルトの名無しさん:2008/06/09(月) 23:55:59
普通に使うWindowsソフトの高速化として使うものではないと
406デフォルトの名無しさん:2008/06/12(木) 15:49:19
最新のnVIDIAドライバにだったら入ってるでしょ
407デフォルトの名無しさん:2008/06/12(木) 16:34:56
でも手軽にCUDAテクノロジを使えるのソフトというのも面白いね。
408デフォルトの名無しさん:2008/06/12(木) 16:36:45
>>406
最新のnVIDIAドライバにはCUDAが使える機能が入ってるってこと?
409デフォルトの名無しさん:2008/06/13(金) 00:12:22
スレチなんですけど、ほかに質問できそうなところがなくて・・

nVIDIA のグラボで水平スパンやDualViewの設定をアプリから制御する API みたいなのはあるのでしょうか?

アプリケーション起動時に自動でそのあたりを設定したいのですが。
410デフォルトの名無しさん:2008/06/13(金) 00:55:07
あると思うけど、しらね。NVIDIAに聞いたら?
411デフォルトの名無しさん:2008/06/13(金) 09:59:32
CUDAは別途ドライバが必要
Geforx8以上ならドライバ入れれば動くけど
一般ユーザーにドライバ入れるなんて作業が簡単に出来るわけないので
ソフトとして配布するのは無理じゃないかな
専用のインストーラーでも作るなら別だろうけど
412409:2008/06/13(金) 10:11:50
>>410
以前 別件でnvidiaジャパンに問い合わせてみたけどシカトされたからなあ。
とりあえず ELSAジャパンにメールしてみました。
413デフォルトの名無しさん:2008/06/13(金) 11:31:55
なんで標準ドライバにCUDAのドライバ入れとか無いんだろう・・・・
414410:2008/06/13(金) 11:50:33
>>412
あ、やっぱり?w
1000枚単位の客じゃないと相手にしないって噂は本当だったか<NVIDIA
ELSAもどうだろ。最近連絡くれなくなったからなぁ。
415デフォルトの名無しさん:2008/06/13(金) 12:31:56
NVIDIAジャパンは営業ばっかで技術スタッフ皆無だからな
416デフォルトの名無しさん:2008/06/13(金) 16:51:49
>>411
そうなんすかー
>>413
ですよねー

配るならDirectXやOpenGLでやるしかないということか。

417409:2008/06/13(金) 17:33:23
>>410
エルザから返事がきましたよ!

>基本的には制御不可能かと思われます。

泣ける。あとは nVIDIA のデベロッパーサイトのリンク。号泣。
1000枚とはいわんけど、30枚くらいは買ってるんだがなあ。
418デフォルトの名無しさん:2008/06/13(金) 22:17:30

だから、最初からドライバの入ってる
knoppix for CUDA と一緒に配布すれば
良いじゃん。
419デフォルトの名無しさん:2008/06/13(金) 22:51:47
ドライバ内の公開向けには作ってない制御APIを、
公開しろとか騒いでも無駄だと思うぞ。
ドライバのバージョンでコロコロ変わってもおかしくないもんだし。
420デフォルトの名無しさん:2008/06/17(火) 09:29:37
GPUはin-orderですかそれともout-of-orderですか?
421デフォルトの名無しさん:2008/06/17(火) 10:41:22
ミクロではインオーダ
マクロではアウトオブオーダ

CUDAで見えるレベルだったらOoOと思っといてよい。
422デフォルトの名無しさん:2008/06/17(火) 10:42:39
速攻でミスった。

× CUDAで見えるレベルだったらOoOと思っといてよい。
○ 〜キホンインオーダ。ただしコンパイラはそれなりの最適化を施す。
423デフォルトの名無しさん:2008/06/17(火) 15:03:34
>>417

今のバージョンで使えるかどうかはわからんけど、NVControlpanel(nvcpl.dll)のAPIはある。

ttp://developer.download.nvidia.com/SDK/9.5/Samples/DEMOS/common/src/NvCpl/docs/NVControlPanel_API.pdf

年代からして、Vistaはおそらく無理。
424デフォルトの名無しさん:2008/06/17(火) 18:41:39
CUDAのサイトがリニューアルしてるぞ。
賛否両論あるとおもうが、とりあえず整理されている。
425デフォルトの名無しさん:2008/06/17(火) 19:29:20
ROPユニットとストリームプロセッサの違いって何?
426デフォルトの名無しさん:2008/06/17(火) 23:00:58
>>424
見た見た。

そして、例によってCUDA-Enabled ProductsにGTX280/260が載っていない罠。
427デフォルトの名無しさん:2008/06/17(火) 23:37:37
GTX280 なんすかこれw

Vipperより糞じゃんw終わってるな
428デフォルトの名無しさん:2008/06/18(水) 00:36:52
>>413
>>416
最新のドライバから統合するようになったみたいだよ
ttp://www.nvidia.co.uk/object/winxp_177.35_whql_uk.html
提供されてるのが200シリーズ向けだけなので現在確かめようがないけど
429デフォルトの名無しさん:2008/06/18(水) 00:39:29
ん、いや統合はvistaだけなんだろうか・・・?
ttp://www.nvidia.co.uk/object/winvista_x86_177.35_whql_uk.html
こっちにははっきり
Adds support for CUDA? Technology.
と記述されてる
430デフォルトの名無しさん:2008/06/18(水) 04:25:53
PhysXとCUDAは同時に使えますか?
431デフォルトの名無しさん:2008/06/18(水) 07:35:59
ゲロビディア終わったなw
432デフォルトの名無しさん:2008/06/18(水) 19:53:32
だれかgtx280でcudaやったやつおらんのか。
433デフォルトの名無しさん:2008/06/18(水) 22:38:05
ゲロビディア氏ね
434デフォルトの名無しさん:2008/06/19(木) 10:43:41
>>432
やってみました。確かに速いが
435デフォルトの名無しさん:2008/06/20(金) 13:31:41
>>434
確かに早いが?。。。その先が気になる。
すまないが、他のボードとの比較とかの情報があるととても嬉しい。
436デフォルトの名無しさん:2008/06/20(金) 16:17:10
発熱が凄いってこったろう
GPUとしては今はラデのほうが良いみたいね。
Brook+ってどうなのよ?
438デフォルトの名無しさん:2008/06/20(金) 23:18:08
実用にはまだちょっと厳しい。
F@HはBrook+で書いてるし使えないこともないってレベル。
今のところOpenGLやDirectXと協調出来ないからそこも問題かな。
439デフォルトの名無しさん:2008/06/21(土) 00:01:39
これから暑い夏を迎えて、発熱が凄いボードはどう評価されていくか興味深いね。
440デフォルトの名無しさん:2008/06/21(土) 00:49:53
洞爺湖サミットでNvidia名指しで批判されるらしい
だから焦っていろいろアピールしてるらしい
環境もっとも悪い製品を作ってる会社の代表格て
声明が盛り込まれる予定
441デフォルトの名無しさん:2008/06/21(土) 13:03:24
442デフォルトの名無しさん:2008/06/22(日) 19:11:15
cudavideodecodeなんて今更何に使うんだと思ったけどDXVAがないOS向けか
443デフォルトの名無しさん:2008/06/27(金) 21:18:32
倍精度計算したいどの変数使うの?
444デフォルトの名無しさん:2008/06/27(金) 22:24:33
すいません。助けてください。
VC2005でサンプルをビルドしようとすると以下のエラーが出ます。

Visual Studio configuration file '(null)' could not be found for installation at 'C:/Program Files (x86)/Microsoft Visual Studio 8/VC/bin'

コンフィグファイルが必要なのかと思い、C:/Program Files (x86)/Microsoft Visual Studio 8/VC/binの下にnvcc.profileを
置いてみたのですが結果は変わりませんでした。

どうしたらいいですか。

OSはwindows xp 64で、CUDAのtoolkitとSDKは1.1です。
445デフォルトの名無しさん:2008/06/27(金) 23:14:43
>>444
cuda_build_rule.zip入れた?

倍精度で計算ってどうやって書けばいいの?
446デフォルトの名無しさん:2008/06/29(日) 14:05:37
大学の課題でで使うことになったのでマニュアル読んでみたけど、日本語訳がファッキンなのは仕様ですか?
冗談抜きで英語の方が判りやすかったw
447デフォルトの名無しさん:2008/06/29(日) 14:11:15
>>446
授業ページおしえてください
448デフォルトの名無しさん:2008/06/29(日) 14:18:00
>>447
うちの大学の教授が俺用に30秒で考えて出した課題なので、特に授業ページはありません。 ごめんね。
449デフォルトの名無しさん:2008/06/29(日) 14:18:03
>>446
授業ページおしえろゴラァアアアアアア
450デフォルトの名無しさん:2008/06/29(日) 14:18:13
>>446
NVIDIAジャパンには、まともな技術者がいないので仕方ありません。
尤も、営業にもまともなのがいるかどうか些か疑問ではありますが。
451デフォルトの名無しさん:2008/06/29(日) 14:24:24
Gerovidia Japanには屑営業しかいねーじゃん
実際CUDAとか国内研究で利用していて
すごそうなのは、Gerovidia本社から来るし
452デフォルトの名無しさん:2008/06/29(日) 14:46:57
cudaのおかげで英語力が向上しました
453デフォルトの名無しさん:2008/07/01(火) 11:15:26
cudaのおかげで彼女ができました
454デフォルトの名無しさん:2008/07/01(火) 15:54:31
double float はいつ???
455デフォルトの名無しさん:2008/07/07(月) 14:14:38
いつって、2.0β使えばすぐできるんじゃないの? エミュで。
456デフォルトの名無しさん:2008/07/09(水) 18:26:35
CUDAが.NETから使えるようになってるらしいので興味持ったのですが(今現在動作環境なし)
C#とかVSとかとの親和性とか、ネイティブと比べて処理性能どれくらいかとか、試した人いたら教えてください

CUDA.NET
http://www.gass-ltd.co.il/products/cuda.net/
457デフォルトの名無しさん:2008/07/09(水) 22:07:47
ランタイムだけじゃね
458デフォルトの名無しさん:2008/07/10(木) 22:56:51
アセンブリ読み込めば後はどの言語でも使えてしまうんですかね
PowerShellやIronPython(pyCUDAというのもあるみたいですが)から使えたりしたら面白そう、面白そうなだけですけど
459デフォルトの名無しさん:2008/07/11(金) 15:12:02
超初心者ですが質問お願いします。

自分のパソコンにグラボが2枚刺さっているのですが
CUDAで使うグラボを選択するにはどうしたらいいんですか?

めっちゃ初歩的な質問ですが回答お願いします。
460デフォルトの名無しさん:2008/07/11(金) 16:42:36
サンプルにあるだろ
461デフォルトの名無しさん:2008/07/13(日) 02:02:23
さわりだけだけど日本語資料みっけた
ttp://www.easize.jp/download/Workshop20071003.pdf
462デフォルトの名無しさん:2008/07/13(日) 21:18:58
>>461
今月のインターフェイス8月号にも似たような資料があったYO!

誰かGpuCV使ったやついねーか…
makeできねーん、OpenCVで聞けばいいのかこっちなのかわかんね
463デフォルトの名無しさん:2008/07/13(日) 21:55:32
>>462
環境書かけよくず
464デフォルトの名無しさん:2008/07/13(日) 22:34:52
>>462
釣られてやったけどVS2005、VS2008
SuseLinux RedhatES 5.0 Ubuntu 8.04 CentOS 5.1で
ビルドできたんだがw

ビルドすらできないPGってカスもいいとこだろw
465446:2008/07/15(火) 06:03:10
うわぁぁぁぁファッキンなのは日本語訳だけかと思っていたらSDKもだったぁぁぁぁ

誰だcutil_math.hの float / float[2,3,4]の演算子オーバーロード書いた馬鹿は
俺の3時間返しやがれ
inline __host__ __device__ float2 operator/(float s, float2 a)
{
  float inv = 1.0f / s;
  return a * inv;
}

ひょっとしてcuda SDKのcommon/inc/以下のヘッダーってわりと危険だったりする?
466462:2008/07/15(火) 06:50:30
>>463-464
ちょっwwwww

環境はCentOS 5.19 64bit
GpuCV 0.4.2 driverはcudaのやつ174.55

gpucv,resources,sugoitoolsをダウンロードして

ttp://picoforge.int-evry.fr/cgi-bin/twiki/view/Gpucv/Web/WebHomeDownloadResources#SugoiTools
を参考にファイルコピー

cp -Rf bin\gnu\ ..\resources\bin\gnu\
cp -Rf lib\gnu\ ..\resources\lib\gnu\
は sugoitools/bin/gnu,libが無いので実行できず無視して↓のみやった
cp -f include\SugoiTools\*.h ..\resources\include\SugoiTools\
cp -f include\SugoiTools\*.inl ..\resources\include\SugoiTools\
cp -f include\SugoiTracer\*.h ..\resources\include\SugoiTracer\

しかしgpucvに入って./createSolutions.shで

./createSolutions.sh
Generating GNU makefiles:
...GPUCVHardware
...GPUCVTexture
...GPUCVCore
...GPUCV
...GPUCVConsole
...GPUCVSimpleApp
を読み込めません: そのようなファイルやディレクトリはありません
を読み込めません: そのようなファイルやディレクトリはありません
sed: ./projects/gnu/example/Makefileを読み込めません: そのようなファイルやディレクトリはありません
467462:2008/07/15(火) 06:58:15
無視してmakeしても

#make
==== Building CUDA plugin ====
==== Building GpuCV ====
==== Building GPUCVHardware ====
GLBuffer.cpp
<コマンドライン>:1:20: 警告: missing whitespace after the macro name
/usr/include/GL/glxew.h:150: error: ‘GLulong’ has not been declared
make[2]: *** [../../../Debug/gnu//GPUCVHardware/GLBuffer.o] エラー 1
make[1]: *** [GPUCVHardware] エラー 2
make: *** [SUB_DIR_ALL] エラー 2
468デフォルトの名無しさん:2008/07/15(火) 07:35:41
>>465
cutilはサンプル集だと思ってた方がいい。
469デフォルトの名無しさん:2008/07/15(火) 19:02:35
カーネル内で二次元配列を使うと

Advisory: Cannot tell what pointer points to, assuming global memory space
というwarningが出るのですが、どのようにすれば出なくなるのでしょうか?
470デフォルトの名無しさん:2008/07/16(水) 00:38:28
>>469
「カーネル内」ってどこのこと?
いっそ再現する最小限のソースを貼ってくれた方が話が早そうな希ガス。
471デフォルトの名無しさん:2008/07/16(水) 01:02:45
>>467
必要なもの
premake(これはビルドするかパッケ拾ってくるのじゃいいな
OpenCV
libglew1.5-dev

SugoiToolsとかいうふざけた名前のライブラリSVNから盗んでくる
ちなみにこのSugoiBakaToolsを作ったやつはUnixとLinuxの.soを作る流儀を
知らん白雉なので許してやれ

svn co https://sugoitools.svn.sourceforge.net/svnroot/sugoitools/trunk sugoitools
cd sugoitools
premake --file Premake.lua --target gnu --os linux
make

これで./libにlibSugoiTools.soが生成される。

次に、GPUCVをSVNから盗んできてくれ

cd gpucv
premake --file Premake.lua --target gnu --os linux
cp ../sugoitools/lib/gnu/*.so ./lib
ln -s ../sugoitools/include/gnu/SugoiTools SugoiTools
ln -s ../sugoitools/include/gnu/SugoiTracer SugoiTracer

make

後は必要なライブラリ入れるだけでうまくいく
いかなかったら>>470にゴルァしてくれたらまた何かかくぉ?
472462:2008/07/16(水) 11:23:00
>>471
うひょーPremakeの使い方を始めて知ったお!

でもGPUCVTextureのコンパイルで止まる…

>必要なもの
>premake(これはビルドするかパッケ拾ってくるのじゃいいな
>OpenCV
>libglew1.5-dev

premake,OpenCVはインストしました。libglew1.5-devがCentOSで
rpmがなかったので
ttp://chihara.naist.jp/people/STAFF/imura/computer/OpenGL/glew/disp_content
を参考に導入しました

>svn co https://sugoitools.svn.sourceforge.net/svnroot/sugoitools/trunk sugoitools
>cd sugoitools
>premake --file Premake.lua --target gnu --os linux
>make

>これで./libにlibSugoiTools.soが生成される。

>次に、GPUCVをSVNから盗んできてくれ

>cd gpucv
>premake --file Premake.lua --target gnu --os linux


ここまで完璧です!
473462:2008/07/16(水) 11:27:58
>cp ../sugoitools/lib/gnu/*.so ./lib
コピー先は../resources/lib/gnuでしょうか、
でもgpucv/lib/gnuのフォルダにGPUCVHardwared.soができてるのですが。。。
うーん、両方(/resourcesと/gpucv/lib)試しましたがうまくいきません。。。

>ln -s ../sugoitools/include/gnu/SugoiTools SugoiTools
>ln -s ../sugoitools/include/gnu/SugoiTracer SugoiTracer
コピー先は../resources/include/SugoiTools等ですよね。。
こっちは/gpucv/Sugoitoolsで試してません
コピー先は
ttp://picoforge.int-evry.fr/cgi-bin/twiki/view/Gpucv/Web/WebHomeDownloadResources#SugoiTools
を参考に決めました。。

でmakeすると
# make
==== Building CUDA plugin ====
==== Building GpuCV ====
==== Building GPUCVHardware ====
..中略..
Linking GPUCVHardware
==== Building GPUCVTexture ====
DataDsc_GLTex.cpp
..中略..
TextureGrp.cpp
<コマンドライン>:1:19: 警告: missing whitespace after the macro name
../../../src/lib/GPUCVTexture/TextureGrp.cpp:100: error: prototype for ‘bool TextureGrp::AddTextures(DataContainer**, unsigned int)’ does not match any in class ‘TextureGrp’
../../../include/GPUCVTexture/TextureGrp.h:118: error: candidate is: bool TextureGrp::AddTextures(DataContainer**, size_t)
make[2]: *** [../../../Debug/gnu//GPUCVTexture/TextureGrp.o] エラー 1
make[1]: *** [GPUCVTexture] エラー 2
make: *** [SUB_DIR_ALL] エラー 2

うわああああああああああんごrrrrrっるうううううううううううああああああ
474デフォルトの名無しさん:2008/07/16(水) 23:05:01
>>473
GPUCVの馬鹿どもはMakefileすら満足にかけないみたいだから
あれだけど

premake間違ってるからちょっと修正
premake --file Premake.lua --target gnu --os linux --cuda

あとコンパイル関係のログは一番上見て
○○.h No sucha file or directoryって出てるはず
きちんとログは最初から理解していきましょう。

以下の場所にGPUCVxxxx.makだかって糞Makefile入ってるから
ここで○○.hが足りないって言われたら -Iでパス足してやって
vim ./project/gnu/lib/

それでうまくいくはず、この作業はちなみに6回ぐらい繰り返すので
GPUCVプロジェクト市ねって500回唱えるのがいい
475デフォルトの名無しさん:2008/07/16(水) 23:59:18
sugoitoolsってなんだよw馬鹿にしてんのか?
と思ったらマジで日本語の「凄い」から命名してんだな
ttp://sugoiaware.free.fr/
476デフォルトの名無しさん:2008/07/18(金) 13:45:05
>>475
どっかのインターフェイスカードかとおもったよwww
477デフォルトの名無しさん:2008/07/18(金) 15:48:34
確かにw
478デフォルトの名無しさん:2008/07/18(金) 16:00:58
>>475
カナダにはSUGOIっていうスポーツウェアブランドもある
それくらいで驚いちゃ駄目だw
479デフォルトの名無しさん:2008/07/23(水) 17:22:30
Windowsなんだけど、出来上がったexeって、
他のPCで動かすためには、exe以外に必要なものって何?

cudart.dllが無いって言われるのは、CUDA対応カードじゃないから?
480125:2008/07/23(水) 19:17:13
cudart.dllをsystem32に放り込むかpath通せ。
481デフォルトの名無しさん:2008/07/23(水) 19:27:03
.cuファイルって外部のincludeファイルは読み込めないのでしょうか
template.cuに
#include <cv.h>

と1行書き加え、(OpenCVという画像処理用のライブラリです)

Makefileに
# OpenCVのためにパスを通す
NVCCFLAGS+=`pkg-config opencv --cflags`
LIB+=`pkg-config opencv --libs`

でMakeすると
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/include/mmintrin.h(49): error:
identifier "__builtin_ia32_emms" is undefined

/usr/lib/gcc/x86_64-redhat-linux/4.1.2/include/mmintrin.h(62): error:
identifier "__builtin_ia32_vec_init_v2si" is undefined


....................というのがダラダラ続く…

Error limit reached.
100 errors detected in the compilation of "/tmp/tmpxft_000010b9_00000000-4_template.cpp1.ii".
Compilation terminated.
make: *** [obj/release/template.cu_o] error 255

環境は
OS:CentOS 5.2 64bit
CUDA driver: NVIDIA Driver for Redhat Enterprise Linux 5.x with CUDA Support (174.55)
cuda toolkit:CUDA Toolkit version 1.1 for Redhat Enterprise Linux 5.x
CUDA SDK: CUDA SDK version 1.1 for Linux
です。よろしくお願いします
482デフォルトの名無しさん:2008/07/24(木) 00:32:59
>>481
普通になんでもインクルードできるよ。
だからこそ、cv.h経由か何かで読み込んでも解釈できないmmintrin.hまでインクルードしてしまっているわけで。
取り敢えず、cv.hが何をインクルードしているのか順に見てみたら?
483デフォルトの名無しさん:2008/07/24(木) 00:33:42
どうみても、Intrinsicの関数が無いと言ってるだろ
484デフォルトの名無しさん:2008/07/24(木) 00:34:38
>>479
ドライバ入れてもらわないとダメじゃないのか
485デフォルトの名無しさん:2008/07/24(木) 14:55:26
普段Radeonを使ってるんだけど、CUDAを使うならやっぱり取り替えなきゃダメかな?
もう一枚追加して普段はRadeonでCUDA用にだけGeforceを使えたらと思ったんだけど…
486デフォルトの名無しさん:2008/07/24(木) 15:56:37
最近CUDACUDA言ってるやつ多いけど、ShやBrookGPUも忘れないでね。
487デフォルトの名無しさん:2008/07/24(木) 15:58:31
>>485
ドライバがバッティングしないなら、その方が楽だね。GPU一枚だと、CUDAで暴走したときに画面が崩れる場合がある。
# ついでに言えば、Radeonで3Dアプリを動かしていてもCUDAの処理速度への影響が出にくいと言うメリットもある。
488デフォルトの名無しさん:2008/07/24(木) 16:26:48
SIGGRAPH2008でいろいろやるらしーよ
民主化だってさ
http://www.siggraph.org/s2008/attendees/techtalks/sessions.php
489デフォルトの名無しさん:2008/07/24(木) 21:50:54
GPGPUやってるやつらの論文
精度甘くてうそばっかりなんだけど

クイックソートレベルで嘘あるって
なんなんだろう

SIGRAPHも悪の片棒担いでるし
国内の正会員も歯切れ悪い胡散臭い爺多いし
あいつら本当に計算機科学全般に害悪な
ことばっかりしはじめたなぁ
490デフォルトの名無しさん:2008/07/24(木) 21:58:06
>>489
具体的に晒してください
491デフォルトの名無しさん:2008/07/24(木) 22:24:38
>>490
さらせねーよw俺社会的に終わる
それだけはヤダ
492デフォルトの名無しさん:2008/07/24(木) 22:26:40
>>491
つまり、いいがかりなんですね
493デフォルトの名無しさん:2008/07/24(木) 22:27:06
CPUに比べて○○倍ってよく見るけどCPUの方は最適化してなかったり1コアしか使ってなかったりやけに古いCPU使ってたり
数字をよく見せるために胡散臭いのはあるな
494デフォルトの名無しさん:2008/07/24(木) 22:27:10
>>487
ドライバの干渉が一番の不安なんだよなあ。
Geforce2枚刺して用途別にするのが一番いいんだろうけど完全に環境を変えなきゃいけないし…
495デフォルトの名無しさん:2008/07/24(木) 22:32:13
>>493
海外のも見てみてよ
査読ありの論文でレベル的ほとんど査読無しと
変わらないヒドイ質の論文多いから

GPUへのフェッチ性能とかそれのオーバヘッド
0扱いとかいう凄まじい論文あるぞ
496デフォルトの名無しさん:2008/07/24(木) 22:52:43
>>493
結構同意
CPUの数十倍早くなりました、とあるが
CPU,GPU間の転送時間を含んでいませんとかアホかと
497デフォルトの名無しさん:2008/07/24(木) 23:17:06
>>489
SIGGRAPHはもう正しく論文を精査できてない。
で、年度によってはとりあえず載せちゃえってスタンス。
それでも多過ぎてSIGGRAPH ASIAやっちゃえって事に。
498デフォルトの名無しさん:2008/07/24(木) 23:19:53
あのーここは学会加入してないとだめなのでしょうか
皆さん頭のよさそうな話ばかりで困ります
499デフォルトの名無しさん:2008/07/24(木) 23:27:22
同意する点もあるけれど、言いがかりに近いと思う点もある。

転送時間を含まないケースでも、CUDAに関して言えば転送時間を隠蔽できる可能性もあるし
初回だけで中間に転送がいらないケースもあると思う。

実際のところ、意味があるかはさておき単純なロジックを組んでみるとちゃんと理想値に近い時間で
処理できるのは事実だし、最新でないCPUでもGPUを使って高速化するという運用はありだと思うのだけど。

まぁ、一般論で片付けられる問題ではないから個別にレスするのは控えるけどね。
500デフォルトの名無しさん:2008/07/24(木) 23:32:06
>>499

>転送時間を含まないケースでも、CUDAに関して言えば転送時間を隠蔽できる可能性もあるし
>初回だけで中間に転送がいらないケースもあると思う。
CUDA内部の処理と
CUDA-バス-キャッシュ-CPU間の話どっちを
しているわけなの?厳密に答えてくれないかな?思うじゃなくて

そこ厳密に計測すると汎用的なアルゴリズムになるとせいぜい40GFぐらいしか
出てない。8CoreのXeon2台MPIするよりも全然遅くなっちゃうんだけど
501499:2008/07/24(木) 23:36:14
ついでに、WoodcrestXeon3GHzで8800GTを使った場合の実運用での処理時間について一言。
行列演算みたいなGPU向きの演算と違ってGPUには不利な演算なのだけど、
単体演算ではCPUのみに対してGPUを使った場合は約2倍の処理能力が得られた。
尤も、ファイル処理なども含めた実運用状態での処理能力比は1.3倍。
まぁこんなもんでしょってことで。要は、如何にGPU向きの演算に落とし込むかだね。
502デフォルトの名無しさん:2008/07/24(木) 23:43:36
スレチだしそろそろ自重しようぜと過疎スレで言ってみる
503デフォルトの名無しさん:2008/07/24(木) 23:44:14
>>501
それは何コア使って1.3なの?
SSEも入れて、TBL使ってMathLib使った場合と
比較して1.3倍?
504499:2008/07/24(木) 23:46:29
>>500
「汎用的なアルゴリズム」で40GFlops出て、8coreXeon2台のMPIと勝負できるならいい方なんでない?
8coreXeonでかりかりにチューニングしたら、GPUなんて使わない方が速くて当然だと思う。
そういうCPUと勝負するなら、GPU単体の性能じゃなくてCPU+GPUでCPUより「何割」速くなるかでしょ。

あー、書き忘れてた。>501に書いたのは2core*2CPUのシステムで、CPUのみとCPU+GPUの処理能力比ね。
CPUでも1coreだけ使うよりは4core使った方が当然4倍近く速いのだけど、そこにGPUを足すことで
更に1.3倍になったということ。1coreだけと較べてどのくらい速くなったかは失念している。
1coreのみを1とすると、2core2CPUで3倍、それにGPUを足して4倍位じゃなかったカナ。
505デフォルトの名無しさん:2008/07/25(金) 07:53:05
具体的な論文名出せよ、そうしないから話がややこしくなる
506デフォルトの名無しさん:2008/07/25(金) 08:59:48
>>482

>取り敢えず、cv.hが何をインクルードしているのか順に見てみたら?
すみません、こういう時どう対処していいのかわからなくて。
includeしていく順番を探せば何か見えてくるのでしょうか

cv.h - cxcore.h - cxtypes.h - emmintrin.h - xmmintrin.h - mmintrin.h

とつながっていました。mmintrin.hはMMX?xmmintrin.hはSSEでしょうか
私の直感だとこのくらいの解釈が限界です…

includeファイルを順にコメントアウトしてみましたがやはり通らず…
gccではコンパイルを通っているのにnvccではダメということは
MMX?が使えないようになっているのでしょうか

__builtin_ia32ほげほげが何者なのかさっぱりです…

ググるとWinXPではOpenCVが使えているっぽいので
XPのnvccではMMXが使えてLinuxのは使えないのでしょうか…
507デフォルトの名無しさん:2008/07/25(金) 10:18:10
何か足りてないんだろうね。
508デフォルトの名無しさん:2008/07/25(金) 12:31:41
コンパイルできるようになりました。

cxtypes.hの中でSSE2がオンになっている場所
#if defined WIN64 && defined EM64T && (defined _MSC_VER || defined CV_ICC) \
|| defined __SSE2__ || defined _MM_SHUFFLE2
#include <emmintrin.h>
#define CV_SSE2 1
#else
#define CV_SSE2 0
#endif

を見つけました。見てみるとWIN64のときだけオンになるみたいで…
ここで
#include <emmintrin.h>
#define CVSSE2 1
をコメントアウトして
#define CVSSE2 0
と書いたらコンパイルできるようになりました。
Vistaではこのようなことをしなくても
コンパイルできたのでは32bitからだったのでしょうか…
509デフォルトの名無しさん:2008/07/25(金) 12:44:05
>>509
お疲れさん。そう言えば、Windowsでは64ビットでコンパイルできないってレスがあったからその辺りも関係するかもね。
510デフォルトの名無しさん:2008/07/26(土) 01:31:05
SIGGRAPHではないがCanny Edge Detection on NVIDIA CUDAなんてのを読むとなかなか笑える。

・Matlab並に速いアセンブラで最適化されたOpenCVと比較したよ!
 ~~~~~~~~~~~~~~~pugya-
・使ったCPUはIntel Core2 CPU 6600 @ 2.40 GHzだよ!
                   ^ EなのかQなのかはっきりしろと。
                    ま、所詮OpenCVだから結果に影響ないけどw
・GPUはGeForce 8800 GTX, 768 MB、OCなんてしてないよ!
                       ~~~~~~~~~~~~~~~~~~~~研究レベルでOCを考慮するッ
                                    そこにシビれる!あこがれるゥ!
511デフォルトの名無しさん:2008/07/27(日) 02:49:51
研究なら並列アルゴリズムだけ書いておけばいいんじゃね
512デフォルトの名無しさん:2008/07/28(月) 11:33:26
opencvってアセンブラで最適化されてたっけ?
513デフォルトの名無しさん:2008/07/28(月) 19:52:47
>>512
移植性考えてまったくされてないよ
デフォルトではシングルスレッドだからマルチコアも使われてない
514デフォルトの名無しさん:2008/07/29(火) 12:41:15
今後GPUはえらい成長遂げるのに対しCPUはもう脚詰まりだから
いきなり8coreXeon2台とGPU一個が張り合えるという事実は大したことだ
後はプログラムの処理内容を最適化させれば良い
515デフォルトの名無しさん:2008/07/29(火) 16:07:34
ハードgf98GX2 *2
ソフトwinXP VS2005
ドライバ cuda2.0β

上記の環境でC++とcudaを混在させることはできるのでしょうか?
キャプチャーカードのSDKがC++なので・・・
516デフォルトの名無しさん:2008/07/29(火) 16:29:57
>>515
ドライバはCUDAじゃねぇぞ。

CUDAの開発では、*.cuのファイルがnvccでコンパイルしてデバイスモジュールとホストモジュールが出力される。
その後リンクするのはVSのリンカになるので、この段階でVSのオブジェクトモジュールとリンクできる。
但し、nvccはベースがgccなのでextern "C"を使うなどの工夫が必要かも知れず。
517デフォルトの名無しさん:2008/07/29(火) 23:27:10
GCC使う以上、素直にLinuxで開発すれば良いのに。
なんでワザワザ苦労してWin糞使うのか?
518デフォルトの名無しさん:2008/07/29(火) 23:49:17
大昔のように、
プログラム開発者=ハード&ソフト環境を自由に整えられる人
じゃないんだよ。
519デフォルトの名無しさん:2008/07/30(水) 02:02:48
nvccってclのバージョンでエラー吐くから
Windowsだとclベースじゃねーの。
520515:2008/07/30(水) 09:46:46
>516
ありがとうございます。自身で試行錯誤してみます。
>517
MFCを使ってwindowsアプリケーションを作るのにwinの方がいいかと思いまして
521デフォルトの名無しさん:2008/08/13(水) 00:43:16
対応カードのドライバがXP〜しか対応してないみたいだけど、Win2kでプログラミングしてる人はいますか?
余ったPCでCUDAをやってみようと思ってるんですが>>173あたりを見ても対応して無さそうで…
522デフォルトの名無しさん:2008/08/14(木) 01:03:10
余ってないPCに二枚挿した方がよくね?
523デフォルトの名無しさん:2008/08/14(木) 07:57:32
余ったPCにLinux載せちゃうのがよくね?
524デフォルトの名無しさん:2008/08/14(木) 20:52:04
余ったPCを俺にくれればよくね?
525デフォルトの名無しさん:2008/08/19(火) 14:01:19
いつのまにかにノート向けも対応リストに載ってるのね
526デフォルトの名無しさん:2008/08/19(火) 21:25:04
527デフォルトの名無しさん:2008/08/20(水) 08:54:18
>>515
.NET for CUDA つうのがあるみたいなんだわ
突撃してみてほしいです。
528デフォルトの名無しさん:2008/08/21(木) 20:11:04
日本版でもBeta2取れたけど相変わらずアナウンスはないな
529デフォルトの名無しさん:2008/08/25(月) 01:43:22
SDK2.0入れて見たんだが、threadMigrationってサンプルプログラムが
"cuCtxDestroy","cuCtxPopCurrent","cuCtxPushCurrent"が定義されてないってエラー吐いてる。
他のサンプルはコンパイル通るので、インストールが悪いのかSDKが悪いのか分からん。
530デフォルトの名無しさん:2008/08/26(火) 00:27:10
バージョンアップの観察はいいから何か作れよお前らwww
531デフォルトの名無しさん:2008/08/26(火) 00:32:38
作ってるよ〜
仕事だから詳細語れないけど。
532デフォルトの名無しさん:2008/08/26(火) 00:40:43
作ってるけど研究なので言えない
けど上手くいかない
ああああああ

はぁ…
533デフォルトの名無しさん:2008/08/26(火) 00:48:53
研究って学生の卒論ですか?
それとももっと高いレベル?

534デフォルトの名無しさん:2008/08/26(火) 04:37:54
自宅研究員…
535デフォルトの名無しさん:2008/08/26(火) 11:45:11
>>533
CUDAをどう使うかと、論文のレベルは関係ないだろw
536デフォルトの名無しさん:2008/08/26(火) 15:24:13
537デフォルトの名無しさん:2008/08/27(水) 14:26:05
CUDAのビデオ講義、リンクきれちゃってるね
せっかくiPod nano買ったから英語の勉強に聞きたかったのに…
538デフォルトの名無しさん:2008/08/27(水) 22:19:54
2日でCUDAマスターしますた
すごい簡単だなこれ
なんか質問あれば聞いて良いよ
539デフォルトの名無しさん:2008/08/27(水) 22:28:04
>>538
100万桁のπは何秒くらいで計算できますか?
1995年当時のスパコンで5秒らしいですが超えられますか?
540デフォルトの名無しさん:2008/08/27(水) 22:40:52
>>539
やってみないとわかりません
541デフォルトの名無しさん:2008/08/27(水) 23:03:22
CUDAでソートするアルゴリズム思いついた うひょ
542デフォルトの名無しさん:2008/08/27(水) 23:40:53
だれか多倍長をCUDAで効率的に実現する方法教えてくださいー
543デフォルトの名無しさん:2008/08/28(木) 01:21:54
544デフォルトの名無しさん:2008/08/28(木) 03:35:38
>>543
バイオニックソートってやつと同じwww
車輪の再発明かw
545デフォルトの名無しさん:2008/08/29(金) 19:20:37
当方 Mac なんだけど、CUDA 2.0 インスコしてサンプル make したのは
いいんだけど実行しようとすると

dyld: Library not loaded: @rpath/libcudart.dylib
Referenced from: /Developer/CUDA/bin/darwin/release/scalarProd
Reason: image not found
Trace/BPT trap

って出て先に進めない。どういうことなの。。。。。。
UNIX 詳しい人教えて下さい
546デフォルトの名無しさん:2008/08/29(金) 19:43:28
並列に計算して計算結果を1つの変数に合計するってのをやってるんだけど
10回に1回くらい計算結果が狂うのはなぜだ
547デフォルトの名無しさん:2008/08/29(金) 22:37:59
>>546
Atomic関数使ってみるとか・・・後、parallel reductionを読んでみると
良いかも
548デフォルトの名無しさん:2008/08/29(金) 23:27:49
>>546
そういうのはCUDAの最も苦手とするところだ。
全スレッドで同期を取って、代表1スレッドが合計するのが手っ取り早いが遅い。
全スレッドで同期を取って、代表nスレッドがmスレッド分合計してからnスレッド分を合計するのが無難か。
或いは、n個になった時点でCPUに転送してしまう方がいいかもしれない。
549デフォルトの名無しさん:2008/08/29(金) 23:45:31
転送が遅いんだよなあ

550デフォルトの名無しさん:2008/08/29(金) 23:54:56
ストリームを使えば殆ど隠蔽できるよ。
551デフォルトの名無しさん:2008/08/30(土) 00:47:54
>>548
n個分の計算結果を別メモリに退避しておいて1個のスレッドでそれを順次合計するってこと?
552デフォルトの名無しさん:2008/08/30(土) 01:09:07
>>550
kwsk
553デフォルトの名無しさん:2008/08/30(土) 01:18:19
>>551
そのままCPU側へ転送してCPUで合計しろってことでしょ?
554デフォルトの名無しさん:2008/08/31(日) 05:37:24
すんません、日本語版ドキュメントが公開されたってあちらこちらで書いてあるので
公式サイト探したんですが、なんかないっぽいんですが、これってもしかして削除されたの?
555デフォルトの名無しさん:2008/08/31(日) 05:47:06
日本語のマニュアルが必要なほど内容濃くないぞw
556デフォルトの名無しさん:2008/08/31(日) 05:50:28
グローバルメモリを使っても速度に限界を感じたんで、
テクスチャメモリを使ってみたいんですよね

で、そのために日本語ドキュメントも読んでみたかったんすよ
557デフォルトの名無しさん:2008/08/31(日) 07:52:18
テクスチャメモリはグローバルメモリの代わりにはならんと思うが。
共有メモリも使い難いし、定数メモリはデバイスから書けないし。
# 書けないのはテクスチャメモリもそうだけど。
アクセスパターンを見直したほうが医院で内科医?
558デフォルトの名無しさん:2008/08/31(日) 13:22:07
vs2008には対応するんだろうか
559デフォルトの名無しさん:2008/09/01(月) 12:52:26
2.0出たけど対応してなくてがっかりした
560デフォルトの名無しさん:2008/09/01(月) 23:04:36
>>559
俺は結局2005入れた。
561デフォルトの名無しさん:2008/09/03(水) 07:35:45
>>549
もれのやってるのでは転送に3msec、演算に400msecくらいなので
全然オーバーヘッドにはなってないすわ。演算の負荷小さ杉なんでは。
>>556
書き換え不要な定数行列をまとめて__constant__に置いて見たすが
ほんの3%くらいしか変わらなかったすわ。

両方とも、もれのコードがだめな可能性ももちろん有るけど。大有りッスけど。
562デフォルトの名無しさん:2008/09/03(水) 12:19:40
CUDAじゃなきゃ困るって用途がいまいち思いつかない
563デフォルトの名無しさん:2008/09/03(水) 14:50:39
それは、CUDAじゃなく直接GPUを扱うほうがいいということか、AMDのStreamナントカでもいいということか、なんだんだ?
564デフォルトの名無しさん:2008/09/05(金) 04:17:53
>CUDAじゃなきゃ困るって用途がいまいち思いつかない
なら使わなきゃいい
565デフォルトの名無しさん:2008/09/05(金) 09:42:01
100万回以上回るループとか、
何千回単位の二重・三重ループが有るならCUDAサイッコォゥンギモッヂイイイィイ
566デフォルトの名無しさん:2008/09/05(金) 12:40:56
>>564
バーカwwwwwwwwwww
頭悪いなお前
567デフォルトの名無しさん:2008/09/05(金) 14:57:45
>>565
確かに
初体験のあの気持ち・・・忘れられない・・・
568デフォルトの名無しさん:2008/09/05(金) 19:25:13
気持ちいのは分かるけど普段使わないようなものだしね
既にあるものを自力でCUDA対応させるのも気力が沸かないしね
倍精度浮動少数が扱えないしねwww
569デフォルトの名無しさん:2008/09/05(金) 19:40:59
>>568
CUDA 2.0は?単精度に比べてかなり速度が落ちるらしいけど。
570デフォルトの名無しさん:2008/09/05(金) 19:43:46
ハードの問題だから無理だよ
やってみた
571デフォルトの名無しさん:2008/09/05(金) 19:58:03
>>570
GT200世代じゃないとハードの問題で使えないのか・・・
572デフォルトの名無しさん:2008/09/06(土) 01:17:51
二重ループは兎も角、三重ループとなるとCUDAは苦手だと思うが。
一重は並列にしても、二重ループが残ってしまう。
最近のIntelCPUはループが無茶苦茶高速だから、WoodcrestでOpenMPでも使われたら太刀打ちできなくなる。
573デフォルトの名無しさん:2008/09/06(土) 02:59:57
CUDAをループの自動並列化だと思っていらっしゃるw
574デフォルトの名無しさん:2008/09/06(土) 03:22:15
ところで2.0正式版は皆さん安定してる?
うちは、テクスチャmemoryがなんだか変。
エミュで正しく動いているのに実機だと挙動がおかしい。
575デフォルトの名無しさん:2008/09/06(土) 13:32:41
CUDAでクラスが使えないのが痛いな
木構造系のアルゴリズムは並列処理にかなり向いてるし応用範囲も広いのにな
CUDAで無理やりやろうとすると無駄な処理をわざとさせないといけなくなるし
プログラムがむちゃくちゃ汚くて見てられない
576デフォルトの名無しさん:2008/09/06(土) 14:08:13
PyCUDAかCUDA.NETあたりを使ってぜひ感想を聞かせて
577デフォルトの名無しさん:2008/09/09(火) 02:19:48
CudaArrayに、48ビットや24ビットのRGBのデータを入れて、テクスチャにバインドできている方います?
うちではうまくいかないんですよね。
578デフォルトの名無しさん:2008/09/11(木) 13:36:09
CUDAってCPUモードがあるけどドライバが無い環境だと自動的になるの?
579デフォルトの名無しさん:2008/09/11(木) 22:59:45
エミュレーションモードの話かな?
自動的に切り替わるほど融通は利かないよ。
580デフォルトの名無しさん:2008/09/11(木) 23:09:42
dim3 threads(100,1);
method<<<1, threads>>>();
これはいけるんだけど

dim3 threads(100,100);
method<<<1, threads>>>();
ってやると一回も呼ばれないんだけど
何か勘違いしてる
threadIdx.xとyで2次元的に呼び出せるんじゃないの?
581デフォルトの名無しさん:2008/09/11(木) 23:12:59
スレッド総数は512まで(詳細はdeviceQueryを実行するべし)。
従って、100*100は拙い。
582デフォルトの名無しさん:2008/09/11(木) 23:16:39
追記:
その条件だけなら、dim3 threads(ThreadsOfBlock, ThreadsOfBlock)にして
dim3 blocks(100 / ThreadsOfBlock, 100 / ThreadsOfBlock)を追加して
method<<<blocks, therads>>>()するのが定番かな。
勿論、methods<<<100, 100>>>()でもいいけど効率は若干落ちることになりそう。
583デフォルトの名無しさん:2008/09/12(金) 00:23:28
method<<<dim3(100,100),1>>>();
にしたらいけた
もしやブロックって並列処理じゃないの?
584デフォルトの名無しさん:2008/09/12(金) 01:06:40
GPUのプロセッサからあぶれた分は時間軸方向に並列になります。
585デフォルトの名無しさん:2008/09/12(金) 13:31:48
whetstoneとかのベンチマークをCUDAで動かしたいんだけど、
とってきたソースをCUDA環境で動かすには書き換えないとダメなの?
586デフォルトの名無しさん:2008/09/12(金) 13:47:04
sharedメモリなんだけど制限とかあるの?

method<<<dim3(1000,1000),4, 1000*1000*4>>>
とか
587デフォルトの名無しさん:2008/09/12(金) 18:06:38
ガウシアンぼかし3x3を500x800のフルカラー画像で約0.3秒だった
8400GSですけど
こんなもん?もう少し早いのを期待したんだが
588デフォルトの名無しさん:2008/09/12(金) 18:45:28
そのアルゴリズムはCPUでやるとどのくらいかかった?
589デフォルトの名無しさん:2008/09/12(金) 18:51:26
ブロックの分け方をいじったら0.15秒になった
CPUで同じの組むのめんどいです
エミュレーションモードってどうやってやるの?
590デフォルトの名無しさん:2008/09/12(金) 22:29:38
>>589
>エミュレーションモードってどうやってやるの?
nvccにオプション指定するだけだよ。
あくまでもエミュレーションだから余計に遅くなるけど。

>>587
サンプルで似たようなのなかった?
フィルタ類は色々あったと思うから眺めてみるといいと思う。

>>586
あんたもdeviceQueryを実行する必要がありそうだ。
sharedにそんなに取ると、物理量を大幅に超えるから巧く動いたとしても無茶苦茶遅くなるぞ。

>>585
whetstoneなんて、並列演算に向かないと思うのだけど。
あー、繰り返しを並列にすればいいか。それだったら移植もそれほど難しくはない。
591デフォルトの名無しさん:2008/09/12(金) 23:29:34
デバイス上にRGB(unsigned char)の画像配列を確保してある状態で
これをOpenGLのテクスチャにホストを介さずにバインドして利用出来る?
592デフォルトの名無しさん:2008/09/13(土) 05:38:14
すいません質問です。
CUDAでFFTやってるサンプルコードとかどこかにないでしょうか。
探しても見つからなかったんです。
593デフォルトの名無しさん:2008/09/13(土) 06:58:27
>>592
simpleCUFFT違う?

>>590
「並列演算に向かない処理を並列にすればよくってよ?」
これ最高よね
594デフォルトの名無しさん:2008/09/13(土) 08:25:22
>>592
そのくらい自分で考えれ、そんなに難しい事じゃなじゃん
595590:2008/09/13(土) 08:48:04
>>593
>これ最高よね
???

>>592
CUFFT使うだけならnvccも要らない。
596デフォルトの名無しさん:2008/09/16(火) 07:06:46
>>590
誰かが「このアルゴリズムは並列化には向かないうんぬん」と言った
アルゴリズム×128本を同時に実行してしまうとか最高よね、という
意味なのではないかな。確かに上司の驚愕を呼ぶね。
597デフォルトの名無しさん:2008/09/16(火) 13:08:08
俺は並列化できそうな新たなアルゴリズムを考案しろという意味かと思った
598デフォルトの名無しさん:2008/09/16(火) 14:18:16
PIの計算だって本来並列には向かない
599デフォルトの名無しさん:2008/09/16(火) 14:20:31
CUDAでデバッグDLLが付属してないようなのだけど
例外処理ってどうやればいいので?
try..catchとか使えるの?
600デフォルトの名無しさん:2008/09/16(火) 15:34:27
無理。
601デフォルトの名無しさん:2008/09/17(水) 01:10:50
多体シミュやりたいなーと思ってたら,本屋で見かけたGPU Gems3に載ってた
でもそれだけの為に買うのもなー・・・3はいつ原版が公開されるんだろー
602デフォルトの名無しさん:2008/09/17(水) 02:51:27
なんかDirectX11で並列演算に対応するのと
11世代のOpenGLの仕様にOpenCLっていうCUDAの類似品が実装されるらしい
たぶんCUDAはこのまま消えていく
603デフォルトの名無しさん:2008/09/17(水) 10:36:55
GPGPUの可能性を示してくれただけで十分だよ
604デフォルトの名無しさん:2008/09/19(金) 00:12:03
カーネルのネストって出来るの?
__global__ void a(){
...
}

__global__ void b(){
a<<<dim3(100,100),1>>>();
}

void main(){
b<<<dim3(100,100),1>>>();
}

みたいな
605デフォルトの名無しさん:2008/09/19(金) 00:50:28
なんか根本的にひどい勘違いしてなくね?
606デフォルトの名無しさん:2008/09/19(金) 00:55:26
>>604
GPU内部からカーネルを発行することは不可能
607デフォルトの名無しさん:2008/09/19(金) 06:46:20
__device__ でプログラミングガイドを検索汁。
608デフォルトの名無しさん:2008/09/19(金) 09:12:17
>>602
CUDAの内部にOpenCLが含まれる構成だからCUDA
609デフォルトの名無しさん:2008/09/19(金) 17:51:43
処理に時間がかかるとGPUが完全停止してタイムアウトでドライバレベルのエラー出すんだけど
一回そのせいで画面全体がぐちゃぐちゃになってWindowsが操作不能にまでなったぞ
非同期実行じゃないんかい
どうすんのこれ?
610デフォルトの名無しさん:2008/09/19(金) 19:18:20
>>609
それは質問なのか?愚痴なのか?
質問だとしたら・・・分かるな?
611デフォルトの名無しさん:2008/09/19(金) 20:43:54
>>609

OSがVistaなら下の資料を参考にレジストリ弄ってみるとか。

WDDM によるタイムアウトの検出と GPU の回復
ttp://www.microsoft.com/japan/whdc/device/display/wddm_timeout.mspx
612デフォルトの名無しさん:2008/09/20(土) 12:00:52
192コアとか216コアとか240コアとか

使いづらいですよ!漏れの弱い頭がパンクしそうです!
お願いだから隠された力を覚醒させて256コア版出してくだしあ!!!11
613デフォルトの名無しさん:2008/09/20(土) 19:27:47
いや一回計算方法実装すれば後はそれを使いまわすだけだろ
614デフォルトの名無しさん:2008/09/22(月) 11:58:30
>>612
CUDAをVer2にするんだ。デバイス情報取得APIでコア数が判るようになっているぞ。
# つーか、256コア版の歩留まりが悪くてサブプロセッサ単位で減らして対応しているんじゃないの?w
# PS3のCBEが7SSEなのはそういう事情だそうだし。
615デフォルトの名無しさん:2008/09/26(金) 13:20:34
CUDAってなんて読むの?くーだ?
616デフォルトの名無しさん:2008/09/26(金) 13:21:28
んだ。
617デフォルトの名無しさん:2008/09/26(金) 14:49:14
cubaがキューバなんだから
cudaはクーダだろ・・・常識的に考えて・・・
618デフォルトの名無しさん:2008/09/26(金) 15:18:21
キュ〜(><)〜だ
619デフォルトの名無しさん:2008/09/26(金) 19:23:46
8400GSだと、h264エンコで実速出ないねぇ
12fpsがやっとだよ
もう少し速いかと思ってたんだけどな
620デフォルトの名無しさん:2008/09/29(月) 01:41:34
CUDAを使いたいと思っている初心者です
macのxcodeでもできますか??
imacで8800GSです
621デフォルトの名無しさん:2008/09/29(月) 11:36:23
>>619
よりによって、CUDAが動く最底辺の方のGPUを使わなくても……

>>620
NVIDIAの公式サイトが全てなので、そこを読んで判断してください。
つーか、xcodeってなに?
622デフォルトの名無しさん:2008/09/29(月) 20:31:53
>>620
5万払って雪豹もらってください。
動くレベルじゃないって話だけどね。
623質問です:2008/09/29(月) 20:37:44
初心者です。
CUDAサンプルを動かしてみて感じた事なのですが、
HLSL,GLSL,Cg言語それらを使わずに、使った時のような絵が出せるのでしょうか?
CUDAもGPU上で計算しているみたいなので・・・

624デフォルトの名無しさん:2008/09/30(火) 03:09:36
それじゃあ俺も初心者です
625デフォルトの名無しさん:2008/10/01(水) 14:32:24
じゃあおれも
626デフォルトの名無しさん:2008/10/01(水) 23:36:19
>>623
サンプルを見たのなら判ると思うけど、OpenGLはほぼそのまま使えるようですよ。
627デフォルトの名無しさん:2008/10/04(土) 00:48:53
http://en.wikipedia.org/wiki/OpenCL#Example
これ見るとCUDAにそっくりだな
CUDAをちょっと修正するだけでOpenCLに対応出来そうだけど
628質問です:2008/10/05(日) 00:39:12
>626
OpenGLは使えるのはわかってます。
CUDAでピクセル単位の計算できるのかが知りたいのです(汗
Cg言語を使ってバーテックスシェーダで計算していた処理を
CUDAで実現いてみたら、うまくいったのですが、
フラグメントシェーダでやってた処理が実現できなくて・・・
そもそもできるのかどうか・・・
ってところが知りたいのです。
629デフォルトの名無しさん:2008/10/05(日) 03:26:43
そのためだけにCUDAは作られました
630デフォルトの名無しさん:2008/10/05(日) 03:28:30
つかサンプルにSobelFilterってのがあるだろあれみれ
631質問です:2008/10/06(月) 14:55:42
>>630
SobelFilter見てみました。
見落としてました。
ありがとうございます。
632デフォルトの名無しさん:2008/10/10(金) 21:46:48
日本の公式フォーラムできた
ttp://forum.nvidia.co.jp/
633デフォルトの名無しさん:2008/10/10(金) 22:23:43
なんとも直訳のような回答ばかりw
634デフォルトの名無しさん:2008/10/10(金) 22:48:12
直訳なんかしたらまともな日本語になってるわけないじゃないか
635デフォルトの名無しさん:2008/10/10(金) 22:49:17
あの回答がまともな日本語だと思うのか?
636デフォルトの名無しさん:2008/10/10(金) 23:06:59
ああ俺の中で日本語ドキュメントの思い出が醜化されていたようだ
637デフォルトの名無しさん:2008/10/11(土) 00:32:34
悪くない
638デフォルトの名無しさん:2008/10/11(土) 01:03:23
え、俺これ読んですごいwktkしてるんだけど。
サンプル投稿みたいな質問したら、気が向いたらNVIDIAが答えてくれるかも知れないって事でしょ?
639デフォルトの名無しさん:2008/10/11(土) 02:28:44
正直、ここで聞いた方がましだと思う漏れもいる。
640デフォルトの名無しさん:2008/10/11(土) 06:42:53
投稿者: NVIDIA CUDA Team
どんな人 専門家
自信   自信あり

ちょっと面白いw
641デフォルトの名無しさん:2008/10/11(土) 07:43:30
少し読んでみたが日本語のあのドキュメントよりはずっと読みやすいよw
あれは酷すぎた
642デフォルトの名無しさん:2008/10/12(日) 11:48:23
それでもどう考えても英語のほうが読みやすいけどな。
643デフォルトの名無しさん:2008/10/12(日) 23:45:50
アトミック処理に放射線の危険はありません。:-)
644デフォルトの名無しさん:2008/10/21(火) 20:40:02
質問です。
CUDAを使って、GPU上で計算している部分の一部を、
FBOとCg言語を使って、オフスクリーンで計算させることってできますか?

もちろん、無駄なことはわかっているのですが・・・
645デフォルトの名無しさん:2008/10/21(火) 22:23:14
なんでCUDAのサンプルってコンソールアプリばっかりなんだろう

コンソールアプリじゃないときは
CUT_DEVICE_INIT(argc,argv);
CUT_EXIT(argc, argv);
のargc,argvってとりあえず 0 と nullとか渡しとけばいいの?
646デフォルトの名無しさん:2008/10/21(火) 22:24:53
>>644
日本語でどうぞ。
647デフォルトの名無しさん:2008/10/21(火) 22:27:14
>>645
そもそもCUT_DEVICE_INITはMultiGPU環境でGPUの番号を指定したりするためにあるようなもの。
0とNULLでもいいけど、敢えて使う必要もない。
CUT_EXITに至っては、プログラム終了時にプロンプトを出すためにあるようなもんだ。
# 詳細は、cutil.hを読め。
648デフォルトの名無しさん:2008/10/21(火) 22:33:37
>>647
ありがとうございます
649デフォルトの名無しさん:2008/10/22(水) 00:59:28
>>645
ウィンドウ出してグラフィックだすようなサンプルも多いが。
650デフォルトの名無しさん:2008/10/22(水) 08:56:39
普通にイメージクラスでCUDAを実装してDLL化して使ってるが
DLLだからコンソールだろうがWindowだろうが使えるぞ
でもお前らにはやらない
651デフォルトの名無しさん:2008/10/22(水) 12:41:14
>>694
頭のほうしか見てなかった...
652デフォルトの名無しさん:2008/10/23(木) 14:06:38
ここでロングパス!
653デフォルトの名無しさん:2008/10/26(日) 13:54:35
654デフォルトの名無しさん:2008/10/26(日) 15:14:01
今日からcudaプログラミングを始めようとしている超初心者です
nvidiaのGTX280のピーク性能は933GFlopsだって歌われているのですが、
しかし240のコアで1296MHzで動作しているのなら、311GFlopsになるはずですよね?
この3倍の数値の差はどこからくるのでしょうか?

655654:2008/10/26(日) 15:16:30
あ、もしかして1サイクルで3つオペランドを消費するような命令があるってことで
しょうかね?
656デフォルトの名無しさん:2008/10/26(日) 17:22:50
maddならmul+addだから2倍なんだけど、3倍なんてあったかな? とこの前から思っている。
657デフォルトの名無しさん:2008/10/26(日) 18:34:50
658デフォルトの名無しさん:2008/10/26(日) 19:15:55
ベクタ計算じゃないので最内ループの記述は楽々
それでいて300GFLOPS台の性能がでるなんて夢のようですね
659デフォルトの名無しさん:2008/10/26(日) 19:25:03
巧く嵌まればね。書くのは楽だけど、チューニングが大変なのは変わらないわよ。
660デフォルトの名無しさん:2008/10/26(日) 19:50:18
ローコストにCUDAプログラミングやチューニングのコツを掴むのに適したマシンってありますか?

いま持ってるノーパソのGPUがnvidiaならよかったんだが、そうじゃないので
安くCUDAできるマシンを買おうか検討中。「試し」なので自作とか高価なのは避けたい

参考になる話があったら聞かせてくださいまし
661デフォルトの名無しさん:2008/10/26(日) 19:57:15
予算を教えなはれ。
14万でMacBookとか?
後は、Nvidiaチップ内臓の自作で10万切ることも可能
今デスクトップPC不所持で5万の予算だったら無理。
662デフォルトの名無しさん:2008/10/26(日) 20:03:39
意味のある試しプログラミングができればいくら安くてもいい
中古ノートのオンボロで構わないと思っている

奮発しても10万といったところですかね
663デフォルトの名無しさん:2008/10/26(日) 20:05:52
私は一世代前のCore2Duoで8800GT入れているけど9万ほどだったかな。
今だったら、45nmのCore2Duoでメモリ1GB積んで9600GTでも入れれば結構楽しめると思う。
DosPara辺りのゲーム用PCが丁度そんな感じのスペックじゃないかな。
# 都合いいことに、「ゲーム用」はVistaじゃないことが多いしね。
664662:2008/10/26(日) 20:10:12
>>661
10万と書いたが、MacBookの14万というのはちと食指をそそられるな…

当方unixやlinuxはそこそこ扱えるが、Macは十年以上触ったことがないし
開発環境とかどうなっとるんでしょうか
665662:2008/10/26(日) 20:15:35
あ、そうそう
今のノートに買い替えてから使ってないけどモニタとキーボードはあります
モニタったって今時CRTのSXGAですけどね

>>661>>663
ありがとうございます。参考にします
666663:2008/10/26(日) 20:21:45
ちょっとDosPara見てきたけど、XP足しても8万くらいで作れるようね。後は余裕次第かな。
この手のBTOの常で、キーボードとマウスは嫌でもついてくるけど。

それは別として、MacBookで色々苦労したいのならそれはそれでありだと思う。
私なら、ミニタワーで安く済ませた分で、1280x1024を越える大きさの液晶モニタでも買うけどね。
667662:2008/10/26(日) 20:36:02
>>663
やっぱりMacは今でも苦労が多いのかw でもまあひと通り調べてはみよう。
ドスパラのBTOも、後で自分でチェックしてみることにします。
668デフォルトの名無しさん:2008/10/26(日) 20:57:29
bootcampでlinux入れちゃえばOKジャマイカ?
と思ってググッたら酷い、お勧めできない。
669デフォルトの名無しさん:2008/10/26(日) 21:36:37
GTX260は単体で3万円切っているので、工夫すれば10万でデスクトップ組めるかも??
670デフォルトの名無しさん:2008/10/26(日) 21:40:29
別にWinノートPCを持っているなら、ミニタワーはLinuxでもいいんじゃね?
CUDAをWinで使うとnvccがgccベースだからC++関連の内部関数がめんどくさいよ。
671662:2008/10/26(日) 22:17:28
まあ先に言った通り自作は手控えたいです。トラブルを楽しむほどの余裕が今はないので。
ボード一枚突っ込むくらいですかね。自分の手でやってもいいやというのは。

>>670
VS2008があるので、できればそっちと連携させながらやりたい
(ガワとか作るのはC#が便利なので…)と思っていたんですが、難しいですかね。
cudaが基本gccだというのは判っているので、まあ何ならIPCで繋げばいいやくらいに
テキトーなことを考えていたわけですが。
672デフォルトの名無しさん:2008/10/26(日) 22:43:00
VC向けのプロジェクトテンプレートあったよね
673662:2008/10/26(日) 22:51:53
>>672
ああ、ありましたね

これから風呂入って寝てしまうので、今日はこのへんで。
皆様どうも、いろいろご親切にありがとうございました。

一応、明日以降もときどきこのスレをチェックするようにします。
674デフォルトの名無しさん:2008/10/27(月) 10:21:12
グラボだけ変えればいいじゃん
675デフォルトの名無しさん:2008/10/27(月) 10:23:30
PCIEマシンを持ってないなら
E1200+9400GTあたりで組めば3万以内で組める
676デフォルトの名無しさん:2008/10/27(月) 10:27:01
ちなみにうちのE1200は3Gで動いてたけど
E7200に変えたのでサブにした
3Gあればメインマシンとしても十分だと思うけど
ただマザーはそれなりにOC耐性の高いものが要るので
どうしてもミドルクラスの1万5000円前後になるけどね
677662:2008/10/27(月) 23:23:34
>>675
だいたいそのへんで検討中です。
Windows XPをインストールするとケチっても5万くらいにはなっちゃうようですが
(自宅PCは98SE→Vistaノートへポーンと飛ばしたので、XPを持ってない)ま、それはそれで。
678デフォルトの名無しさん:2008/10/28(火) 21:31:33
強力な浮動小数演算ができる装置を手に入れても、物理屋、ごく一部の化学屋、工学屋の超上位層ぐらいしか使い道が無いぽ。
679デフォルトの名無しさん:2008/10/28(火) 22:09:02
と無知な輩がわめいております
680デフォルトの名無しさん:2008/10/29(水) 03:42:30
実際ない
681デフォルトの名無しさん:2008/10/29(水) 04:44:41
GPU Gemsの3とかに沢山載ってるよ。
暗号化解析とかパケットフィルタリングとか。
682デフォルトの名無しさん:2008/10/29(水) 05:09:26
パケットフィルタの為に200W近く常時負荷掛けるなんて無理だ
683デフォルトの名無しさん:2008/10/29(水) 08:49:21
>物理屋、ごく一部の化学屋、工学屋の超上位層ぐらいしか
もともとゲームやCGでさんざん使い倒されているデバイスなのに何を言うのか

CUDAは、ということであれば、たとえばこれを土台にファイナンス系のミドルウェアが作られたら
そっち系の需要が一気に開花するかもしれない
今んとこCUDAのサイトで紹介されている事例はいささか高尚すぐる気がするけどな
684デフォルトの名無しさん:2008/10/29(水) 09:33:00
どっかの銀行でやってるんじゃないか?
685デフォルトの名無しさん:2008/10/29(水) 12:06:23
銀行ってイメージ的に扱うトランザクションは半端なく多そうだけど、それがSIMDではなさそうな。
必要なのはPOWERに乗ってるような十進演算器じゃないの?
686デフォルトの名無しさん:2008/10/29(水) 13:21:47
そう言えば、NVIDIAの営業が得意気に「銀行系には1000台単位でお買い上げいただいてます」とか言ってたな。
687デフォルトの名無しさん:2008/10/29(水) 14:19:44
それ演算用ではなくて表示用だったりして。
688デフォルトの名無しさん:2008/10/30(木) 00:10:25
DoubleFloatのみで対決したら、最新GPU1機 vs. 最新のクアッドコアCPUのどっちが勝つと思う?
CPUはamd64と、SSE等使用時(誤差を考えればむしろこっちと比較するべき?)の両方で予想してほしい。
689デフォルトの名無しさん:2008/10/30(木) 00:12:02
CPU
690デフォルトの名無しさん:2008/10/30(木) 00:23:35
用途による。
考えるのが面倒くさければCPU。
691デフォルトの名無しさん:2008/10/30(木) 02:35:58
メモリアクセスのペナルティがあるから、その観点で比べてもしょうがないよ
692デフォルトの名無しさん:2008/10/30(木) 04:31:20
銀行で使うとしたら、勘定系ではないだろ。
そうではなくて、商品開発やシミュレーションなど、1円2円ずれてもいいような業務
693デフォルトの名無しさん:2008/10/30(木) 15:04:09
銀行とかトラフィックが確かにすさまじいけど
システム改変するコストもすさまじいぞ
数十年に一回やれるかどうかだろ
それに負荷100%で24時間なんてカードが耐えられるとは思えない
694デフォルトの名無しさん:2008/10/30(木) 16:15:06
常時負荷100%という状況になっていること自体設計ミス
60〜70%が適正
695,,・´∀`・,,)っ-●◎○:2008/10/31(金) 02:29:13
>>671
マーケティングの人に直接聞いた話では、そのうちそのへんは改善されると思うよ。
あ、機密事項と言われてるので具体的には言えない。
696デフォルトの名無しさん:2008/10/31(金) 17:56:27
最近銀行システムの開発で、6000人のSE集めた超プロジェクト失敗したものねえ。まあ当然だが。
SEが6000人だからねえ。プログラマはもっと多いとかもう想像つかない。
697デフォルトの名無しさん:2008/10/31(金) 21:10:20
TMPGencのCUDA対応版が出たんでインストールしたんだけど
CUDAの項目にチェックできないのは何故・・?

ドライバは178.24でグラボがASUSの8800GTS(640MB)
698697:2008/10/31(金) 21:19:21
スマソ自己解決
g80はダメなんだってねOTL
699デフォルトの名無しさん:2008/10/31(金) 23:34:51
>>698
イキロ。
700デフォルトの名無しさん:2008/11/01(土) 00:39:03
G80はストリーム系のAPIが使えないからねぇ。
701デフォルトの名無しさん:2008/11/01(土) 01:49:28
>>696
JRとかの鉄道や、電力といったインフラ系はもっと大きい。
しかし、大きいが故にPJ失敗しまくってる。

人数を増やせば増やす程、集めた人材の質は低下する。
そして頭脳労働の場合、一番質の低い人のレベルに
足並みを揃えなきゃいけなくなるからなぁ。

しかし戦中・戦後に一気に作ったシステムが老朽化して、
銀行どころでなく大規模な改修がどれもこれも必要なのだが。

#mixiで見掛けたよ>団子の中の人
702デフォルトの名無しさん:2008/11/01(土) 01:54:45
>>662
HP ML115サーバ機に、GF9400GTあたり刺して、
Linux入れたら? 1CD-Linuxの knoppix for CUDA
なら、最初からCUDA環境が構築済みで、サンプル
も憑いて来るし。

慶應義塾大学泰岡(やすおか)顕治研究室 Yasuoka Laboratory
http://www.yasuoka.mech.keio.ac.jp/cuda/

個人的にはGF8200なM/BのオンボでCUDA走れば、
裸M/BのCUDAクラスタ組もうかと思ってるが、
CPUやメモリの値段を考えると、ML115の方が
安上がりなんだよな。
703662:2008/11/01(土) 06:57:01
>>702
これはビックリ!こんな激安サーバがあるなんて知らなかった…
激安なのにPCI-Expressとかついてて(x16必須な)nvidiaのグラボもちゃんと動く、
ということでゲームの人達にも人気があると…ふむふむ。

ところで素のML115はメモリ512Mなのだけれど
上記研究室のページによるとknoppix for CUDAの推奨動作環境はメモリ2G以上、とある
ML115を使う場合、安いやつを別に買ってきて刺し換えればよろし、ということですね?
(ML115もhp直販だとメモリ増設オプションはECCつきの高いやつしかない…)

ML115が16k、9400GTが9k、2Gメモリも安いのは3k未満、で30kを切りますな。
個人的にサーバ機もAMD64もknoppixも使ったことがないので、
それらの組み合わせとなると微妙に不安だ(笑)が、いずれにせよこの値段は魅力的

大変参考になりました。ありがとうございます。
704デフォルトの名無しさん:2008/11/01(土) 07:57:06
デモ機で借りたTeslaC1060使っているんだけど、ホストCPUがAMDのPhenom。
Xeonに較べて遅い遅い。普段使っているXeonに8800GTの組み合わせの方が早いって何さw
705,,・´∀`・,,)っ-●◎○:2008/11/01(土) 08:16:53
つまんない質問だけどGTX2xxの人は電源いくらよ。
+150Wくらいはマージンとったほうがいいと思うよな?よな?
706デフォルトの名無しさん:2008/11/01(土) 10:03:17
なんに対して+150?
GTX280ボード単体での消費電力は236W、GTX260でも180Wクラス消費するからね。
ついでに言えば、補助電源用コネクタもGTX280は6ピン+8ピンの特殊コネクタが必要だし。
707,,・´∀`・,,)っ-●◎○:2008/11/01(土) 10:25:14
>>706
システム全体で。500W電源以上推奨って言ってるけどじゃあ500Wで安定するかっていうと
信用できねー
708デフォルトの名無しさん:2008/11/01(土) 10:25:55
無理。
709,,・´∀`・,,)っ-●◎○:2008/11/01(土) 10:28:03
とすると、マシン一式組んで貸し出してもらうのがベストだよな?
よし参考になった。
710デフォルトの名無しさん:2008/11/01(土) 11:59:03
8800GTなら100Wだし、補助電源コネクタも6ピンだけで済むよ。
711,,・´∀`・,,)っ-○◎●:2008/11/01(土) 12:04:23
うん、俺も8800GTまでなら550Wで余裕といえるラインかなと思っている。
712デフォルトの名無しさん:2008/11/01(土) 14:45:29
GTX280を使うのなら、700Wクラスの電源が欲しいところだね。
713デフォルトの名無しさん:2008/11/02(日) 15:04:39
CUDAは8800以上のクラスで無ければ意味ない。
8500とかはとりあえず走るだけでパフォーマンスは全然駄目。
714,,・´∀`・,,)っ-●◎○:2008/11/02(日) 17:39:50
8400GSとかになると額面性能でもCore 2シングルコア以下だな。
715デフォルトの名無しさん:2008/11/02(日) 19:59:18
  そだ  |------、`⌒ー--、
  れが  |ハ{{ }} )))ヽ、l l ハ
  が   |、{ ハリノノノノノノ)、 l l
  い   |ヽヽー、彡彡ノノノ}  に
  い   |ヾヾヾヾヾヽ彡彡}  や
  !!    /:.:.:.ヾヾヾヾヽ彡彡} l っ
\__/{ l ii | l|} ハ、ヾ} ミ彡ト
彡シ ,ェ、、、ヾ{{ヽ} l|l ィェ=リ、シ} |l
lミ{ ゙イシモ'テ、ミヽ}シィ=ラ'ァ、 }ミ}} l
ヾミ    ̄~'ィ''': |゙:ー. ̄   lノ/l | |
ヾヾ   "  : : !、  `  lイノ l| |
 >l゙、    ー、,'ソ     /.|}、 l| |
:.lヽ ヽ   ー_ ‐-‐ァ'  /::ノl ト、
:.:.:.:\ヽ     二"  /::// /:.:.l:.:.
:.:.:.:.:.::ヽ:\     /::://:.:,':.:..:l:.:.
;.;.;.;.;;.:.:.:.\`ー-- '" //:.:.:;l:.:.:.:l:.:
716デフォルトの名無しさん:2008/11/03(月) 01:57:15
サブノートPCでCUDA動くようにならんかな。
通勤、出張の途中でいぢってみたい。こんな
時でもないと、仕事に直結しないプログラム
組んでる暇無いからなぁ。

>>703
AMDの場合、メモリコントローラがCPUに内蔵なので、
ECCでもnon-ECCでも使える。安い通常のnon-ECCメモリ
1GBx2枚買ってくればOK。ML115はNTT-Xで買えば、
13800円(送料込)。
717デフォルトの名無しさん:2008/11/03(月) 02:19:41
つ N10J
718662:2008/11/03(月) 06:43:24
>>716
回答ありがとうございます。
719デフォルトの名無しさん:2008/11/03(月) 11:13:39
>>716
俺はサブノートでソースは書いてるよ。動作確認は自宅に戻ってからだけどね。
一発で動けば気持ちいいもんだ。
720デフォルトの名無しさん:2008/11/03(月) 11:52:24
質問です

OpenCLが出たらCUDAはお払い箱ですか?
721デフォルトの名無しさん:2008/11/03(月) 12:00:27
>>719
エミュは動いている?

>>720
いいえ、画像処理だけがCUDAの使い道ではありません。
722,,・´∀`・,,)っ-●◎○:2008/11/03(月) 12:55:07
Apple主導の言語処理系って流行らんだろ。
GPU版Objective-Cだと思え。


ちなみにNVIDIAから補助もらってる俺は仕事につながるって言えるのかな?
723デフォルトの名無しさん:2008/11/03(月) 13:08:35
>>722
その仕事、こっちにくれw
情報少なくて、参ってるんだ。
724デフォルトの名無しさん:2008/11/03(月) 13:10:10
>>722
ObjectiveCは言語仕様からしてクソだったから流行らなかった。
それだけです。
725,,・´∀`・,,)っ-●◎○:2008/11/03(月) 13:25:26
>>723
メールサポートだけもらってるけどマニュアル落として自分でやったほうが早いしなぁ

俺のほうこそ各ptx命令のレイテンシ・スループットの資料欲しいんだけど。
Intelはそういうのまめに出してくれるから助かるんだが
726,,・´∀`・,,)っ-●◎○:2008/11/03(月) 13:29:01
YellowBoxだっけ?
WindowsでもMacでも動くアプリケーションが動くフレームワークとか
大風呂敷広げてあれ結局どうなったっけ?

MicrosoftはDX11があるからOpenCLの標準化なんて破談する可能性大
Appleのフレームワークは地雷ばかりで困る。
727デフォルトの名無しさん:2008/11/03(月) 15:35:29
>>725
なんだ、ないのか。NVIDIAの日本法人は、ろくに情報持ってないっぽいんだよね。
728デフォルトの名無しさん:2008/11/03(月) 16:03:03
>>725
ptxは中間言語だろ?
729デフォルトの名無しさん:2008/11/03(月) 17:02:05
>>726
先入観が身を滅ぼすだろう。
730デフォルトの名無しさん:2008/11/03(月) 17:55:12
質問スレッドなので、唐突に質問するわけですが、ごきげんよう

CUDAのSDKに付いてくる
Programming Guide Version2.0の60ページ目の真ん中あたり

For devices of compute capability 1.x,
the warp size is 32 and the number of banks
is 16 (see Section 5.1);
a shared memory request for a warp is split into one request
for the first half of the warp and one request for the second half of the warp.
As a consequence, there can be no bank conflict between a thread belonging to the first
half of a warp and a thread belonging to the second half of the same warp.

が分からない。
何が分からないのかというと、これはShared Memoryの最適なアクセスに関する記述なんだけど、
ワープの中に並列実行できるスレッドが32個あるというのにshared memoryのバンク数は16個しかない。
普通に考えたら2つのスレッドが同時に1つのbankにアクセスするわけで、
思いっきりバンク競合するはずよね?
でも、この記述はバンク競合が起こらないって自信を持って記述されているわけよ
nVidiaの人教えてちょ
731デフォルトの名無しさん:2008/11/03(月) 18:59:44
Half Warp(つまり16スレッド)ずつスケジューリングされるんじゃなかったかな
だからバンク競合は起きない
nVidiaの人では無いが

なら何でWarp=16スレッドとしないんだろう…というのが俺の疑問
732,,・´∀`・,,)っ管:2008/11/03(月) 20:56:32
中の人いわく
命令レイテンシ隠蔽のためにクロック毎にインタリーブしてるだけだから細かいことは気にすんな
733730:2008/11/03(月) 22:01:55
なるほど〜
ワープの正体は16並列と見つけたり
ってことですな!
734デフォルトの名無しさん:2008/11/04(火) 14:28:34
GeForce 9400MってCUDA使える?
735デフォルトの名無しさん:2008/11/04(火) 16:04:29
2.1でサポートできるように頑張ってるけど間に合わないかもしんないって言ってた
736,,・´∀`・,,)っ-●◎○:2008/11/08(土) 18:21:17
今月中に何かしら動きが・・うわなにをする
くぁwせdrftgyふじこlp;「’」
737デフォルトの名無しさん:2008/11/08(土) 18:28:53
個人的には1.3世代の1スロット厚のGPUボードが欲しいのだけれど……
# 出ますと言ってた奴はその後連絡寄越さないしなぁ。
738,,・´∀`・,,)っ-●◎○:2008/11/09(日) 21:55:53
コードの実行時動的生成(分岐除去とかパラメータの定数化とかってレベルで)って
CUDAではいまんとこ無理なんだよな?
Larrabeeが出たらそういう最適化できる部分はXbyak使おうかなと思ってるんだが


っていうか、SPMDじゃないプログラミングモデルまだー?
739,,・´∀`・,,)っ-●◎○:2008/11/10(月) 01:14:51
>>730-732
に補足。

各SPは最大2issue同時実行なんだけどデコーダは半速。
1SPあたり4スレッドでインターリーブして同じオペレーションを実行するとちょうど命令供給が間に合う構造だな。


1warp=
16にすると、デコーダは等速か、半速×2にしないといけない。
デコーダの負荷を抑えたかったんじゃないの?
740デフォルトの名無しさん:2008/11/11(火) 21:20:50
CUDAはじめようと思って調べ始めたんだが、
7xxxシリーズはなんで切り捨てられたのか・・・

今週末に9600GT買いに行かなきゃ
741デフォルトの名無しさん:2008/11/11(火) 21:26:36
どうせなら260だか280あたりにしといたら
742,,・´∀`・,,)っ-○◎●:2008/11/11(火) 22:15:53
電源とかケースとかの敷居高くない?
743デフォルトの名無しさん:2008/11/11(火) 22:33:54
>>740
切り捨てられたんじゃなくて、始めから想定されてない。

ttp://journal.mycom.co.jp/column/graphics/index.html
この連載のはじめの方のGPUの進化を追うと、少しは判るかも知れない。
で、どうせならQuadroFX3700をお勧めします。8800GTとほぼ同一仕様でお値段10倍w
744デフォルトの名無しさん:2008/11/12(水) 22:41:03
CUDA-Zなんて便利なものがありました。
forum.nvidia.co.jp
745デフォルトの名無しさん:2008/11/13(木) 21:17:18
それよりレイトレベンチマークのほう、Bio100%が作ったのか!
SuperDepthとかカニミソとかが蘇ってきたぜ

スレ違い済まん
746デフォルトの名無しさん:2008/11/13(木) 21:20:01
747デフォルトの名無しさん:2008/11/13(木) 21:58:30
>>745-746
まだ生きてたのか!
PC-98では大変お世話になりました。

そしてブログを読んでみたら、超わかりやすい!
coalescedの意味とか、8/29のエントリみたいなメモリアクセスが遅い理由とかよく分からなかったんだよ。助かった。
748デフォルトの名無しさん:2008/11/15(土) 01:15:52
vista sp1にCUDAをインストールしたいんだけど
ドライバ:○

tool kit:×インストールが終了しない。。

で上手くインストール出来ないんですが、誰かしりません?
強制終了したらアンインストールの項目にtool kitの項目があるのにアンインストールするとerror:5001で失敗しやがるし。。。

最悪
749名無し募集中。。。:2008/11/15(土) 02:28:14
TMpegEncのCUDA対応は4フィルタだけで今のところあまり効果がないみたい
AviUtilのCUDA対応フィルタもパフォーマンス出ないという理由で公開停止
今からでもチャンスありますかね?
750デフォルトの名無しさん:2008/11/15(土) 03:36:03
作りたいなら是非作ってくれ
751デフォルトの名無しさん:2008/11/15(土) 06:15:48
>>748
管理者権限でやっている?
後柱ね。
752デフォルトの名無しさん:2008/11/15(土) 21:32:05
なんかLinux向けのドライバにCUDA2.1入ってるらしーよ
ttp://www.nvidia.com/object/linux_display_ia32_180.06.html
753デフォルトの名無しさん:2008/11/17(月) 19:18:56
754,,・´∀`・,,)っ-○◎●:2008/11/18(火) 17:41:42
>>752
ついに来てしまったか>>736
755デフォルトの名無しさん:2008/11/18(火) 23:45:16
ラジオシティできるソフトってありますか?できればソース付きで...
756デフォルトの名無しさん:2008/11/20(木) 23:06:52
Cg勉強しようと思って調べてたら、CUDAってのもあるんだな。
それぞれできる事って、具体的に何が違うの?

とりあえず7600GTしか持ってないんで、CUDAは使えないんだが、
Cg勉強するぐらいなら、CUDA勉強したほうが圧倒的に良いなら
対応グラボ買おうと思うんだが




757デフォルトの名無しさん:2008/11/20(木) 23:34:27
そういう何処にでも載っていることすら調べられないのならCgにすれば。
758デフォルトの名無しさん:2008/11/21(金) 13:20:39
CUDA 2.1 beta
ttp://forums.nvidia.com/index.php?showtopic=82290

VC++9とDX10インターオペラビリティがやっと
759デフォルトの名無しさん:2008/11/21(金) 21:39:18
cuda sdkのサンプルを実行するとtest failedと出て実行できないんですけど。
環境はos xp 64, quadro FX 4600です。
先ほどnvidiaからドライバとツールとSDKをダウンロードして
インストールしました。ドライバは更新されています。
visual studio 2005も入れました。
760デフォルトの名無しさん:2008/11/22(土) 17:06:06
Teslaを使っているのですが、電源コードを抜く以外の方法で、装置を再起動
する方法はないでしょうか。
バグのあるコードを何度も実行した結果、cudaMalloc()が返ってこない
状態になっています。
761デフォルトの名無しさん:2008/11/22(土) 18:21:05
たわけた質問だと思いますが、お許しください。
NVIDIA製のカードが入っていないPC上で、
nvemulate.exeを利用してCUDAを使用する事は可能なのでしょうか?
実際の処理に使うのではなく、CUDAプログラミングの練習に使うのが主です。
762デフォルトの名無しさん:2008/11/22(土) 18:21:19
>>760

Sシリーズならホストを再起動するだけで復活しませんか?
763デフォルトの名無しさん:2008/11/22(土) 18:48:56
やっぱ大学くらいしかまだ使ってないのかね
764デフォルトの名無しさん:2008/11/23(日) 00:55:06
最近発売された、GeForce9300、9400を積んだMB、
少し前のGeForce8200、8300を積んだMBでも実用ではないですが、
CUDAのプログラミングをして走らせる事は可能なのでしょうか?
誰もmGPUでCUDAを使っていないので…
765デフォルトの名無しさん:2008/11/23(日) 16:49:51
みんな何の計算させてるの?
766デフォルトの名無しさん:2008/11/23(日) 16:53:52
株価予測をリアルタイムに
767デフォルトの名無しさん:2008/11/23(日) 19:03:26
株価の予測はできんだろ。アホか。
768デフォルトの名無しさん:2008/11/23(日) 20:24:25
>>767
阿呆丸出し乙
769デフォルトの名無しさん:2008/11/23(日) 20:25:59
株価の予測ができたって言ってるのは、数年前の慶応が出してた論文ぐらいじゃねーの?
770デフォルトの名無しさん:2008/11/23(日) 20:35:29
>>768
予想と予測は明確に違うんだぜ?
771デフォルトの名無しさん:2008/11/23(日) 23:52:44
論点がづれてるー髪もづれてるー
772sage:2008/11/25(火) 12:13:34
>> 762
shutdown -> 電源切断 -> 電源投入の手順を踏むと、復活しました。
ただのrebootで良いかどうかは試していません。
773アク禁中なので纏めてレス:2008/11/25(火) 12:18:30
>>772
色色と掲示板の使い方を間違っているw
で、reboot試してないなら報告しなくていいから。

>>771
髪はずれないと思うぞ、髪は。

>>765
私の所では、最近はFFTWの代わりにCUFFTでFFTを計算させている。

>>764
NVIDIAのサイトのCUDA ZONEでリストアップされていれば、使える。

>>763
んなこたーない。
774デフォルトの名無しさん:2008/11/25(火) 15:29:23
--device-emulationでは正しく動くけれども、実機では動かないときには
ソースコードをにらむしかないのでしょうか。

nvcc --device-debug (-G) というオプションがあったので、これをつけて
コンパイルすると、ptxas が Parsing error を出して失敗します。

http://forums.nvidia.com/index.php?showtopic=66291
の会話を見ると、--device-debug は今年5月の段階ではまだ使えなかった
らしく、私の場合と現象が似ているので、以前としてまだ使えないままか
と思ったのです。

775デフォルトの名無しさん:2008/11/25(火) 18:33:51
>>769
そりゃ、予想は出来る罠
ただ、外乱はいつも不明だし、確定解は得られない。
つまり、最尤推定しかできないし、当然推定結果が大ハズレってことも、
初めから推定理論に謳われてる
776デフォルトの名無しさん:2008/11/25(火) 19:24:20
株価予想が正確になればみんなそれを信じて買うようになるでしょ
予測自体が株価に影響を与えだして本来の予測とは違う値動きを始める
そして的中率は下がる
つまり一定以上の正確な予測を行うことは不可能なのだ
777デフォルトの名無しさん:2008/11/25(火) 20:36:28
ここには、当たり前の簡単なことを、必死に難しく言おうとしてる
能無しがたくさん居るようだねw
778デフォルトの名無しさん:2008/11/26(水) 02:25:54
1つの.cuの中で実装しているglobal関数の個数によって、
Kernel呼び出しのターンアラウンドタイムが変わるという奇妙な現象に遭遇してます。
特にKernelで処理するデータが少ない時に顕著になります。
関数の数を5〜10個で変えてみると、ターンアラウンドタイムは
最悪値で80μsec、最良で30μsecでした。
この値は
timer.start();
for (int i=0;i<100;i++) test_kernel<<grid,thread>>(test);
cudaThreadSynchronize();
timer.end();
みたいな書き方で調べてます。

9個目、10個目あたりで底があるようなのですが
こういう現象について、合理的な説明はありますか?
僕にはさっぱり見当がつかないのであります。
779デフォルトの名無しさん:2008/11/26(水) 02:28:14
何かを勘違いしている
780アク禁中(以下略:2008/11/26(水) 20:28:00
>>778
再現できるソースを貼ってくれたら解析するじょ。
781778:2008/11/26(水) 23:00:43
#include <windows.h>
#include <stdio.h>
#include <cuda_runtime.h>
//Round a / b to nearest higher integer value
int cuda_iDivUp(int a, int b) {return (a + (b - 1)) / b;}
#define BLOCK_DIM ( 32)
template <unsigned int loops>
__global__ void testcuuuuKernel(float* d_h0, unsigned int size)
{
unsigned int i = blockIdx.x * blockDim.x + threadIdx.x;
if (i < size) {
float d = d_h0[i];
for (int j = 0; j < loops; j++) {d -= j * 0.1; d += 0.9;}
d_h0[i] =d ;
}
}

void dummy() {
dim3 block(BLOCK_DIM, 1, 1); dim3 grid(1, 1, 1);
testcuuuuKernel<4><<<grid, block>>>(NULL, 0);
//testcuuuuKernel<5><<<grid, block>>>(NULL, 0);
//testcuuuuKernel<6><<<grid, block>>>(NULL, 0);
}
int main(int argc, char* argv[]) {
cudaDeviceProp deviceProp;
cudaGetDeviceProperties(&deviceProp, 0);
cudaSetDevice(0);
#define DATA_SIZE ( 100)
unsigned int byte_size = DATA_SIZE * sizeof(float);
782778:2008/11/26(水) 23:02:57
float* data = new float[DATA_SIZE];
for (int i = 0; i < DATA_SIZE;i++) {data[i] = i;}
float* d_data; cudaMalloc((void **)&d_data, byte_size );
cudaMemcpy(d_data, data, byte_size, cudaMemcpyHostToDevice);
LARGE_INTEGER nFreq, nBefore, nAfter; //TIMER初期化
DWORD dwTime;
memset(&nFreq, 0x00, sizeof nFreq);
memset(&nBefore, 0x00, sizeof nBefore);
memset(&nAfter, 0x00, sizeof nAfter);
dwTime = 0;
QueryPerformanceFrequency(&nFreq);
#define LOOPNUM 100
dim3 block(BLOCK_DIM, 1, 1);
dim3 grid(cuda_iDivUp(DATA_SIZE, block.x), 1, 1);
for (int k = 0; k < 10; k++) { //試行の試行
//start!
QueryPerformanceCounter(&nBefore);
for (int i=0; i<LOOPNUM;i++) { testcuuuuKernel<3><<<grid, block>>>(d_data, DATA_SIZE); }
cudaError err=cudaThreadSynchronize();
//stop!!
QueryPerformanceCounter(&nAfter);
cudaMemcpy(data,d_data,byte_size,cudaMemcpyDeviceToHost) ;
dwTime = (DWORD)((nAfter.QuadPart-nBefore.QuadPart) * 1000000 / nFreq.QuadPart / LOOPNUM);
printf("%d usec for %d times kernel launch\n", dwTime, LOOPNUM);
Sleep(400); //ちょっと待つ
}
cudaFree(d_data); delete [] data; getchar(); return 0; }
783778:2008/11/26(水) 23:07:45
再現できるコードを書いてみました。
Dummyという関数でテンプレート展開されている__global__関数の数を調整してみてください。
ちなみに使っているチップはGTX260です
784アク禁明けw:2008/11/26(水) 23:21:32
>>783
面倒だから動かしてもじっくり読んでもいないのだけれど、
カーネル関数はGPUに都度転送することになるから
一回の呼び出し粒度が小さいと転送コストが目立つことになるよ。
その位だと、恐らくは起動コストも無視できないからもっと処理させるべき。
つーか、カーネル呼び出し(<<<>>>)をループで包んだらそりゃ遅いって。
785778:2008/11/26(水) 23:28:05
>>784
もちろんそれは分かるのですが、カーネル呼び出しの処理の内容は、<<<>>>の中の次元数に束縛される
傾向にあると思います。
データ構造などが異なる色々な処理を連携して実行する場合は、カーネル内の分岐では限界があるように思われます。
なので、1回当たりのカーネルのレイテンシを正確に把握しておきたいわけです。
786デフォルトの名無しさん:2008/11/26(水) 23:35:04
>データ構造などが異なる色々な処理を連携して実行する場合は、カーネル内の分岐では限界があるように思われます。
何にも判ってないと思われ。
787,,・´∀`・,,)っ-○◎●:2008/11/26(水) 23:39:07
っていうか、分岐ってさ、プレディケートで全部実行するんだよな?

if (cond) { //ここの条件は要素ごとに変わる
  funcA();
} else {
  funcB();
}

だったら、funcAとfuncBをインライン展開して全部プレディケートつき実行する感じだと思ってるんだが。
788デフォルトの名無しさん:2008/11/26(水) 23:42:08
困ったことに、団子に同意。
789デフォルトの名無しさん:2008/11/27(木) 00:03:15
条件分岐したら負けかなと思ってる by GPU
790デフォルトの名無しさん:2008/11/27(木) 00:32:04
そいえばCUDAって1つのカーネルのサイズが制限されてない?
でかいやつがまったく動かなくて苦労したんだけど
791デフォルトの名無しさん:2008/11/27(木) 01:39:04
どの位かは知らんが、そりゃぁ制限はあるだろうねぇ。
792,,・´∀`・,,)っ-○◎●:2008/11/27(木) 01:54:09
64Kのコンスタントメモリがあるじゃん。
コンスタントメモリは自分自身では中身の入れ替えは不可能。
あとはわかるよな?
793デフォルトの名無しさん:2008/11/27(木) 02:23:46
cudaで自己書き換えプログラムってできますか?
794,,・´∀`・,,)っ-○◎●:2008/11/27(木) 02:37:41
GPUのカーネルコード自身で書き換えるって意味なら無理。
PTXのバイナリコードを動的生成とかなら何かやれば可能かもしれない。

その辺の資料を中の人に要求したら

「機密事項ですのでお答えできません」
795デフォルトの名無しさん:2008/11/27(木) 17:49:14
大学の研究室にCUDAプログラミング用のコンピュータが導入された!と喜んでいたら、
HP ML115 + げふぉ8400GSカードだった…orz 学習用仕様で萎えた…
796デフォルトの名無しさん:2008/11/27(木) 17:56:05
まぁ、学部生なら十分だろ。
どうせ大した論文も書かないくせに。
797デフォルトの名無しさん:2008/11/27(木) 18:59:33
>>796
お前みたいなの、必ず湧くよなw
人を馬鹿にしたら、自分が偉くなるとでも思ってんの?
798デフォルトの名無しさん:2008/11/27(木) 19:42:03
でも俺もそこまでは言わないにしても
学習用仕様で萎えたってセリフは贅沢だと思うよ。
799名無し募集中。。。:2008/11/27(木) 19:46:05
値段を見て萎えたって意味だろうが性能的には十分な気がするんだけど
800デフォルトの名無しさん:2008/11/27(木) 19:54:22
そもそもGPGPGUはなんなんだ?8800はVGA用途だろ
801デフォルトの名無しさん:2008/11/27(木) 20:23:28
>>797
この程度で反応するなよw
社会でやっていけないぞ
802デフォルトの名無しさん:2008/11/27(木) 22:49:14
>>795
それなんて俺
CUDA使ってみたくて買い換えを考えていたけど
PCI Express x16バス搭載で1万だったのでML115と
玄人志向の8400GSカード買ってきてCUDA環境を手に入れたぜ
メインで使ってるマシンより性能がよくてこのままメインになりそうな予感
803デフォルトの名無しさん:2008/11/27(木) 22:51:16
事前に断っておくと俺は批判されるとチンコがたつよ
804デフォルトの名無しさん:2008/11/27(木) 23:04:29
自宅でCUDA使ってる人のコンピュータスペックってどんなもん?
805デフォルトの名無しさん:2008/11/27(木) 23:05:58
>>804
c2d e6320
806デフォルトの名無しさん:2008/11/27(木) 23:11:07
>>804
PenD920 GeForce9600GT
807デフォルトの名無しさん:2008/11/27(木) 23:31:34
>>804
Core i7 920 + GeForce GTX 280
808デフォルトの名無しさん:2008/11/28(金) 00:15:30
>>804
Xeon + GeForce GTX280
809798:2008/11/28(金) 03:29:12
>>799
いや、新技術半可通の俺が察するにGeF8000系は
CUDA対応ハードの底辺だから文句言ってるんだよ。
研究室で導入する(自腹じゃない)んだからもっと良いのよこせってことだろ?

ぶっちゃけ研究といっても今の時期じゃ全体的に未成熟だし
そのスペックでさえ限界動作なんぞせんだろと思って贅沢だなと。
810デフォルトの名無しさん:2008/11/28(金) 03:39:20
>>800
そんなことはない。GPGPUは対応ハードならグラボ1枚でも2枚でも一応使えるんだよ。
実例は押さえてないんでなんともいえないが
競合さえおきなきゃRadeon(VGA)・GeF8800以上(GPGPU専用)ということも出来るはず。

用途と価格の兼ね合いもあるだろうけど、
とりあえず試したいとかコストパフォーマンス的に有利な部分もあるかもしれん。

4gamerの記事が参考になるよ。
http://www.4gamer.net/games/050/G005004/20080615001/
811デフォルトの名無しさん:2008/11/28(金) 04:14:57
>>809
底辺どころかメインストリーム
812798:2008/11/28(金) 06:47:41
>>811
ラインナップ上は確かGeF8世代からの対応だから一応底辺だろう。
>>795の萎える理由に対しての推測だからこの説明でいいんじゃね?

もっとも現状ではSP数の差による性能差がそこまで決定的じゃないから
2x0とかQuadroを期待してるんだったら贅沢なんじゃねって話。
813デフォルトの名無しさん:2008/11/28(金) 07:50:33
GT2x0:性能は兎も角、(電源などの)要求仕様が一般的でない。
QuadroFX:同程度の性能のGeforceの数倍の価格と言う段階で、論外。
# なんて書くと、「アキバ的発想云々」って言われるんだけどねw
もしこれらが理由なら、見識不足と言わざるを得ない。
単に、>795はML115が気に入らないんだろw

まぁ、今時なら8400GSでも8600GTでも9600GTでも大して値段変わらんと思うが。
814デフォルトの名無しさん:2008/11/28(金) 11:07:07
ML115の電源じゃパフォーマンスレンジのGPUは無理ね
815名無し募集中。。。:2008/11/28(金) 11:14:47
ML115の電源はサーバー向けだけあってそれなりに良い電源だよ
電源投入後の全開爆音は凄いけど
ちなみに容量は370W
816デフォルトの名無しさん:2008/11/28(金) 11:52:57
それじゃ精々8600GTSか9600GT止まり。8400GSは案外無難な選択じゃないのかな。
817デフォルトの名無しさん:2008/11/28(金) 13:12:49
ちょっと誰か日本の公式フォーラムのcudaggさんの日本語をなんとかしてあげて
818デフォルトの名無しさん:2008/11/28(金) 13:51:35
Ubuntuの話なら、一応意味は判るでしょ。
つーか、ここでフォローしても意味ないしw
819デフォルトの名無しさん:2008/11/28(金) 18:56:55
>>813
GT2x0で一般的でないとか言ってたらCUDA自体一般的じゃないだろjk
ML115が不服と言うのでも十分贅沢……。俺が行ってた某理系大学なんか(ry
>>819
GT280は200Wの電源とそれに見合う通風環境が必要になるってこった。
この際、CUDAが一般的かどうかが問題じゃない。
>>820
CUDAスレでの話だからマシン云々というよりは
単に出たばっかのGT2x0系じゃなかったことに萎えてるのかと思っただけじゃん。

そもそも研究室とかだったら要求仕様が一般的でないなんてことは些細なことだ。
例えばOracle高価だから絶対使いませんなんて真似しないだろ。
そういうところは必要あれば用意するだろうよ。
GT2x0載せるとしたらそりゃML115じゃ無理だろうけど、それに載せろとは誰も言ってないし。
一般的云々言われなきゃ俺だってCUDAが一般的かどうかなぞ持ち出さんわ。
822デフォルトの名無しさん:2008/11/28(金) 19:55:38
グラボの方に萎えてると思ったもうひとつの理由が、
CUDAプログラミング用ということだから
マシン自体のスペックはそれほど高くなくても良いはずなんだ。
電源さえ足りてればな。深読みしすぎた俺が悪かったよ……。
823デフォルトの名無しさん:2008/11/29(土) 01:30:32
そこいらでレスをつけてるやつらの中に、8000系では一部使えない命令がある件を指摘するやつが居ないのは何でだぜ?
お前ら実は妄想だらけでなんもしてないんじゃないの?
824デフォルトの名無しさん:2008/11/29(土) 01:46:30
8400GSならCompute Capability 1.1だから
GT200で追加された命令でもなければ使えるわけだが。
825デフォルトの名無しさん:2008/11/29(土) 02:59:51
>>823
1.0世代は8800GTX,GTS,ULTRAに積まれたG80くらいで、8600GTや8400GSに積まれたG84やG86は
1.1世代だと言う知識もなしにここ見てたの? 他人を妄想だらけなんて指摘してられる状況じゃないじゃんw
826デフォルトの名無しさん:2008/11/29(土) 03:20:49
CUDAを単純に使いたいやつは、

HP ML115 (http://nttxstore.jp/_II_HP12591344)

G98の8400GS買えばおkだよ。
827デフォルトの名無しさん:2008/11/29(土) 19:48:41
グラボ早い順に並べるとどんな感じ?
やっぱりSP数×クロックなの?
828デフォルトの名無しさん:2008/11/29(土) 21:13:40
仕様を限定せずに一般的に言うなら、そりゃそうだ。他にどんな要素が来ると?
特定の応用でメモリ転送が重視されるのならメモリ帯域やバス仕様にも依存するし、
メモリ量が多い方が高速なアルゴリズムを採用できる応用ならメモリ量にも依存するわけだけど。

あー、1.0世代だとストリームが使えないと言う大きな欠点はあるね。
829デフォルトの名無しさん:2008/11/30(日) 00:11:00
チップ外は考えてなかったφ(..)フムフム…

後からSPが減ってクロックが上がった製品が出るじゃない?
だいたい値段は一緒だけど、劇的に性能が違うのかなと…
830デフォルトの名無しさん:2008/11/30(日) 01:46:04
同じ名前のSP減ったのは、恐らく歩留まりの関係で在庫処分しているだけだと思う。
使い方にも拠るけど、クロックが利く応用なら結構変わるかもね。
# SP数が利く応用なら逆に遅くなりかねない。
831デフォルトの名無しさん:2008/12/01(月) 03:44:29
やっぱみんなPDEとか立てたり解けたりできるの?
832デフォルトの名無しさん:2008/12/01(月) 06:49:36
そうだね
SDEとかね
833デフォルトの名無しさん:2008/12/01(月) 23:36:29
>>795
あぅっ、それはウチかも知れない。

まぁどーせ学生の作るプログラムなんて、レポート見てると
自分で作ってるのは15%ぐらいで、残りの人は友人のコピペ
改変か、ググって見付けたページのコピペ改変だからな。
予算の都合ってやつで、1人1台用意するならML115+GF8400
に成ってしまう。許せ。
おっ、これは?!と思うプログラムが出てきたら、GTX280で
走らせてやるから頑がってくれ。
834デフォルトの名無しさん:2008/12/01(月) 23:40:13
>>816
PCI-Ex補助電源コネクタ無いので、GF8600GT
か、GF9500GTまでが無難なところ。
835デフォルトの名無しさん:2008/12/02(火) 00:15:15
texture<float, 1, cudaReadModeElementType> tex;
のテンプレートで
> error C2018: 文字 '0x40' は認識できません。
ってエラーが大量に出るんだが、みんな出ないですか。
オレッスカ
textureのテンプレート使わなければでないのですが。

CUDA 2.1 + VC++ Express 2005
836デフォルトの名無しさん:2008/12/02(火) 00:20:06
>>835
PDFからコピペしてない?
837デフォルトの名無しさん:2008/12/02(火) 00:36:23
>>836
一回行コピペしてエラー出たので消して書いたのですが、
ファイルに変なコードが残るとかありますかね。
でもその行消すとエラーなしで、手書きで書いたら、
↓のようになります。

1>.cu(54) : error C2018: 文字 '0x40' は認識できません。
...
1>.cu(54) : error C2018: 文字 '0x40' は認識できません。
1>.cu(54) : error C2065: 'COMPILER' : 定義されていない識別子です。
1>.cu(54) : error C2146: 構文エラー : ';' が、識別子 'ERROR' の前に必要です。
1>.cu(54) : error C2065: 'ERROR' : 定義されていない識別子です。
1>.cu(54) : error C2143: 構文エラー : ';' が '<template-id>' の前にありません。
1>.cu(54) : error C2146: 構文エラー : ';' が、識別子 'tex' の前に必要です。
1>.cu(54) : error C2275: 'texture<T,dim,__formal>' : この型は演算子として使用できません
1> with
1> [
1> T=float,
1> dim=1,
1> __formal=cudaReadModeElementType
1> ]
1>nv_som_gpu.cu(54) : error C2065: 'tex' : 定義されていない識別子です。
838837:2008/12/02(火) 00:46:22
texture<float1, 1, cudaReadModeElementType> *tex = new texture<float1, 1, cudaReadModeElementType>;
ならOKなので、スタックにtextureを置くとダメな条件があるのでしょうか。
839837:2008/12/02(火) 01:31:47
kernelに引数で渡せないので
スタックにおいたらダメみたいでした。
解決。
840デフォルトの名無しさん:2008/12/02(火) 23:13:52
まだ、初めてみようかと考えている初心者以前のものです。
現状の自作数値解析プログラムはMPIで各ノードの各コアにプロセスを振っております(ノード内もMPIで並列)。
これの自然な拡張としては、MPIの各プロセスがGPGPUを使うという形になるかと思います。
しかし、マルチCPUのノードの場合、ひとつのGPUを共有することになります。
一つのプロセスがGPUのシェーダのうち1/4だけ使って、4プロセスから同時にGPUを使うなんてことは可能なのでしょうか?
841デフォルトの名無しさん:2008/12/02(火) 23:47:13
>>839
テクスチャはコンパイルするとただの数値みたいになるので、
グローバル変数としてそのまま使う以外のことはほとんど不可能、らしいよ。

関数にパラメータとしてを渡すのも、ポインタを得るのも無理。
842デフォルトの名無しさん:2008/12/03(水) 00:02:52
>>840
CUDAを使う場合、4プロセスから同時に使うことも可能。
但し、GPUをどう割り振るかはCUDAドライバの御心次第。
厳密に制御するには、GPU1枚ごとに担当スレッドを設けることになる。
# その場合、プロセス間通信でJOB型にするか1プロセスだけでGPUを占有するかは設計次第。

それはいいけど、プロセス全部分けるとマルチスレッドに較べて効率落ちないかい?
843840:2008/12/03(水) 00:20:11
>>842
ありがとうございます。
やはりリソースの競合が起きるようですね。

マルチスレッドは単純に覚えることが増えるのでやってませんw
スパコンのマニュアルでMPIを覚えたので、WSクラスタでもそのままの手法を持ってきてます。
一応、ノード内では共有メモリを使って通信するようなオプションでmpichをインスコしてるので多少はマシでしょうという感覚です。
844名無し募集中。。。:2008/12/03(水) 02:19:05
NVIDIA、PhysX/CUDAを活用する「パワーパック」の第2弾を提供開始
http://journal.mycom.co.jp/news/2008/12/03/001/index.html
845デフォルトの名無しさん:2008/12/03(水) 03:31:23
0x40でググったら
>文字 '0x40' は認識できません。 原因: ソースコード中に全角空白 ' ' が使われています。

まさか、な
846デフォルトの名無しさん:2008/12/04(木) 01:11:01
こんな感じで網羅的に点を回転させるプログラムを書いているのですが、
Thread数が320を越えるあたりでrotate関数に全ての引数が渡らなくなってしまいます。
その時でも計算量が少ないからか、roll_axisのz成分などは、引数として機能しています。
roll_axisのx,y成分も適当な値に変えると引数として働くようになります。
rotate(&coord, &pitch_axis,ANGLE);をコメントアウトすれば,roll_axisのx,yはThread数が多くても引数として渡ります。
計算量が多くなると(特に三角関数?)起きる気がするのですが、何が回避する方法はあるのでしょうか?

--ptxas-options=-vはUsed 42 registers, 56+28 bytes lmem, 2080+32 bytes smem, 8024 bytes cmem[0], 88 bytes cmem[1]て出ます。
-deviceemuでは正常に動作します。
847846:2008/12/04(木) 01:13:18
>>846のソースコードです。
####kernel(Thread1つが回転させる点1つに対応)####
__device__ runDevice〜〜の一部
float4 yaw_axis = make_float4(0, 0, -1, 0);
for(iyaw = 0; iyaw < limY; iyaw++){
float4 pitch_axis = make_float4(-sin(radian*iyaw), cos(radian*iyaw), 0, 0);
for(ipitch = 0; ipitch < limP; ipitch++){
float4 roll_axis = make_float4(cos(radian * iyaw) * cos(radian * ipitch), sin(radian * iyaw) * cos(radian * ipitch), sin(radian * ipitch), 0);
for(iroll = 0; iroll < limR; iroll++){
if(tid == iroll + ipitch * limR + iyaw * limR *limP)
g_mem[tid] = coord.x; //回転できているか確かめる。

rotate(&coord, &roll_axis, ANGLE); //回転させる点の座標と、回転軸と角度を与える。
}
rotate(&coord, &pitch_axis, ANGLE);
}
rotate(&coord, &yaw_axis, ANGLE);
}

__device__ void rotate(float4 *coord, float4 *axis, int angle){
coord->x = axis->x;
coord->y = axis->y; //とりあえず現段階では引数が渡るか確かめてるだけ
coord->z = axis->z;
}

848デフォルトの名無しさん:2008/12/05(金) 14:25:22
誰か、すげぇ簡単単純だけど、真理を付いてる様な神サンプル晒してよ
849デフォルトの名無しさん:2008/12/05(金) 15:02:45
>>848
どんなの? SDKのサンプルやbioのblog辺りじゃお気に召さない?
具体的なテーマがあって、実装が難しくなさそうなら作ってもいいけどね。
850デフォルトの名無しさん:2008/12/05(金) 21:35:18
ATI Streamから来ました。
スイマセン、場違いな場所に来てしまった。
AもまだなのにCなんて出来ません
851デフォルトの名無しさん:2008/12/05(金) 23:37:57
共産主義者の書いたマンガによると、Aより簡単らしいぞ。
852デフォルトの名無しさん:2008/12/06(土) 00:23:10
最近の若い連中はしょっぱながCだからな
853デフォルトの名無しさん:2008/12/06(土) 19:46:07
cudaってさ
C-daにしておけばギャグっぽくてよかったんじゃね?
854デフォルトの名無しさん:2008/12/07(日) 12:03:03
それならCarracudaの方がw
855デフォルトの名無しさん:2008/12/08(月) 22:50:38
teslaの話題が少なくて絶望した!
856デフォルトの名無しさん:2008/12/08(月) 23:03:23
えー、QuadroFX5600のアナログ回路をとっ外しただけの代物の、何を語れと言うのさ。
聞いてくれたら答えるけど。
あ、4桁シリーズは白根。どうせ事情は一緒だと思うけど。
857デフォルトの名無しさん:2008/12/08(月) 23:44:28
>>855-856
このスレの住人は GPGPUの用途にQuadroFX使ってるの・・・?
ていうかそもそもみんな何使っているの?
858デフォルトの名無しさん:2008/12/08(月) 23:58:17
ML115最強伝説
859デフォルトの名無しさん:2008/12/09(火) 00:12:18
Tesla D870 が至高
860デフォルトの名無しさん:2008/12/09(火) 00:59:33
>>857
このスレともう一つのCUDAスレを見ると、QuadroFXのメリットが書かれていると思うが。
# 普通、使うわけないだろって。
8800GTX、QuadroFX5600、Tesla C870の価格を見る限り、Teslaは未だましだと思う。

>>859
D870ってNVIDIA謹製ミニタワーにC870を二枚入れた代物だっけ?
あれだったら同じ筐体のQuadroPlexの方が潰しが利くと思うのだけど。
861デフォルトの名無しさん:2008/12/09(火) 01:51:03
GeForce GTX 280 極上
862デフォルトの名無しさん:2008/12/09(火) 20:16:56
9600GT買ったらCUDAでエラー出まくりで問い合わせたら
CUDAのようなメーカー付属のドライバで対応してない機能は保障外とのこと
CUDAをやるために買ったのにCUDAが動くことを保障してないなんて
はっきり言って詐欺だよ
863デフォルトの名無しさん:2008/12/09(火) 20:51:59
DELLにVisual Basicで組んだプログラムでエラー出るんだけど?
って聞いてるようなもんだな。
864デフォルトの名無しさん:2008/12/09(火) 20:54:42
>>862
nvidiaのドライバだとどうなんだ?
マジに教えてくれ
865デフォルトの名無しさん:2008/12/09(火) 21:07:30
>>863
CUDA SDKのテストプログラムでエラーが出まくる
実行する度に計算結果が違ってくる

>>862
どういう意味?NVIDIAのドライバ以外にCUDAが動くの?
付属のCDのドライバ以外はNVIDIAの公式ドライバでも保障しないと言われた
866デフォルトの名無しさん:2008/12/09(火) 23:35:15
>>862
一体どこの糞メーカのPCなんだ?
867デフォルトの名無しさん:2008/12/10(水) 23:15:44
>>865
>付属のCDのドライバ以外はNVIDIAの公式ドライバでも保障しないと言われた
それが普通ですよ。販売メーカとしては、自分のところでテストした
ドライバ以外は保証してないよ。

だから公式ドライバ入れる時とかもよく言われるでしょ。
トラブっても自己責任で、ってね。
868デフォルトの名無しさん:2008/12/11(木) 00:00:11
まあ当たり前なのは分かるんだけど、そこんとこ盲点だよ。
付属のバージョンだと根本的にCUDA機能が入ってないからね。
必然的にアップデートしないといけないのに保障外でしょ。
CUDAは素晴らしいとか大々的に宣伝してるけど動くかどうかは運次第という対応だからね。
これが世間に知れたらCUDAなんて誰も相手にしなくなると思うけど。
869デフォルトの名無しさん:2008/12/11(木) 00:16:59
tesla売るためだろ
870デフォルトの名無しさん:2008/12/11(木) 00:19:56
そうだろうね。TESLAは唯一保障された製品だからCUDAやりたい奴はTESLA買えってことなんだろう。
一般人には何の恩恵もない誇大広告だったというわけですか。
871デフォルトの名無しさん:2008/12/11(木) 00:23:48
メーカー純正フロッピーディスク以外使わない奴なんていなかっただろ。
みんなそうやって保証外の物を使ってきているんだ。今更何を言っているんだか。
872デフォルトの名無しさん:2008/12/11(木) 00:27:34
で、そんなふざけた事言うのはどこなんだ?
873デフォルトの名無しさん:2008/12/11(木) 00:27:39
どこかの誰かが同様にCUDAが使えないとなると自分がCUDAを使う意味がない。
だからCUDAは必要なくなるので別に何も問題ない。
誰もが使えないプログラムなんて作っても時間の無駄でしょ。
保障がないってのはそういう事よ。個人的な恨みとかじゃなく。
874デフォルトの名無しさん:2008/12/11(木) 01:57:49
ノートPCなんてNVIDIAが公式ドライバを提供しないんだぜ。
メーカーも提供しないから、アマチュアの作ったものを探してくるしかないっていう。
875デフォルトの名無しさん:2008/12/11(木) 04:03:59
あー、WindowsでCUDA試してないな、うちのMac
876デフォルトの名無しさん:2008/12/11(木) 21:46:41
保証が無いからどうだとかいうのは自作板でやってくれ。
877デフォルトの名無しさん:2008/12/12(金) 02:15:59
>>857
犬板にも書いたけど、JetWay HA05-GTのオンボッボで動きますた。
USBメモリ起動で、薄いCUDA nodeの出来上がりです。
オンボッボももっと沢山SPU載る日はいつかなぁ。
878デフォルトの名無しさん:2008/12/12(金) 18:46:10

【GPGPU】CUDA/ATI STREAM 速度・画質検証スレ
http://pc11.2ch.net/test/read.cgi/jisaku/1228764782/
 
879デフォルトの名無しさん:2008/12/12(金) 20:35:23
これからCUDAを使おうと思っているのですが、visualC++でうまくビルドできません。どなたか解決方法を教えてください。
環境はXPx64Edition,QuadroFX570でx64版のバージョン2.0のドライバとToolkitとSDKを入れました。
VisualC++は2005Expressです。
880デフォルトの名無しさん:2008/12/12(金) 20:39:35
すみません、879ですが、ビルドできないのはSDKの中にあるprojectsのsimpleTemplateです。
webで調べてみると皆さん問題なく実行できるようなのですが。。。
881デフォルトの名無しさん:2008/12/12(金) 22:05:56
どんなエラーが出るとかの情報はないの?
882879:2008/12/12(金) 23:26:03
失礼いたしました。下のようなエラーがでます。
nvcc fatal : Visual Studio configuration file '(null)' could not be found for installation at 'C:/Program Files (x86)/Microsoft Visual Studio 8/VC/bin/../..'
>>444さんと同じような問題と思われます。VisualC++のコンパイラとの相性が悪いのでしょうか。詳しい方、よろしくお願いいたします。



883デフォルトの名無しさん:2008/12/13(土) 06:12:02
こんな連中ばっかりだし、クマには生きづらい世の中になったぜ
884デフォルトの名無しさん:2008/12/13(土) 12:41:18
C++もろくに使えない人がいきなりCUDAに手を出すのもどうか
885デフォルトの名無しさん:2008/12/13(土) 14:55:07
なんか64bit環境でもVCのclは32bit版使わないとだめみたいなことCUDAフォーラム(英語のほう)に書いてあったよーな
886デフォルトの名無しさん:2008/12/13(土) 14:55:41
nvccから呼ばれるほうのclのことね>32bit版
887デフォルトの名無しさん:2008/12/14(日) 01:21:53
>>882
パスが通ってないんじゃね?
888879:2008/12/17(水) 18:34:27
PATHは通っていると思います。消してみると、
  nvcc fatal : Cannot find compiler 'cl.exe' in PATH
となりました。platformSDKのclにすると↓のようになりました。
  nvcc fatal : nvcc cannot find a supported cl version. Only MSVC 7.1 and MSVC 8.0 are supported
結局、CUDAtoolkitを32bitにしましたところOKとなりました。885さん、886さん、887さんありがとうございました。
889デフォルトの名無しさん:2008/12/17(水) 20:02:14
最適化してregisterの数を減らしたいんですが、
なんか心がけることとかコツってありますか?
890デフォルトの名無しさん:2008/12/17(水) 23:45:04
ptx出力を読め。以上。
891デフォルトの名無しさん:2008/12/18(木) 00:41:24
なんでわからないのでご教授を・・・・
VS 2005にカスタムウィザードを組み込んでパスも通して空の.cuファイルに書き込んだのに
1>LINK : fatal error LNK1181: 入力ファイル '.\Debug\sample.obj' を開けません。
と出るのですが・・・・何か環境設定間違っているのでしょうか?
892デフォルトの名無しさん:2008/12/18(木) 00:49:51
893デフォルトの名無しさん:2008/12/18(木) 01:47:35
>>892
それ使ってるんですが・・・readmeを嫁ということですね
894デフォルトの名無しさん:2008/12/18(木) 03:39:45
ptx出力がどうなるように最適化していけばいいんですか?
895デフォルトの名無しさん:2008/12/18(木) 07:42:38
>>894
>889なら、registerの数を減らしたいんだろ。ptxの出力を読んで少なくなっていればOKだw
896デフォルトの名無しさん:2008/12/20(土) 00:21:41
>>862
NVIDIA、モバイルGPUドライバを配布開始
〜ノートでPhysXなどCUDAアプリケーションが利用可能に

12月18日(現地時間)配布開始

 米NVIDIAは18日(現地時間)、モバイルGPU用の汎用ドライバを同社ホームページ上で配布開始した。
対応GPUはGeForce 8M/9M、およびQuadro NVS 100M/300Mシリーズ。

 従来、NVIDIA製モバイルGPUのドライバは、ノートPC本体のメーカーが提供していたが、
今回よりNVIDIAが汎用ドライバを提供することになった。対応OSはWindows XP/Vista。

 バージョンはデスクトップ版の180代に近い179.28 BETAで、CUDAに対応。これにより、PhysXや、
CUDA対応の動画編集ソフト、Photoshop CS4などでアクセラレーションが効くようになる。
ただし、PhysXについてはビデオメモリが256MB以上必要となる。

 なお、ソニーVAIO、レノボThinkPad、デルVostro/Latitudeシリーズ、およびHybrid SLI構成の
製品については対象外となっている。

 現バージョンはベータ版で、WHQL準拠の正式版は2009年初頭の公開を予定している。

http://pc.watch.impress.co.jp/docs/2008/1219/nvidia2.htm
897デフォルトの名無しさん:2008/12/21(日) 00:11:21
なんでvaioは対象外ですか?いじめですか??
898デフォルトの名無しさん:2008/12/21(日) 07:03:38
vaioとか一部のノートはリコールされてるから
899デフォルトの名無しさん:2008/12/21(日) 19:00:56
それ以前にノートだとメーカーが色々やってるから
一般的にドライバ更新さえノートのメーカー対応待ちだろ。
900デフォルトの名無しさん:2008/12/21(日) 22:30:31
シェーダプロセッサってエラーがあってもゲームでは無視されて
認識出来ないレベルで画面が崩れるだけだから
一見正常に動いてると思っててもCUDAは動かない人が多いかも
ドライバが対応してるとか以前にハードが用件を満たしてない
901デフォルトの名無しさん:2008/12/24(水) 10:44:05
どこでエラーになっているのかデバッグしろよ
902デフォルトの名無しさん:2008/12/25(木) 15:53:55
ちょいちょいCUDAをいじり始めてるんですが、OpenCLの規格が決まったことで、
CUDAの仕様も大幅に変わってしまうんですかね。
903デフォルトの名無しさん:2008/12/25(木) 18:15:24
MacBookProなんかだと自前でドライバ突っ込めばCUDA使えたんだけど,
VaioやThinkPadだとどうですか?
使っている人がいれば情報求む.
904デフォルトの名無しさん:2008/12/25(木) 18:21:26
5秒制限の条件とか回避の仕方とかがよくわからないのですが
教えてもらえないでしょうか?
905デフォルトの名無しさん:2008/12/26(金) 01:44:56
ThinkPad T61はOpenGL関係以外は使えた。
906デフォルトの名無しさん:2008/12/26(金) 03:48:04
OpenCLはAPIのみだからCUDAとは別にライブラリが用意されるだけだと思うよ
こっちは専用コンパイラも必要ない
907デフォルトの名無しさん:2008/12/26(金) 14:22:18
>>904
Gridを何回も起動するしかないのでは。だから、途中結果をメモリにのこしとかないといけない。
面倒だよね。
908デフォルトの名無しさん:2008/12/26(金) 14:35:42
>>904
Xを使わない、グラフィック機能を使わなければいけるはず。

…何のためのグラフィックカードやねんって感じだが
909デフォルトの名無しさん:2008/12/26(金) 17:45:27
>>907>>908
やっぱりそれぐらいしかないですか。
現状でグラフィック機能止めて使うのは無理なので
Gridの分割を考えてみます。

返答ありがとうございます。
910デフォルトの名無しさん:2008/12/26(金) 18:15:35
Vistaだとレジストリ弄ればもうちょっと長くできるよーみたいなこと言ってたような、言ってなかったような
911デフォルトの名無しさん:2008/12/26(金) 22:25:09
使うグリッド数を制限すればなんとかならなくもないんだが、効率は落ちるんだよね。
つーか、効率重視ならもう一枚挿すしかない希ガス。
912,,・´∀`・,,)っ-○◎●:2008/12/27(土) 00:47:07
913デフォルトの名無しさん:2008/12/27(土) 05:05:39
どのみちCUDA実行中は画面の描画が止まるから割り込み入れる工夫は必要でしょ
914デフォルトの名無しさん:2008/12/27(土) 08:47:20
描画要求の方がGridよりも優先されているようにしか見えないんだけど。
止まってくれたらどんだけ効率が改善することかw
915デフォルトの名無しさん:2008/12/27(土) 11:52:08
>>912
面白そうだけど、東工大は遠いなぁ。ワープアSEに新幹線は高い。
わがまま言うと、神戸でやって欲しい。
916デフォルトの名無しさん:2008/12/27(土) 14:13:48
大岡山の東工大なら歩いて行けるぜ!
917,,・´∀`・,,)っ-○◎●:2008/12/27(土) 23:27:30
>>915
六甲台か?
あの急勾配の坂は登りたくないな。
918デフォルトの名無しさん:2008/12/29(月) 05:06:23
>>912
これは紹介レベルだから、たいした内容ではないよ
919デフォルトの名無しさん:2008/12/29(月) 11:44:34
CUDAをクアッドコアで動くように出来ればいいのに
920デフォルトの名無しさん:2008/12/29(月) 12:15:26
>>919
どういう意味?

CUDAをQuadCoreCPUで動かすことなら何の問題もなくできるのだけど。
921デフォルトの名無しさん:2008/12/29(月) 12:44:32
っOpenCL
922デフォルトの名無しさん:2009/01/05(月) 20:09:11
VIPPERの諸君 立ち上がれ!
以前韓国を打ち破ったのは誰か知らない、小学生や、他サイトの管理人がVIPを馬鹿にしている!

全員集結せよ。そして全員で打ち倒すのだ!

もし時間がない人は、この文章をそのまま他のスレに貼ってほしい!

対策本部
http://takeshima.2ch.net/test/read.cgi/news4vip/1231149782/

今こそ Vipperの意地を見せつけるのだ!
923デフォルトの名無しさん:2009/01/08(木) 17:49:55
nc = 100*100
bs = 50
dim3 dimBlock(bs,bs)
dim3 dimGrid(sqrt(nc)/dimBlock.x,sqrt(nc)/dimBlock.y)
kernel<<<dimGrid, dimBlock>>>(idata, odata, sqrt(nc)

__global__ void kernel(float* idata, float*, odata, int nc)
{
index=blockIdx.x * blockDim.x + threadIdx.x +
+(blockIdx.y * blockDim.y + threadIdx.y) * nc
}
この時のイメージは、Gird:2x2、Block:50x50でよいのでしょうか?
それとこのままグローバルメモリで計算するのはできるのですが、一旦
シェアードメモリに退避して計算してグローバルメモリに戻す方法が
サンプルを見てもうまくいきません。どういう感じになるのでしょうか?
924デフォルトの名無しさん:2009/01/08(木) 18:11:37
いつも疑問に思いつつ使っているのですがグローバルメモリ使うときも
共有メモリ使うときも
float* data;
CUDA_SAFE_CALL(cudaMalloc((void**)&data, sizeof(float) * 100)
CUDA_SAFE_CALL(cudaMemcpy(data1, h_data, sizeof(float) * 100, cudaMemcpyHostToDevice))
になるのでしょうか?これはグローバルメモリにとっているのですよね。
共有メモリの話は、kernelのほうで使用するかどうかですよね?


コンスタントメモリ使うときだけどうも
CUDA_SAFE_CALL(cudaMemcpyToSymbol(data, h_data, sizeof(float) * 100))
としてホストからコピーするんですかね?
925デフォルトの名無しさん:2009/01/08(木) 23:27:14
>>924
cudaMemcpyToSymbolは定数メモリの他、グローバルメモリでも使えるよ。
要は、device空間で定義されたメモリと言うニュアンスでしかない。
逆に言えば、cudaMemcpyToSymbolを使わないとhost側のメモリ空間に割り付けられたアドレスを利用しようとしてしまう。
# この辺が判り難いのよね。

共有メモリはグリッド実行中しか使えないからhost側からは為す術がない。

>>923
どのサンプル見てどうやったらどう巧くいかないのか具体的に。
少なくとも、>923のような処理なら共有メモリの使いようがないんだけど。
926デフォルトの名無しさん:2009/01/09(金) 01:50:13
warp単位32スレッドで同じ命令を行って、
実際に一度に動くのは8スレッド

こういう考え方でいいのですか?
927デフォルトの名無しさん:2009/01/09(金) 18:21:54
>>925
結局現状では、cudaMemcpyXXXの違いは理解できそうにないです。
まあそれはよいとして(全然良くないですが)
>>923
のidataは、実は、一次元配列なんです。なのにカーネルには2次元で利用しよう
としているんです。
float host_idata[nc]
float* idata
cudaMalloc((void**) &idata, sizeof(float) * nc)
cudaMemcpy(idata, host_idata, sizeof(float) * nc, cudaMemcpyHostToDevice)
こんな感じのグローバル変数がidata。
としたとき、ncとbsの設定値によってはうまく処理できないことがあるのです。
これが謎です。わかる方いませんか?もちろんncはsqrtで整数になる値、設定する
値は、割り切れる値です。nc=1000*1000,bs=500で処理結果がおかしくなっています。
kernelの読んだあとエラーでinvalid configuration argument.になってます。

それと、共有メモリのほうですがこれは分かりました。
kernel<<<dimGrid, dimBlock, sizeof(float) * nc>>>(idata, odata, sqrt(nc))
第3引数の共有メモリのサイズを定義しないとだめだった。ちゃんと説明書を
読んでいなかったというレベルでした。これは解決です。
928デフォルトの名無しさん:2009/01/09(金) 19:05:25
>>927
ブロックは512x512x64と出ているけどいちお3次元は分からないので512x512
としてxで512使い切るとどうもyではもう1しかとれないようです。
ncは、そのままだとエラーが出ないレベルは、bs=20つまり20x20=400ブロック
使用。21,22は割り切れないので設定できない。みたいです。
とすると一次元配列を使用するのにわざわざ、x,yの次元のブロックを使いきる
テクニックは必要なさそうですね。と推察できると思います。結果からですが
ただ、これがバグであるなら次のCUDAのバージョンアップで使えるようになる
かもですね。
929デフォルトの名無しさん:2009/01/09(金) 20:53:02
>>928
次元とは別に1ブロックあたり512スレッドが上限じゃなかったっけ?
どっかにきちんと書いてあったはずだからバグではないよ。
930デフォルトの名無しさん:2009/01/09(金) 22:23:41
私は1次元でやってしまうことが多いなぁ。
で、スレッド数についてはdeviceQuery参照で。
931デフォルトの名無しさん:2009/01/10(土) 21:32:30
スレッドの最大数はAPIで取得できる。全部512だと思う。
ブロックの最大は65535だから65535*512以上は1次元のグリッドでは扱えない。
あと最大は512だけど、192か256くらいのほうがパフォーマンスが出る。
932デフォルトの名無しさん:2009/01/14(水) 01:57:36
933デフォルトの名無しさん:2009/01/14(水) 21:34:37
情報サンクス。早速、Linux版ゲットした。
934デフォルトの名無しさん:2009/01/15(木) 01:08:35
9600GTでVideoDecodeのサンプル動かそうとしたら正常に動かなくて、
結局SDK2.0+178.24まで戻さないとダメだった。

2.1にもソースは付いてるけど、2.0のままみたいだね。
935,,・´∀`・,,)っ-●◎○:2009/01/15(木) 07:55:42
>>931
1 warp = 32 threadで、GeForce 8/9が24warp/block、GT200で32warp/blockが最大だから
768thread/blockと1024thread/blockが最大なんだけどね。本来は。
CUDAのドライバ側が512でリミッタかけてるんだ。罠としか言いようが無い。
逆に言うとCUDAを経由しなきゃ目いっぱい使えるかもね。

ただ、スレッドインターリーブすると1スレッドあたりで使えるレジスタ本数が減っちゃうんだよね。
メモリレイテンシを隠蔽するならスレッドを目いっぱい使ったほうがいいし
逆に一時変数を何度も再利用する場合は、thread/blockを減らして1スレッドあたりの仕事量を増やしたほうがいい。
936デフォルトの名無しさん:2009/01/15(木) 15:42:19
CUDAってシーユーディーエーって読んでいいの?
それともクダとか、なんか読み方あったりする?
937デフォルトの名無しさん:2009/01/15(木) 15:57:04
>>936
クーダ
938,,・´∀`・,,)っ-●◎○:2009/01/15(木) 15:58:34
ネイティブの人は「クーダ」って発音してたよ。
Cellは「くた」だから注意な。
939デフォルトの名無しさん:2009/01/15(木) 16:01:48
ありがとう!明日から会社でクゥゥゥウーダ!!って叫びまくるわ
940デフォルトの名無しさん:2009/01/15(木) 16:02:44
きゅーだ って発音してる俺は異端ですかね?
941デフォルトの名無しさん:2009/01/15(木) 16:23:46
>940
そんな人いたんだ。
942デフォルトの名無しさん:2009/01/15(木) 16:29:33
英語的に クー よりも キュー だと思わね?
943デフォルトの名無しさん:2009/01/15(木) 16:56:19
>>941
異端だな
944デフォルトの名無しさん:2009/01/15(木) 16:57:46
どっちでもいいんじゃね

ちなみにnudeはニュードとヌードの両方の発音が有
945デフォルトの名無しさん:2009/01/15(木) 17:13:01
キュもクも似てるし、まあ仮に間違って言ったとしても気づかれないんじゃない?
946デフォルトの名無しさん:2009/01/15(木) 19:38:28
ホムペにはクーダと嫁
と書かれてたはず
947デフォルトの名無しさん:2009/01/15(木) 22:24:41
"The cuda and my wife"
948デフォルトの名無しさん:2009/01/15(木) 23:40:36
たしか英語版のfaqには
kuh-da
と書いてあったはず
949デフォルトの名無しさん:2009/01/15(木) 23:53:57
2.1はJITサポートがミソ?
950デフォルトの名無しさん:2009/01/16(金) 14:10:31
2.1をつついた人に質問
2.1ではカーネルに渡す引数でポインタ配列は使えますか?
951デフォルトの名無しさん:2009/01/16(金) 18:48:04
共有メモリからグローバルメモリに連続領域をコピーするにはどうすればいいでしょうか
カーネルから呼び出せるmemcpyみたいなのがあれば教えてください
952デフォルトの名無しさん:2009/01/16(金) 18:58:33
cudaMemcpyが長いようで、the launch timed out and was terminated.が
でてしまいす。これなんとかするほうほうありましたっけ?
953デフォルトの名無しさん:2009/01/16(金) 21:53:12
>>952
転送量を減らす。

>>951
cudaMemcpy
954デフォルトの名無しさん:2009/01/17(土) 00:16:47
>>951
スレッド内で連続的にメモリにアクセスするようなコードは望ましくない。
coalscedにアクセスするとなると、自分でコードを書くしかない。
共有メモリから転送を始める前に、同期を取ることも忘れずに。

>>952
参考までに、どんなハードウェアの組み合わせでどれくらい転送しようとしている?
8800GT辺りだと転送できるだけ全部転送してもタイムアウトしないのだけれど。
955デフォルトの名無しさん:2009/01/17(土) 02:52:44
>>954
カーネル実行後の結果データコピーでエラーになっているのですが
sizeof(float)*1000バイトを100回連続でコピーしています。
100個とも別のアドレスに結果をコピーしたいためそうしてます。やはり
いっぺんにメインメモリにいったんコピーしてからやったほうがいいので
しょうか?
956デフォルトの名無しさん:2009/01/17(土) 03:03:49
>>955
sizeof(float)*10000バイトを100回連続コピーでした。
957デフォルトの名無しさん:2009/01/17(土) 07:16:40
>>954
>>952
> どんなハードウェアの組み合わせ
958デフォルトの名無しさん:2009/01/17(土) 07:19:52
>>956
同一データ部分を100箇所にコピー?
独立の100箇所をコピー?
959デフォルトの名無しさん:2009/01/17(土) 07:55:29
>>956
それ、本当にメモリのコピーでタイムアウトしてる?
カーネル実行後に同期取らずにすぐにメモリのコピー始めて
100回コピーのどこかでカーネル実行がタイムアウトしてるとか。

cudaMemcpyの戻り値は
Note that this function may also return error codes from previous, asynchronous launches.
ということだし。
960954:2009/01/17(土) 08:44:25
>>955=956
えーと、都合数MB程度ってことか。それだったら>959の言うようにカーネル関数のタイムアウトじゃないかな。
DEBUGつきでCUT_SAFE_CALL(間違ってたら失敬)を使うか、自前でcudaThreadsSynchronize()を呼んで戻り値を見てみて。
カーネル関数起動後は、復帰を待たずにホストの処理に戻るからカーネル関数自体のエラーはカーネル関数起動では捕捉できないのよ。
で、まさかとは思うけど同一データを100回コピーならバス越しにやってはダメ。別のデータならホスト側の用件次第かな。
# でも多分、一旦ホスト側に転送してから分配した方が速い気がする。CPUとメモリ周りがよっぽど遅くなければ。

>>957
下手な突っ込みはお郷が知れるよ。この場合、CPUが遅いんじゃないかとかバスがx1なんじゃないかとかGPUがモニタ表示か何かで
よっぽど負荷が掛かっているんじゃないかとかGPU側メモリが巨大なSTELAなのかとか、組み合わせ次第で色々条件が変わってくるのよ。
961デフォルトの名無しさん:2009/01/17(土) 09:52:40
>>960
> 下手な突っ込みはお郷が知れるよ。


質問者が答えてないのを指摘しただけなんだが…
誤解させてすまんかった
962デフォルトの名無しさん:2009/01/17(土) 11:09:08
そういう意味か。あの書き方じゃぁ、誤解されるよ。
まぁ、大量転送じゃないと言う意味で、今回は関係なさそうだね。
963デフォルトの名無しさん:2009/01/17(土) 15:38:06
>>952の話
>>957
ATIの統合チップセットでオンボードのATIビデオカードを無効
PCI-E 1.0 x16バスにGeforce9600GT 512MB
CPUはAMDデュアルプロセッサ(結構遅いやつ)
964デフォルトの名無しさん:2009/01/17(土) 15:55:29
>>952の話
>>959
カーネル実行
a:cudaのエラーチェック(カーネルのエラーのありなし)
cudaThreadsSynchronize
for(100回
結果データをデバイスからホストにコピー
b:cudaのエラーチェック(直前のcudaMemcpyのエラーのありなし)
)
bのとこでthe launch timed out and was terminatedが出てるんです。

先週は時間がきてあきらめて帰ったのでここまでです。
言われたようにcudaThreadsSynchronizeの戻り値見てみたほうがよさそう
ですね。
965デフォルトの名無しさん:2009/01/17(土) 18:45:09
>>951
共有メモリはカーネル起動時に動的に確保されるメモリ領域だから
カーネルが終了したら消えるし、1つの実行スレッドから全部コピーなんて論理的におかしいし
共有メモリはあくまで高速動作と同期が取れる作業用のメモリとして考えたほうがいい
共有メモリを使って計算した結果は1個づつ普通のグローバルメモリに入れてやるのが正しいやり方

>>952
10000を一度に転送して実行しても
1を10000回繰り返して転送しても
実行時間は大差ないんですよ
CUDAで実行する部分は出来るだけコンパクトにまとめて
呼び出す本体の方で特殊な演算関数くらいの感覚でループさせて使うのが正解
966デフォルトの名無しさん:2009/01/18(日) 23:59:40
JCublasについて
おしえてエロイ人
967デフォルトの名無しさん:2009/01/19(月) 11:04:50
>>925の話
cudaThreadsSynchronizeの戻り値をチェックしたら
the launch timed out and was terminatedが出ていました。結果コピーで
エラーで落ちてたのだけどエラーデータは、その前に実行していた
cudaThreadsSynchronizeの問題だったようです。

(cudaThreadsSynchronizeが正常になるまで待つとしても配列を
100x1000回、100x10000回、回すと1分待っても同期とれないようです。)

つまりカーネルに同期できない処理が書かれていたのが原因だと思います。
NVIDIA_CUDA_Programming_Guide_2.0.pdfのp34-35のようなコードで
かつそこのカーネルのdevPtrを参照するだけでなく書き戻す処理をや
っているのでそれがだめなのだと思います。恐らくこういうピッチ処理
の場合は、参照のみが許されるのでは?と思います。
問題のコードをこのpdfの変数に直して下記に書いておきます。
__global__ void myKernel(float* devPtr, int pitch)
{
for (int r = 0; r < height - 1; r++) {
float* row1 = (float*)((char*)devPtr + r * pitch);
float* row2 = (float*)((char*)devPtr + (r + 1) * pitch);
for (int c = 1; c < width - 1; c++) {
row2[c] = row1[c]とrow1[c + 1]とrow1[c -1]やらの計算
}
}
}

このp34-35を見て思うのはindex使わずにこんな処理書いてGPUでやる意味
あるの?と思いますが。自分で書いてなんなのですが
968デフォルトの名無しさん:2009/01/19(月) 17:28:20
お前はあほかw
969デフォルトの名無しさん: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デフォルトの名無しさん:2009/01/19(月) 20:53:12
文句言っても何にもならない。
そう悟る時がくるまで気長に待ちましょうよ。
そうすれば成長しまっせ。
972デフォルトの名無しさん:2009/01/19(月) 23:38:15
それよりも先ず、日本語を何とかしてくれ。
>間違えな使い方
>しているとこにやらないように
>プロセッサ使ってきって
973デフォルトの名無しさん:2009/01/19(月) 23:41:25
そのサンプルはあくまでもcudaMallocPitch()がどういう風にメモリを確保するかの説明だからなぁ。
きっとライターは、まさかそのまま動かそうとされるは思っちゃいまいよ。
974デフォルトの名無しさん:2009/01/20(火) 02:02:49
ところでドライバ180なんだが2Dモードだかなんだかで消費電力抑える為に
ドライバが自動的にクロックを下げて3Dゲーム動作させると上がる仕様なんだけど
CUDA実行しても上がらないぞw
975デフォルトの名無しさん: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デフォルトの名無しさん:2009/01/20(火) 07:58:55
>>976
d_aがポインタなら、途中で解決できない状況があるのかも。
978デフォルトの名無しさん: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デフォルトの名無しさん:2009/01/20(火) 08:59:56
パックが違うのだけが理由なら、
struct data {int a; char b; char dummy[3];}とでもしておけばいいじゃん。
980デフォルトの名無しさん:2009/01/20(火) 13:53:14
ただでさえ少ない共有メモリをそんな無駄に使えない
981デフォルトの名無しさん:2009/01/20(火) 20:44:37
>>977
世の中夜勤帰りで朝から寝てる人だっているんだよ?
引っ越しの時ちゃんと挨拶行った?
顔合わせたら軽く会話するとかしてちゃんとコンタクト取り続けてる?
日頃からそういうコミニュケーションが取れてればいつ洗濯機を回していいのか
いつ静かにしなければならないのか
迷惑を掛けないように生活出来るはずなんだが
982デフォルトの名無しさん:2009/01/20(火) 23:36:58
>>980
マジで言っているのなら、設計が悪い。
どうしてもパディングしたくないくらい逼迫しているなら、int一個を切り分けて3バイトと1バイトで使え。
983デフォルトの名無しさん:2009/01/21(水) 00:22:25
共有メモリが制限されてるのに無駄な領域作って
ほとんどをグローバルメモリに追いやる方がよっぽど設計が悪いでしょw
984デフォルトの名無しさん:2009/01/21(水) 00:25:51
GPUのメモリレイテンシって12とかの世界だぞ
CPU用のDDR2で5だからな
intを内部でcharとして扱うプロセスを考慮しても共有メモリ使った方が早いんだよ
985デフォルトの名無しさん:2009/01/21(水) 00:35:27
CUDAで共有メモリを使うこと自体、無駄な同期待ちが発生するから避けたいところだと思うが。
coaxschedな読み書きができるなら、共有メモリより遅くないぞw
986デフォルトの名無しさん:2009/01/21(水) 02:24:30
>>975
(エンバグの)歴史は繰り返す。
987デフォルトの名無しさん:2009/01/21(水) 12:18:47
>>CUDAで共有メモリを使うこと自体、無駄な同期待ちが発生するから避けたいところだと思うが。
え?
共有メモリってCPUで言う所のただのレジスタみたいなもんで同期は指定しないと発生しないと思うけど

ところでローカル変数をすべて共有メモリに置いた場合のが早いんだけど
ローカル変数ってデバイス上のメモリに確保されるだけで共有メモリより遅いレベルのメモリを使ってるっぽいね
988デフォルトの名無しさん:2009/01/21(水) 18:11:15
あー、表現が悪かった。共有メモリを共有目的に使うと同期を取る必要が出てくるから同期待ちが発生するということ。
レジスタみたいに使うのなら確かに関係なかったね。

で、レジスタよりも速いかどうかについてはptx見てみたいところ。
989,,・´∀`・,,)っ-○◎●:2009/01/21(水) 18:18:05
見た感じリードレイテンシはこれくらい

レジスタ>>Const Memory>Shared Memory>>>>DRAM
990デフォルトの名無しさん:2009/01/22(木) 01:49:44
991デフォルトの名無しさん:2009/01/22(木) 06:22:13
CUDAスレ統合で様子見るってことでいいんでない?
分けるほど流れ速くないよ。
992デフォルトの名無しさん
質問スレってより雑談スレだもんなwwwww