- 1 名前:デフォルトの名無しさん [2011/08/23(火) 22:08:06.09 ]
- このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。 CUDA使いが優しくコメントを返しますが、 お礼はCUDAの布教と初心者の救済をお願いします。 CUDA・HomePage ttp://developer.nvidia.com/category/zone/cuda-zone 関連スレ GPGPU#5 ttp://hibari.2ch.net/test/read.cgi/tech/1281876470/ 前スレ 【GPGPU】くだすれCUDAスレ【NVIDIA】 ttp://pc12.2ch.net/test/read.cgi/tech/1206152032/ 【GPGPU】くだすれCUDAスレ pert2【NVIDIA】 ttp://pc12.2ch.net/test/read.cgi/tech/1254997777/ 【GPGPU】くだすれCUDAスレ pert3【NVIDIA】 ttp://hibari.2ch.net/test/read.cgi/tech/1271587710/ 【GPGPU】くだすれCUDAスレ pert4【NVIDIA】 ttp://hibari.2ch.net/test/read.cgi/tech/1291467433/
- 360 名前:やんやん ◆yanyan72E. mailto:sage [2012/01/25(水) 01:41:55.08 ]
- スピード勝負の世界で、しかもかなり複雑なアーキテクチャなのに、
ハードウェアを完全に隠蔽する訳にいかないだろ。
- 361 名前:357 mailto:sage [2012/01/25(水) 12:34:12.36 ]
- > ホスト・デバイスともに共有させたい場合はどうしたらいいのでしょうか?
ヘッダーファイルに #DEFINE などで定義して、ホストとデバイスのプログラムに そのヘッダーファイルをinclude する手があった♪
- 362 名前:355,356 [2012/01/25(水) 15:21:00.98 ]
- >>358
青木氏の「はじめてのCUDA」に似たようなエラーメッセージが載ってるのですが、 local dataがどの部分の話なのか、ちょっとわからない状態でして... >>357 >単に配列の次元が大きすぎるのでは? 予定だと1×256スレッドしか使うので、足りないはずないような... 意味が違うか。 ちょっとわからないので詳細お願いします。 >ヘッダーファイルに >#DEFINE >などで定義して、ホストとデバイスのプログラムに そのヘッダーファイルをinclude する手があった♪ ちょっと試してみます。それができなかったら、コピーするしかないかもしれません。 __device__ extern TEST test; のような宣言してて、実行ファイルができたときがあったのですが、何か違うよな、と引っかかってたので、 ここで質問しました。ありがとうございます。
- 363 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 17:40:16.56 ]
- 差し支えなければプログラムをアップしてくださいませ♪
- 364 名前:デフォルトの名無しさん mailto:sage [2012/01/25(水) 18:01:06.82 ]
- >>362
このサイトの一番下にある資料の3-41ページにそのエラーメッセージが載っている模様。 ttp://accc.riken.jp/HPC/training.html
- 365 名前:355,356 [2012/01/25(水) 18:04:09.31 ]
- >>362です。
>>363 申し訳ないのですが、プログラムのアップは出来ないです。すみません。 なんかもう分からなくなったので、ホストとデバイスの住み分けを行ったところ、 「ptxas error...」云々のメッセージが消え、コンパイルできました。 (さっきまでhost,device,global宣言関数がごちゃ混ぜな状態だった。) 何が原因だったのか分からず仕舞いです。 グローバル変数の共有はとりあえず、コンスタントメモリにデータコピーで様子見することにしました。 元コード(.c)をもう一度読み直したところ、デバイス側の方はReadOnlyで十分なようでしたから。 皆様回答ありがとうございました。またよろしくお願いします。
- 366 名前:365 [2012/01/25(水) 21:05:50.75 ]
- >>364
資料ありがとうございます。 うまくいったと思った途端、また同じエラーが出てきてしまったので、確認します。 .cファイルに.cuファイルを組み込ませるようにしたら、 __host__ __device__で修飾した関数が定義されてないと.cファイル側に言われ、 .cファイルと.cuファイルそれぞれ単独で動かせるようにしたら、 (同じ内容の関数を.cと.cuそれぞれ別名で実体作った。.c:test .cu:ktestみたいな) 今度はさっきと同じエラー。 実行ファイル作るだけなのに難しい...
- 367 名前:デフォルトの名無しさん mailto:sage [2012/01/26(木) 08:42:18.26 ]
- Host側とDevice側で型を別にすれば開発もっと楽になると思うんだけど
- 368 名前:デフォルトの名無しさん mailto:sage [2012/01/26(木) 08:53:13.45 ]
- 取り敢えずCudaのサンプルは捨てて、インクルード関係とオブジェクトの生成手順を確認するんだ。
- 369 名前:デフォルトの名無しさん mailto:sage [2012/01/26(木) 10:14:19.95 ]
- 見せられないところは削除して、問題の部分だけ残して、アップすれば??
- 370 名前:366 [2012/01/26(木) 16:19:08.01 ]
- >>368
>取り敢えずCudaのサンプルは捨てて、インクルード関係とオブジェクトの生成手順を確認するんだ。 のように手順を踏んでコンパイルしたところ、実行ファイルができました。 皆様ありがとうございました。
- 371 名前:370 [2012/01/26(木) 20:33:24.55 ]
- お恥ずかしながら、また戻ってきました。
あれからセグメンテーション違反が出てきてしまったので、あれこれ探していた結果、 どうやらデバイスのメモリ確保&送信に失敗していたようです。 しかし解せないことがあって、 構造体A a,構造体B b[100],構造体C c[100],...(以下略 をデバイス側に送るのですが、 (1つ1つのサイズは結構大きめ。グローバルは1GBあって余裕で確保出きるハズ...) void main(){ ・・・ test(&a,b,c....); } void test(A *a,B *b,C *c...){ A *d_a; B *d_b; C *d_c; CUT_SAFE_CALL(cudaMalloc((void**)&d_a,sizeof(A))); CUT_SAFE_CALL(cudaMemcpy(d_a,a,sizeof(A),cudaMemcpyHtoD)); CUT_SAFE_CALL(cudaMalloc((void**)&d_b,sizeof(B)*100)); CUT_SAFE_CALL(cudaMemcpy(d_a,b,sizeof(B)*100,cudaMemcpyHtoD)); ・・・ } はじめてcuda,cuda_by_exampleで確認したところ、 文法的ミスはないはずなのに確保ミスしてるらしく、中断してます。 この原因は一体全体なんなんでしょうか。
- 372 名前:デフォルトの名無しさん [2012/01/26(木) 21:28:56.32 ]
- 4.1正式版
CUDA Toolkit 4.1 | NVIDIA Developer Zone developer.nvidia.com/cuda-toolkit-41
- 373 名前:デフォルトの名無しさん mailto:sage [2012/01/26(木) 21:55:28.42 ]
- 構造体の中身がよく分からんが,allocateのところで *100は必要なのかな?
構造体Bのメモリーを100個分用意しようとしている?? 構造体Bの中にすでに [100]個の配列を取っているのに??? 数は合っておるのか????
- 374 名前:デフォルトの名無しさん mailto:sage [2012/01/26(木) 22:17:44.08 ]
- rhel6.0のがリンクミスかでダウンロドできん
- 375 名前:デフォルトの名無しさん mailto:sage [2012/01/27(金) 00:03:32.49 ]
- >>372
遂にRC取れたか!4.0からどう変わってるか知らんけど。 Kepler向けのプログラムを作れるのは5.0とかになるんだろうか。 そしてそれはいつ出るんだろう。 >>371 1GBのVRAM積んでるカードでも400MBぐらいの確保で失敗したことがあったような覚えがある。 確保するサイズを小さくしてもエラーが出るってんならこの話は忘れてくれ。
- 376 名前:デフォルトの名無しさん mailto:sage [2012/01/27(金) 01:34:46.65 ]
- 100x100の行列の積を1万回くらい実行したいのですが、
CUBLASだと小さすぎてCPUより遅くなってしまいます。 この1万回は相互に依存関係は無いので、並列化が可能なのですが、 このプログラムは自分で書くしかないのでしょうか。 TESLA C1070があるので、丸ごとVRAMに載ります。
- 377 名前:デフォルトの名無しさん mailto:sage [2012/01/27(金) 03:17:55.02 ]
- 4.1にcublas{S,D,C,Z}gemmBatchedってのが追加されてました。
especially for smaller matricesに効くってあったので、使ってみます。
- 378 名前:デフォルトの名無しさん mailto:sage [2012/01/27(金) 07:52:34.05 ]
- 一つのブロック内で100x100の行列の積を1回行う?
- 379 名前:デフォルトの名無しさん mailto:sage [2012/01/27(金) 07:52:51.42 ]
- 間違った
- 380 名前:デフォルトの名無しさん mailto:sage [2012/01/27(金) 07:53:00.44 ]
- あれ?
- 381 名前:デフォルトの名無しさん mailto:sage [2012/01/27(金) 07:53:07.78 ]
- 一つのブロック内で100x100の行列の積を1回行う?
- 382 名前:デフォルトの名無しさん mailto:sage [2012/01/27(金) 07:55:11.45 ]
- たびたび,失礼
一つのブロック内で100x100の行列の積を1回行う? そのブロックを1万個用意する? それらを並列に計算する? と言うコンセプトかな??? 自分でプログラムを作った方が,よほど勉強になると思う
- 383 名前:371 [2012/01/27(金) 18:15:48.81 ]
- >>373
CUT_SAFE_CALL(cudaMalloc((void**)&d_b,sizeof(B)*100)); CUT_SAFE_CALL(cudaMemcpy(d_a,b,sizeof(B)*100,cudaMemcpyHtoD)); これはミスですね.... 正しくは CUT_SAFE_CALL(cudaMalloc((void**)&d_b,sizeof(B))); CUT_SAFE_CALL(cudaMemcpy(d_a,b,sizeof(B),cudaMemcpyHtoD)); です。すみません。 >>375 4000MBの領域確保でも失敗することがあったんですか... ちょっと試してみます。
- 384 名前:デフォルトの名無しさん mailto:sage [2012/01/27(金) 20:31:39.53 ]
- d_aに送信してるあたりが
- 385 名前:デフォルトの名無しさん mailto:sage [2012/01/27(金) 21:52:59.41 ]
- d_b のサイズは構造体Bと同じ??
d_aのサイズはbと同じ?すなわち構造体Bと同じ?? 違っていたらエラーが出て当たり前では???
- 386 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 13:33:36.75 ]
- それから,ホスト側で も メモリーは確保しているのか????
- 387 名前:383 [2012/01/28(土) 17:54:35.37 ]
- >>371
なんかサンプルがめちゃくちゃなんで書き直します。
- 388 名前:387 [2012/01/28(土) 20:55:21.49 ]
- 確認なのですけど、カーネル関数の引数はポインタ限定ですか?
- 389 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 22:58:27.22 ]
- 配列はポインタで,1変数はそのままではなかったかい?
なぜか知らんけど
- 390 名前:デフォルトの名無しさん mailto:sage [2012/01/28(土) 23:07:13.34 ]
- 夜の埼玉は
- 391 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 01:49:05.91 ]
- >388
ホスト側のポインタ以外なら何でもOKのはず。少なくともintは渡せる。 クラスを渡せるかどうかは知らないけど。
- 392 名前:デフォルトの名無しさん mailto:sage [2012/01/29(日) 06:58:36.12 ]
- ホストのポインタ送って、GPU側のload/store時に
メインメモリから自動転送ってこともできるから、 その説明は正しくない。
- 393 名前:388 [2012/01/30(月) 15:13:56.68 ]
- >>391
セグメンテーション違反してた部分の引数に(デバイスで使用する)double(実体)を指定してたのですけど、 (デバイスで使用する)ポインタに変えたら、問題なく実行できました。 dtempはcudaMalloc/cudaMemcpy使ってます。 そもそもな話cudaはポインタ宣言したdtempの実体は*dtempではないのかな。
- 394 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 15:16:54.53 ]
- >>393
何を言っているのか判らない。問題が再現する最低限のコードでも貼ってみていただきたい。
- 395 名前:デフォルトの名無しさん [2012/01/30(月) 16:19:41.78 ]
- >>393
__global__ void kernel(double dtemp){ } int main(){ double temp=0.0; double *dtemp; cudaMalloc((void**)&dtemp,sizeof(double)); cudaMemcpy(dtemp,&temp,sizeof(double),cudaMemcpyHostToDevice); kernel<<<1,1>>>(*dtemp);//(←※1) cudaMemcpy(&temp,dtemp,sizeof(double),cudaMemcpyDeviceToHost); return 0; } ※1の部分でsegmentation fault。 __global__ kernel(double *dtemp){ }として kernel<<<1,1>>>(dtemp); とすると問題無し。 dtempのアドレスを引数にするのはいいけど、dtempの中身(0.0)を引数にしようとするのはダメ? そもそも※1の宣言自体間違ってる?どうなんだろう。
- 396 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 16:29:17.80 ]
- 393じゃないけど試してみた
__global__ void kernel(double dtemp){ } int main(){ double temp=0.0; double dtemp; // cudaMalloc((void**)&dtemp,sizeof(double)); // cudaMemcpy(dtemp,&temp,sizeof(double),cudaMemcpyHostToDevice); kernel<<<1,1>>>(dtemp);//(1) // cudaMemcpy(&temp,dtemp,sizeof(double),cudaMemcpyDeviceToHost); return 0; } これでコンパイルも実行もおkだったけど
- 397 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 16:57:38.16 ]
- >>395
dtempはdevicePointerなんだから、Hostコード中でデリファレンスしちゃダメ。 double値を渡したいだけなら引き数はdoubleで充分。 それと、※1は宣言じゃなくて呼び出しだから構文としてはあっている。 そもそも何がしたいのだろう。値を渡したいなら値を渡せばいいし、 ポインタを渡したいならポインタをそのまま渡せばいい。 devicePointerをHostでデリファレンスしちゃダメだし、 (その後どうせdevice側でデリファレンスできないから)HostPointerをdeviceにコピーしてもダメ。
- 398 名前:デフォルトの名無しさん [2012/01/30(月) 17:04:05.78 ]
- >>396
>>397 色々ごちゃまぜだったようです。スッキリしました。 ありがとうございました。
- 399 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 20:58:23.57 ]
- これからCUDAの勉強を始めようと思っています。
GPGPUプログラミングはシェアードメモリを有効活用できるかがポイントであるように思います。 そこで、あえて最新のグラボに買い換えず、キャッシュのないTesla世代のGTX285を所持し続けています。 キャッシュがあると、シェアードメモリをうまく使えてなくても、それをカバーしてしまって、 うまくプログラムできているかどうかを把握し辛いと考えたからです。 ただ、心配なのが、Fermi世代以降に発売された書籍だと、内容がTesla世代のGPUにそぐわない といった状況が起きてしまうことです。 GTX285のまま勉強するに際して気をつけること等あれば教えてください。 問題がなければ関連書籍(日本語)を全部購入して読もうと思います。 よろしくお願いします。
- 400 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 21:08:43.55 ]
- >>GPGPUプログラミングはシェアードメモリを有効活用できるかがポイントであるように思います。
そんなの計算する内容によるわ 活用しようがないのもあるからな 計算(使用)目的は明確なの?
- 401 名前:399 mailto:sage [2012/01/30(月) 21:39:43.45 ]
- >>400
信号処理に使う予定です。 FIRフィルタリングやFFTなどを大きな1次元、あるいは2次元配列に適用したいと思っています。
- 402 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 21:45:58.41 ]
- 俺は400じゃないが、気をつけることは、勉強がひと段落していざ使うときになって知識が陳腐化してても泣かないことかな。
ハードウェアはどんどん変わるし、TeslaやFermiで良しとされたことが数年後に通用するかはわからないからね。 せっかく今から始めるならFermi・Keplerを使ったほうがいいと俺は思うけど、 10年後にはどれも等しく陳腐化してるだろうから長期的に考えると確かにTeslaでもいいのかもしれない。 ただ長期的に考えること自体がGPGPUでは…と1行目にループする。
- 403 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 22:12:50.10 ]
- 古い方がいろいろ制限があって,勉強になるとは思う.
- 404 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 22:17:32.23 ]
- fftはcpu側からはインターフェースあるけどディバイス内では自前で作るしかない
- 405 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 22:18:26.89 ]
- > キャッシュがあると、シェアードメモリをうまく使えてなくても、それをカバーしてしまって、
> うまくプログラムできているかどうかを把握し辛いと考えたからです。 シェアードメモリーを使うようにプログラミングすればよいかと どのメモリーを使っているのか分からない,と言うことはないと思う あれば,そこをしっかり勉強すべきかと
- 406 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 22:19:12.36 ]
- そう言えば古いのは倍精度の計算ができないのでは??
- 407 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 22:22:30.66 ]
- まあ,デバイスメモリーだけで計算してみるとか,
シェアードメモリーも使って計算してみるとか, いろんなプログラムを作って比較するのが良いかと
- 408 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 22:26:01.98 ]
- 最初はシェアドするスレッドはどれだってだけでも頭が痛くなった
- 409 名前:402 mailto:sage [2012/01/30(月) 23:28:19.90 ]
- あとTeslaでやるなら、FermiとTeslaでバンクコンフリクトの発生条件が違ってるから
Teslaでのこれの回避には深入りしないほうがいいかと。 他にシェアードメモリの大きさなどの量的な違いがあるけど、そういった量的な 制約のために質的なというかアルゴリズムの種類を変えるようなことまで深入りするのも 避けたほうが。だってFermiやそれ以降で量が変わると一から見直しになるから。 これはFermi使ってる人もいずれ同じことなんだけど、勉強じゃなくて性能が欲しいんだからしょうがない。
- 410 名前:デフォルトの名無しさん mailto:sage [2012/01/30(月) 23:57:48.21 ]
- sharedがregister並に速いなんて嘘だから。
occupancyなんて上げるな。 warpあたりのregisterを増やして ILPを利用してレイテンシを隠蔽すべきだと。 www.cs.berkeley.edu/~volkov/volkov10-GTC.pdf
- 411 名前:399 mailto:sage [2012/01/31(火) 00:31:29.61 ]
- >>403
やはり、そうですか! >>404 参考になります。 FFTは重要になるのでしっかりと取り組みたいです。 >>405 >>407 >>408 なるほど、どのメモリかをよく意識してプログラミングします。 CPUの最適化に取り組んでいて思ったのですが、 キャッシュは便利な反面、こちらから意図的に挙動を制御できないことが パフォーマンスの考察を難しくしてしまう側面もあると感じました。 キャッシュなしのTeslaで鍛えたいです。 >>406 単精度しか使わないので問題なしです。 もし半精度でパフォーマンスが上がるなら、そのほうがイイくらいです。 >>402 >>409 世代を跨ぐにあたって非常に参考になるご助言をありがとうございます。 各種メモリの特性や帯域を意識して取り組むことで、 固有のデバイスに限定されない定性的なところを理解したいと思います。 Keplerではこんな組み方がイイかもしれないな、と思索できたら楽しそうです。 >>410 興味深い資料をありがとうございます。 各部のレイテンシ、スループットを頭に叩き込みます。
- 412 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 08:31:17.17 ]
- >>411
最終的に動かす機器で最もよい性能が出るように最適化するべきだし 自動でやってくれることを手でやるってのは勉強にはなるかもしれないけど意味ないのではって思うけど。 コンパイラの最適化を切ってアセンブリ書くようなものでしょ。
- 413 名前:デフォルトの名無しさん mailto:sage [2012/01/31(火) 12:08:28.56 ]
- 時間がいくらでもあるorそういう研究ならともかく
短期間で組めてそこそこのパフォーマンスが出せればいいなら キャッシュのあるFermiで適当に書いてもいいと思うんだけどね
- 414 名前:399 mailto:sage [2012/01/31(火) 21:32:30.15 ]
- >>412
おっしゃる通りです そのあたりは目的をよく考えて判断したいです。 今回はどちらかというと、GPUのポテンシャルを見極めたいというのが主です。 コードの可読性を優先して、性能はコンパイラやキャッシュ等にできるだけ委ねるというスタイルも 今後検討していきたいと思っています。 >>413 今回は研究用途ですが、 将来的にはFermi以降のGPUで、ちゃっちゃと書いたコードが快適に動くというところを目指したいです。 ただ、あまりにも下手なプログラムにならないよう、最初に少し深くやっておきたいです。
- 415 名前:デフォルトの名無しさん mailto:sage [2012/02/02(木) 04:23:36.19 ]
- レジスタといえば、GK104では強化されるのか、それともさらにピーキーになるのか気になる。
GF104はグラフィック特化で、レジスタ数やワープ数の上限に悩まされたし。 とりあえずアーキテクチャが一般公開されるまで待つしかないかな。
- 416 名前:デフォルトの名無しさん mailto:sage [2012/02/04(土) 00:16:58.91 ]
- また出てるな、これで最後らしいが
ttp://page4.auctions.yahoo.co.jp/jp/auction/d125096624
- 417 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 09:16:57.43 ]
- 誰かいるかな…
includehoge.blog.fc2.com/blog-entry-71.html このブログのソースをコンパイルして動かしてみようと思ったのですが 1>cudamatrix.obj : error LNK2019: 未解決の外部シンボル _cufftDestroy@4 が関数 _main で参照されました。 1>cudamatrix.obj : error LNK2019: 未解決の外部シンボル _cufftExecC2C@16 が関数 _main で参照されました。 1>cudamatrix.obj : error LNK2019: 未解決の外部シンボル _cufftPlan1d@16 が関数 _main で参照されました。 1>../../bin/win32/Debug/template.exe : fatal error LNK1120: 外部参照 3 が未解決です。 というエラーが出ます。 cufft.h自体は読み込んでいて、引数の過少があるときはそれに対してエラーを返すので 定義されていないという扱いになっているわけではないみたいなんですけど 解決法があったら教えて下さい
- 418 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 09:17:57.58 ]
- 誰かいるかな…
includehoge.blog.fc2.com/blog-entry-71.html このブログのソースをコンパイルして動かしてみようと思ったのですが 1>cudamatrix.obj : error LNK2019: 未解決の外部シンボル _cufftDestroy@4 が関数 _main で参照されました。 1>cudamatrix.obj : error LNK2019: 未解決の外部シンボル _cufftExecC2C@16 が関数 _main で参照されました。 1>cudamatrix.obj : error LNK2019: 未解決の外部シンボル _cufftPlan1d@16 が関数 _main で参照されました。 1>../../bin/win32/Debug/template.exe : fatal error LNK1120: 外部参照 3 が未解決です。 というエラーが出ます。 cufft.h自体は読み込んでいて、引数の過少があるときはそれに対してエラーを返すので 定義されていないという扱いになっているわけではないみたいなんですけど 解決法があったら教えて下さい
- 419 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 09:22:20.66 ]
- 誰か居るかな・・・いたら助けてください
includehoge.blog.fc2.com/blog-entry-71.html このブログのソースをコンパイルして動かしてみようと思ったのですが 1>cudamatrix.obj : error LNK2019: 未解決の外部シンボル _cufftDestroy@4 が関数 _main で参照されました。 1>cudamatrix.obj : error LNK2019: 未解決の外部シンボル _cufftExecC2C@16 が関数 _main で参照されました。 1>cudamatrix.obj : error LNK2019: 未解決の外部シンボル _cufftPlan1d@16 が関数 _main で参照されました。 1>../../bin/win32/Debug/template.exe : fatal error LNK1120: 外部参照 3 が未解決です。 以上のようなエラーが出てコンパイルが通りません 構造体の生成や関数の過少には反応するので、cufft.hが読み込めてないってことはないと思うんですが… 解決法があったら教えて下さい
- 420 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 09:22:49.74 ]
- 誰か居るかな・・・いたら助けてください
includehoge.blog.fc2.com/blog-entry-71.html このブログのソースをコンパイルして動かしてみようと思ったのですが 1>cudamatrix.obj : error LNK2019: 未解決の外部シンボル _cufftDestroy@4 が関数 _main で参照されました。 1>cudamatrix.obj : error LNK2019: 未解決の外部シンボル _cufftExecC2C@16 が関数 _main で参照されました。 1>cudamatrix.obj : error LNK2019: 未解決の外部シンボル _cufftPlan1d@16 が関数 _main で参照されました。 1>../../bin/win32/Debug/template.exe : fatal error LNK1120: 外部参照 3 が未解決です。 以上のようなエラーが出てコンパイルが通りません 構造体の生成や関数の過少には反応するので、cufft.hが読み込めてないってことはないと思うんですが… 解決法があったら教えて下さい
- 421 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 09:23:33.66 ]
- うわなんか四回も書き込んじゃったごめん
- 422 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 09:25:46.81 ]
- コンパイル詳しくないけどlibcufft.so(linuxの場合)のリンクしてる?
windowsならlibcufft.dllだとおもう
- 423 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 09:27:16.52 ]
- コンパイルじゃなくてリンクの問題でしょ
- 424 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 09:58:44.53 ]
- nvcc -lcufft sample.cu
- 425 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 10:20:43.62 ]
- このスレでときどき思うのはC/C++をほとんど知らないのにもかかわらず
CUDAに挑戦しようとする勇壮な挑戦者が多いな、ということ 彼らはその後うまくいってるのだろうか?
- 426 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 13:41:41.97 ]
- CUDA.NETも3.0で止まってるしなぁ・・・
- 427 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 21:44:42.85 ]
- コンピュート・ケイパビリティによって何が変わったかを俯瞰できるような一覧を掲載したサイトってご存知ありませんか??
- 428 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 22:16:51.83 ]
- >>417
追加のライブラリファイルにナントカ.libを追加すればいけそう。 ナントカは>>422さんのレスから察するにlibcufft.libかなぁ。 このへんは>>425さんの言うとおりcuda云々じゃなくてVisual Studio(C++)を使う上で頻繁に設定するところだねー。 >>427 俺も知りたいなぁそれ。その手の情報はSDKpdfのProgramming GuideとBest Practiceくらいしか知らない(片方だけかも)
- 429 名前:デフォルトの名無しさん mailto:sage [2012/02/08(水) 22:26:54.49 ]
- cufft.libなのだが。
- 430 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 07:17:56.91 ]
- てすてす
- 431 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 07:18:12.24 ]
- コマンドなら
- 432 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 07:18:18.71 ]
- あれ?
- 433 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 07:18:34.70 ]
- 以下のよう
- 434 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 07:18:39.54 ]
- nvcc fft.cu --compiler-bindir="C:\Program Files\Microsoft Visual Studio 10.0\VC\bin" -arch=sm_10 -L"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.1\lib\Win32" -lcufft
- 435 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 07:19:01.92 ]
- ファイル名をfft.cuとしてみた
- 436 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 07:20:23.21 ]
- 結果の一部
1014 6.347414 0.587785 1015 6.318954 -0.000000 1016 6.293659 -0.587785 1017 6.271449 -0.951057 1018 6.252275 -0.951057 1019 6.236131 -0.587785 1020 6.222946 0.000000 1021 6.212736 0.587785 1022 6.205431 0.951057 1023 6.201046 0.951057
- 437 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 07:21:26.93 ]
- -arch=sm_10 は適宜,変更のこと
- 438 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 07:25:00.70 ]
- これでも行けた♪
nvcc fft.cu -lcufft
- 439 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 07:26:45.21 ]
- 既出でした.失礼 >> 424
- 440 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 11:41:33.64 ]
- GPUの勉強を始めたばかりなのですが、スパース行列の格納形式種類で
ELLの格納方法とメリットが分かりません 調べたらlisのマニュアルに配列方法はあるのですが、説明と図とが噛み合ない点があり 理解できずにいます。 だれか教えてください
- 441 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 13:59:04.44 ]
- >>426
CUDA#とかCUDAfy.NETとか代替のライブラリはあるっぽいよ 使ったことないから詳細は知らないけど
- 442 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 14:23:54.18 ]
- >>440
LisはGPU上で動くの?
- 443 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 14:39:02.94 ]
- sparse matrixの格納形式はCUDAの問題じゃね〜だろ
- 444 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 15:45:25.65 ]
- >>440
コアレッシング状態で転送できるようになる。
- 445 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 17:19:58.52 ]
- CUDA.NETは使えなくはないぞ♪
- 446 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 18:44:06.72 ]
- >>440
スパース行列の格納方法がのっているのがLisのオンラインマニュアルくらいだったので >>443 ELLはGPUに適した格納方法と、ネットのどこかにあったので関連があるかと思い書き込みました たしかにCUDA以前の問題ですよね >>444 なるほど、見えてきました!ありがとうございます
- 447 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 19:02:29.63 ]
- >>422->>439
こんなにたくさん答えてくれるとは・・・ おかげで動きましたーありがとう
- 448 名前:デフォルトの名無しさん mailto:sage [2012/02/09(木) 19:08:48.94 ]
- おお、よかった^^
- 449 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 10:39:58.03 ]
- detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1481115004
- 450 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 13:35:49.60 ]
- >>441
CUDAfy.NETは知らんかった 最近出てきたのね、ありがとう
- 451 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 21:23:36.65 ]
- 2次元配列にアクセスするときのインデックス計算で
gy = blockDim.y * blockIdx.y + threadIdx.y; gx = blockDim.x * blockIdx.x + threadIdx.x; というのを頻繁にやると思うのですが、 この積和演算ってCUDAコアが使われるのでしょうか? それとも、CUDAコアとは別にアドレス演算器(?)的なハードウェアがあって、 それで計算してくれるのでしょうか? 後者だとうれしいです。
- 452 名前:デフォルトの名無しさん [2012/02/10(金) 21:37:17.01 ]
- アドレスもプログラムもデータ
- 453 名前:デフォルトの名無しさん mailto:sage [2012/02/10(金) 23:52:12.69 ]
- >>451
CUDAコア上に展開された(定義された)ブロックの中で演算をしていると思う
- 454 名前:451 mailto:sage [2012/02/11(土) 01:18:08.05 ]
- >>453
CUDAコアのサイクルを消費して計算しているということですね? ありがとうございました。
- 455 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 01:24:48.08 ]
- インデックス計算かどうかをGPUがどう見分けるというんだ
- 456 名前:451 mailto:sage [2012/02/11(土) 10:05:14.94 ]
- >>455
単にCUDAの予約語であるblockDimやthreadIdだけで構成されていて、 ○○ * ○○ + ○○ の積和の形になっていれば、 専用の回路に計算させる、とかできそうなものですが。 CPUではメモリアドレス式のカタチを解析してアドレス演算器に割り当てています。
- 457 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 11:29:23.45 ]
- そもそもグリッド,ブロック,スレッドの概念を理解しているのかな?
- 458 名前:デフォルトの名無しさん mailto:sage [2012/02/11(土) 11:29:54.96 ]
- ○○ * ○○ + ○○ だけではプログラムは作れないと思うのだが
- 459 名前:デフォルトの名無しさん [2012/02/11(土) 11:55:45.33 ]
- >>456
それ、どのCPUでの話ですか?
- 460 名前:デフォルトの名無しさん [2012/02/11(土) 19:16:02.78 ]
- 環境: CUDA 4.1 + Visual Studio 2010 Pro. + Windows 7 Pro. 64bit
C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.1\C\common\cutil_vs2010.sln をバッチビルドして、 cutil64.lib, cutil64.dll, cutil64D.lib, cutil64D.dll を作ろうとしたところエラーがでてしまいます。 エラーは出るのですが、cutil64.lib 以外は生成でき、 そのライブラリを使った行列積のサンプルプログラムもコンパイル&実行できました。 #ちょっと気持ち悪いですが。 しかし、cutil64.lib はどうしても生成できません。 何が悪いのでしょうか。 cutil64.lib, cutil64.dll, cutil64D.lib, cutil64D.dll をビルドしたときのエラーメッセージは以下の通りです。
|

|