[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 05/18 03:52 / Filesize : 192 KB / Number-of Response : 722
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



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/

175 名前:159 mailto:sage [2011/11/30(水) 10:04:46.33 ]
各スレッドでサンプリングされたXiとYiを使って
Σ(Ai*Xi-Yi)^2を計算して最小化するパラメータのAiを求めたいんだよ

求まったAiを使ってまたGPUでマルチスレッドで処理をするから
CPUに戻したくなかっただけ

戻せばできるのは分かるけど、戻さないでできるならその方がいいと思ったわけね

176 名前:やんやん ◆yanyan72E. mailto:sage [2011/11/30(水) 10:24:24.37 ]
なんか式がおかしい、Ai=Yi/Xi なんて答えを求めたい訳じゃなかろう?

177 名前:159 mailto:sage [2011/11/30(水) 11:22:19.91 ]
>>176
うん
正確には多項式近似の最小二乗法
めんどいので略した

178 名前:171 mailto:sage [2011/11/30(水) 14:43:43.94 ]
>>177
非線形最小二乗法ってこと?非線形最適化法しか知らないけど、目的関数が
特殊な場合にそれを上手に利用したのが非線形最小二乗って理解。
手元では対数尤度(二乗和みたいなもの)を171の手順で計算する関数を
CUDAで書いて、MCMCの中で使って推定値を求めているけど、同じことは
最小二乗法でもできると思うんだが…。

179 名前:159 mailto:sage [2011/11/30(水) 14:50:41.39 ]
>>178
カーネルの二度起動だよね?
その方法でもできると思うけど、一度で済ませたいというのがニーズ

それよかMCMCをマルチスレッドでやるってのが分からんのだが…
あれはマルコフ連鎖だからほとんどマルチスレッドで効果上がらんだろw

180 名前:178 mailto:sage [2011/11/30(水) 15:21:59.61 ]
>>179
こちらも一度の起動で済ませたかったけど方法が分からなかったので、
分かったら是非報告よろしく。
尤度の計算対象とするデータ数があまりにばかでかくて…。マルコフ連鎖は
順次計算だけど、その中の並列化は相当のメリットがあってね。

181 名前:やんやん ◆yanyan72E. mailto:sage [2011/11/30(水) 16:50:24.20 ]
>>179
二度起動がいやなら、ここの
ttp://neuralgorithm.org/documents/global-thread-synchronization-on-cuda-ja/
globalsyncみたいなのを使って計算→集計→計算って
やらせればいいんだろうけれど、
なんか怖いなw

182 名前:デフォルトの名無しさん mailto:sage [2011/11/30(水) 16:50:29.44 ]
CUDA Visual Plofiler への入力ファイル(cpjファイルとcsvファイル)をコンソールを使って作成したいのですが、可能でしょうか。
GUI環境ではメモリが足りず実行できないプログラムのビジュアルプロファイルを取りたいのですが…

183 名前:デフォルトの名無しさん mailto:sage [2011/12/02(金) 18:08:55.43 ]
linuxで4.0のtoolkitを導入した時に古いものをリムーブするかと出てきたのでyesを選んだのですが、もしかして同じ階層のものを全部削除とかしています?
X windowすら上手く開かなくなったのですが…



184 名前:デフォルトの名無しさん mailto:sage [2011/12/03(土) 18:12:31.51 ]
unixは知らんけど、windowsだとインストールしたファイルしか消されないよ
新しいの入れる度に毎回cl.hppを手動で追加してるけど、
アンインストールしてもそれだけ残ってる

185 名前:デフォルトの名無しさん mailto:sage [2011/12/03(土) 18:46:52.04 ]
Toolkitを入れたからじゃなくて、Driverを入れたからじゃね?
Driverを入れるときにroot権限がないとXのconfigを更新できないから。

186 名前:デフォルトの名無しさん [2011/12/06(火) 06:03:27.50 ]
4.1 RC2
| NVIDIA Developer Zone
developer.nvidia.com/cuda-toolkit-41


187 名前:デフォルトの名無しさん mailto:sage [2011/12/06(火) 10:46:45.36 ]
蔵人にメル栓抜きツイスターきたのか

188 名前:デフォルトの名無しさん mailto:sage [2011/12/06(火) 11:57:45.78 ]
コンパイルどれくらい早くなってんのかな
VCでコンパイルしてて小さなcuファイルでも数秒待たされるのがガチでイライラするんだけど

189 名前:デフォルトの名無しさん mailto:sage [2011/12/06(火) 12:05:12.77 ]
vcでコンパイルしているなら、変わるわけないだろ。
vsからnvccを起動しているなら兎も角も。

190 名前:デフォルトの名無しさん mailto:sage [2011/12/06(火) 12:18:58.00 ]
cuファイルとcppファイルに分けるのはどういう意図があるんでしょうか?thrustって何に使えるんですか?

191 名前:デフォルトの名無しさん mailto:sage [2011/12/06(火) 12:26:24.32 ]
>>190
・nvccに任せておきたくない部分は、.cppに書く。
・抽象的に取り敢えず書くのに便利。

192 名前:デフォルトの名無しさん mailto:sage [2011/12/06(火) 16:39:18.49 ]
cuにkernel_foo()を書いて
cppに書いたfoo()からkernel_foo()を呼ぶのが定石かと思ってた
そうすればopenclに移行したりしてもocl_kernel_foo()を呼び出すようにすれば変更すくないし。

193 名前:デフォルトの名無しさん mailto:sage [2011/12/06(火) 17:11:07.38 ]
>>192
その定石に則れば、>191の前半を満たせるから問題ないよ。
ただ、それだとCPU側とGPU側で共通のロジックを更に別のソースに書かないといけなくなるから適材適所だと思う。



194 名前:デフォルトの名無しさん [2011/12/07(水) 00:20:58.16 ]
青木氏の本読んでも、ガイド読んでも、くすだれcudaを見ても全くわからなかったので質問します。
おそらくwarpの話で、cudaをまったく分かっていないゆえの質問だと思います。
cudaのデータの取扱いを調べるために、以下のような構造のデータをGPU側に送り、
typedef struct data{
 int i,j; //初期化でi=1,j=0 
}DATA;
Grid1コ,ThreadBlock1コ,総Thread数512コと指定して、以下のようなコードを実行させました。
__global__ void test(DATA *A){
 int i = blockDim.x*blockIdx.x + threadIdx.x;
 if(i%2==0){//threadIdの奇遇でiの値及び加算値を変更
  A->i=2; A->j+=1;
 }else{
  A->i=3; A->j+=2;
}}
5,6回実行して、iの値はthreadの総数を奇遇どちらにしても3で不変でした。
jの値は実行するたび値が異なり、j=3,5,7,9のいずれかになりました。

iの結果は各warpの32コのThreadが順次if文を実行してて、
idが奇数のときの場合が後に実行されるから、結果がi=3となるのか?という理解でよろしいのでしょうか。

また、jの結果は青木氏の言う「加算命令を実行した結果は有効なスレッドに対してのみ反映される」
の理解がいると思うのですが、そもそも有効なスレッドがどう判定されているのかわかりません。
また512コのthreadがあるのに、jの値の結果が10以下になるのはどうも腑に落ちません。
i,jの値を決めているものは何か、ご教示願います。

195 名前:デフォルトの名無しさん mailto:sage [2011/12/07(水) 00:45:36.69 ]
+=で同じアドレスに同時書き込みしてるから

196 名前:デフォルトの名無しさん [2011/12/07(水) 01:09:59.92 ]
>>195
+=で同じアドレスに同時書き込みすると、内部で何が起こるんですか?

197 名前:デフォルトの名無しさん mailto:sage [2011/12/07(水) 01:27:31.21 ]
競合状態が発生してんじゃないの?
atomic演算とか同期が必要だと思うよ。
512スレッドで同一アドレスの変数の読み書きしてんだから。

まず512個の要素の配列作って、添え字にスレッド番号(上のi)を指定して確認してみたら?
書籍ならcuda exampleも買って読むといいかもね

198 名前:デフォルトの名無しさん [2011/12/07(水) 02:05:18.21 ]
>>197
>競合状態が発生してんじゃないの?
>>195のコメと合わせて考えるに、なんとなく予想はしてましたけど、取り合いになってるんですね...

>atomic演算とか同期が必要だと思うよ。
まだザックリとしか勉強してないので、atomic演算は知らなかったです。あとで試してみます。
同期を行う場合だったら、どうすればいいのだろう。

>まず512個の要素の配列作って、添え字にスレッド番号(上のi)を指定して確認してみたら?
それは分岐条件がきちんと実行しているのか見るためのテストをしたとき確認しました。

199 名前:デフォルトの名無しさん mailto:sage [2011/12/07(水) 07:39:11.25 ]
根本的にプログラミングの基礎が抜けている悪寒。

200 名前:デフォルトの名無しさん mailto:sage [2011/12/07(水) 09:07:22.99 ]
>>198
atomicという排他的処理を知らないのなら並列化プログラムをやるのは早すぎる。
増してCUDAという特殊な並列化をやるのはもっと早すぎる。


201 名前:デフォルトの名無しさん [2011/12/07(水) 12:02:55.64 ]
>>199
どこまで戻ればいいんでしょうか...

>>200
...これ使って課題提出しなきゃならんので、早すぎると言われても後に引けないです...

202 名前:デフォルトの名無しさん [2011/12/07(水) 13:13:17.16 ]
>>198
>>201
ですけど、
>>200の"atomicという排他的処理を知らないのなら並列化プログラムをやるのは早すぎる。"
では並列化プログラムをやるにあたり、
どういったことを勉強して、どういった手順でやればいいんでしょうか?
そこがよくわからず、私はいきなりcudaに突っ込んだので四苦八苦してるわけですが...

203 名前:デフォルトの名無しさん mailto:sage [2011/12/07(水) 14:10:39.88 ]
>>202
同期とロック



204 名前:デフォルトの名無しさん mailto:sage [2011/12/07(水) 15:51:27.47 ]
青木本読んだんじゃないのん?

x+=1ってのは
1.xを読み出す
2.読み出した値に1を加算する
3.結果をxに格納する
って手順なんだけど以下略

205 名前:デフォルトの名無しさん [2011/12/07(水) 16:45:28.63 ]
>>203
同期とロックですか。勉強します。

>>204
青木本は読みましたけど、ものにしたっていう状態じゃないです...
>x+=1ってのは...
普段、なんとなく使ってるので... 勉強不足ですみません。

206 名前:デフォルトの名無しさん [2011/12/07(水) 17:29:38.47 ]
ここの一番下に載ってる資料の4-7ページにatomicの説明が少しある。
ttp://accc.riken.jp/HPC/training.html

207 名前:デフォルトの名無しさん [2011/12/07(水) 17:58:07.38 ]
>>206
ありがとうございます。参照します。

208 名前:デフォルトの名無しさん mailto:sage [2011/12/07(水) 23:52:25.72 ]
この本でも読んでみると良い。
日本語でわかりやすい。

www.amazon.co.jp/gp/product/4798014621/



209 名前:デフォルトの名無しさん [2011/12/08(木) 00:42:53.72 ]
>>208
ありがとうございます。明日早速本屋行ってきます。

210 名前:デフォルトの名無しさん [2011/12/08(木) 17:37:10.02 ]
久しぶりに新しいCUDAの本が出たようだ。
www.amazon.co.jp/dp/4906608000/ref=cm_sw_r_fa_dp_454Zob03VNZ25


211 名前:デフォルトの名無しさん mailto:sage [2011/12/08(木) 18:59:25.20 ]
>>210
グラフィックをメインにしてCUDAを道具としてこれから使おうとする人にはいいかも?
3章第3項がCUDA入門。第4項の「応用プログラム」でおもしろい話が読めたらいいね。

こっち(2011/11/14発売)も気になったけど、内容説明読んだだけじゃどの程度の本なのかわからなかった。
値段とタイトルからはちょっと期待させられる。
Amazon.co.jp: CUDA Application Design and Development: Rob Farber: 洋書
www.amazon.co.jp/CUDA-Application-Design-Development-Farber/dp/0123884268/

212 名前:デフォルトの名無しさん mailto:sage [2011/12/09(金) 05:54:08.89 ]
CUDAというかVisualStudioが分からない。鬱だ死のう。

213 名前:デフォルトの名無しさん mailto:sage [2011/12/09(金) 09:40:45.47 ]
VSがわからないんじゃなく、C++がわからないんだろ



214 名前:デフォルトの名無しさん mailto:sage [2011/12/11(日) 23:39:15.74 ]
fortranもここでいいかな?
pgiのコンパイラ買って、三重ループの前後に指示行追加してやったけどまったく速くならない。憂鬱。。

215 名前:デフォルトの名無しさん mailto:sage [2011/12/11(日) 23:56:05.05 ]
fortran使う人って量子論とかやってる人?
どの世界の人が使うのかしら?

216 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 08:31:48.58 ]
fortranを使うのは過去の遺産のためだろう。
fortranを使えば速くなるわけでもないしなあ。

217 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 09:39:06.64 ]
fortran懐かし過ぎる
先日、二度と使うことは無いと思って本を捨てたばっかりだわ

218 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 20:09:34.35 ]
高レベル言語使うのは時代の趨勢じゃないかな。

LAPACKはfortranで書かれている。
fortranはnvccよりもアプリケーションに近い。
CUDAを使うのにnvccのレベルでなきゃダメということは無いと思う。
逆に、nvcc使わない人をバカにするヤツは、本物のバカだと思う。

219 名前:デフォルトの名無しさん [2011/12/12(月) 20:20:14.55 ]
道具にこだわることが目的となって、肝心の結果を出せない人間を馬鹿というでは?

220 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 21:18:03.01 ]
TSUBAME2.0でnvccを使うのと京でfortran使うのと比べるとどうなんだろう。
京はSPARCだけで計算して、TSUBAME2.0の10倍くらいの速度みたいだ。

東工大は教育機関なのに対して、理化学研究所は結果を求められる独立行政法人。

221 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 22:25:59.20 ]
既存のコードを使う限りでは京のほうが速いだろう。
ただ、富士通のコンパイラがダメダメだと聞いたけど、
それは解消されたのかな?

222 名前:デフォルトの名無しさん [2011/12/12(月) 22:29:03.43 ]
富士通のコンパイラは、8コアCPUへの割り当ては自動らしい。
これ、すごいことだと思うんだけど、
このコンパイラは完成しているのだろうか。

223 名前:デフォルトの名無しさん mailto:sage [2011/12/12(月) 22:46:19.38 ]
>>222
openMPに対応してたら各CPUのコアへの割り当ては普通にコンパイラ側でやると思うけど?



224 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 11:47:52.86 ]
>>223
OpenMPがそんな事やるかよ。やるのはOSだぞ。
>>222が言っているのはNUMAのことだ。
現時点でも普通のLinuxならnumactlを使えばかなりのケースでノードの割り当てができるようになる。
CUDAを使う場合でも、複数GPUを使う場合に、MPIを使う場合に有効だ。


225 名前:やんやん ◆yanyan72E. mailto:sage [2011/12/13(火) 14:16:05.38 ]
なんだ?OpenMPやNUMAを何のことだと思ってるんだ?
というか釣られたか?

226 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 17:55:43.92 ]
>>222
> これ、すごいことだと思うんだけど、
スパコンの世界では、ずうううっと前からやってるんじゃない?

227 名前:デフォルトの名無しさん mailto:sage [2011/12/13(火) 20:56:29.90 ]
じゃあ、そろそろ俺らも本気出すか

228 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 09:03:43.27 ]
>>227
本気だしたら、負けだと思うんだ。

229 名前:デフォルトの名無しさん [2011/12/14(水) 20:16:13.92 ]
4Gamer.net ― NVIDIA,CUDA 4.1をリリース。CUDAコンパイラのソースコード公開も
www.4gamer.net/games/076/G007660/20111214033/
中国時間2011年12月14日,NVIDIAは「CUDA 4.1」をリリースした。
最大の注目点は, LLVMベースとなるCUDAコンパイラが搭載されそのソースコードが公開された点だ。
LLVM(Low Level Virtual Machine)はAppleなどが参加する“言語非依存”のコンパイラ環境だ。
NVIDIAは同時に「CUDAプラットフォームのオープン化」を明言し,
LLVMベースとなるCUDAコンパイラのソースコードを研究者やツールベンダーに公開している。
要するに,NVIDIAのGPUでしか利用できなかったCUDA環境がほかのCPUやGPUに広がっていく可能性が出てきたのだ。
たとえばCPUや,それこそRadeonなどの他社製GPUでもCUDAを利用できる可能性が出てきたわけで,
CUDAの標準化をさらに推し進める起爆剤となり得るのである。

230 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 22:38:03.27 ]
これって、個人でもソースもらえるのかな

231 名前:デフォルトの名無しさん mailto:sage [2011/12/14(水) 23:11:41.54 ]
へえ、ソースを公開したんだ。
でも思いっきりOpenCLとかぶるな。
OpenCLが死亡か。


232 名前:デフォルトの名無しさん mailto:sage [2011/12/15(木) 08:04:39.43 ]
なんで、OpneCLが死亡するんだ?

233 名前:デフォルトの名無しさん mailto:sage [2011/12/15(木) 11:54:57.42 ]
まだ来てなくない?



234 名前:デフォルトの名無しさん mailto:sage [2011/12/15(木) 11:59:38.42 ]
Radeon用CUDA作っても、特定の機種用になりそうだな

235 名前:デフォルトの名無しさん mailto:sage [2011/12/18(日) 02:35:32.30 ]
そもそもRADEON上でCUDAってマトモに動くのか?
一応HD3000世代のRV670からはFP64対応らしいが

236 名前:デフォルトの名無しさん mailto:sage [2011/12/19(月) 02:14:51.68 ]
動かないよ
動かそうとする人も現時点ではいないだろ
まだまだGPGPU向けには問題ありそうだし

237 名前:デフォルトの名無しさん mailto:sage [2011/12/20(火) 01:48:20.74 ]
cudaスレだが、
研究室や自分の周りでけで高速化すればいいんだったらcudaでいいんだろうけど
製品に組みこむならintelの普及度やなるべく多くの人に使ってもらえることを
考えるとOpenCLのほうがいいんじゃないかと思ってる。

photoshopのGPU対応もOpenCLでやってるみたいだし。


238 名前:デフォルトの名無しさん mailto:sage [2011/12/20(火) 03:10:58.69 ]
Photoshopは現状CUDAとATi Streamです
高速化しようとすると結局はデバイス毎に最適化したプログラムを書くことになるので、
デバイスに特化したライブラリの方が融通が利きます
Parallel NsightでのデバッグはOpenCLではできません

239 名前:デフォルトの名無しさん [2011/12/20(火) 03:38:50.36 ]
NVIDIA Opens Up CUDA, Compiler Source Code is Out - Bright Side Of News*
www.brightsideofnews.com/news/2011/12/19/nvidia-opens-up-cuda2c-compiler-source-code-is-out.aspx


240 名前:デフォルトの名無しさん mailto:sage [2011/12/20(火) 18:56:37.44 ]
CUDAのハードウェア種別を問わない展開が可能になったという事は、
CUDAの上に乗っかる形で実装されているPhysXやOptiX等もまた
ハードウェア種別を問わず動作可能になる可能性があるという事だよな
期待したい

241 名前:デフォルトの名無しさん mailto:sage [2011/12/20(火) 22:23:45.55 ]
別にソースコードなくたって、ある程度の知識を持った人なら
CUDAを移植できたと思うけど

242 名前:デフォルトの名無しさん mailto:sage [2011/12/20(火) 22:49:46.93 ]
RADEONでPhysXはマーケティングの理由で使えないんだろ?

243 名前:デフォルトの名無しさん mailto:sage [2011/12/20(火) 23:19:03.65 ]
AMDがCUDAを実装されるの嫌がってPhysX蹴ったんだっけ



244 名前:デフォルトの名無しさん [2011/12/21(水) 19:57:27.52 ]
質問:
GPU側に2次元配列を送るには、
1.2次元を1次元に直してからcudaMallocでメモリ確保→cudaMemcpyで送信
2.cudaMallocPitchでメモリ確保→cudaMemcpy2Dで送信
という2つの方法がありますけど、
構造体のメンバーに2次元配列があるものをGPU側に送る場合はどのようにしたらいいんでしょうか?


245 名前:デフォルトの名無しさん mailto:sage [2011/12/21(水) 20:20:10.20 ]
ポインタじゃなく配列ならそのままでうまくいかんか?

246 名前:デフォルトの名無しさん [2011/12/21(水) 21:23:30.55 ]
>>244
再度検証してたけど、サジ投げた。
最終的には以下の構造体をGPU側に送信して処理した後、CPU側に戻したい。
typedef struct test{
int a; int b[5];
}TEST;

typedef struct data{
int c; TEST d[1][10];
}DATA;
上をcudaMallocでメモリ確保&cudaMemcpy送信しようとしてるけど、違うのかな。
教示お願いします。

247 名前:デフォルトの名無しさん mailto:sage [2011/12/21(水) 21:36:40.66 ]
そのまま転送すればいいじゃん

248 名前:デフォルトの名無しさん [2011/12/21(水) 21:49:19.70 ]
>>246です。
すいません。できました。お騒がせしました。


249 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 08:21:40.56 ]
>>229
このコンパイラって、謎のCをPTXに変換する部分だけじゃないの?
今のフロントエンド(cudafe)は、他社製品のEDGベースだから、出てこないと思うが。
 cudafe -> PTXへのコンパイラ(今だとnvopencc) -> ptxas
のまんなかが出来るだけなので、この部分のソースがあったところで、CUDAコンパイラを自分で作れるとか、
CUDAを他のプロセッサで動かせるようになるとかいうものではない。

250 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 13:07:41.69 ]
.cファイルがコンパイルできません
たすけて

251 名前:デフォルトの名無しさん mailto:sage [2011/12/22(木) 13:13:00.92 ]
んvccじゃできんだよ

252 名前:デフォルトの名無しさん [2011/12/26(月) 15:17:58.63 ]
あの、OpenCLってオワコンなの?IntelとAMDが支持してるのに全然盛り上がってないんだが。


253 名前:デフォルトの名無しさん mailto:sage [2011/12/26(月) 21:25:42.32 ]
科学技術計算向けがtesla一択だから他を使う理由もないってっところなのかね。
わざわざcudaで組んだものを他に移植する理由もないだろうし。



254 名前:デフォルトの名無しさん [2011/12/26(月) 21:42:01.58 ]
OpenCLで書くと長くなってしまう。
それだけのこと

255 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 02:04:51.35 ]
C++ Bindings使えよ。

256 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 10:05:27.99 ]
ちょっとしたラッパーかくのも嫌なのか

257 名前:デフォルトの名無しさん [2011/12/27(火) 11:26:29.65 ]
超素人の質問です。
コマンドラインでnvccを使いコンパイルを行っているのですが、OpenGLのサンプルコードをコンパイルできません。
freeglutを入れてます。
gcc -lglut program.cではコンパイル可能でした。
しかしnvcc -lglut program.cuとするとコンパイル不可となります。
-Lや-lによってライブラリやヘッダファイル先を指定したところで、コンパイルできませんでした。
阿呆な質問かもしれませんが、自己解決できそうにないのでよろしくおねがいします。

258 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 11:33:58.46 ]
凄いアフォだな
エラーメッセージすべてコピペし

259 名前:帝徒=繪璃奈=啓北商業の野島えり [2011/12/27(火) 14:53:52.03 ]
主犯 少頭劣一族=蔗冽一族とは

中国 華喃の山の梺の村八分の家。

二間位の横長で玄関の右側がお勝手。

大正に猿のままで生まれたのが

鈴木あゆみ(网(アミ) 范襤の子)


フィリピン人の范襤と 同じくフィリピン人のモンゴルに逃げた『シバ』との間の男児。

日本名 鈴木ひろしと聞いた。

その後、親戚の鈴木大樹を殺し 戸籍を使用。

今は一文字 雉。


260 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 21:08:02.00 ]
母体になるプログラムなしで、
CUDAのコード単体で動かせるツールって無いかねぇ。
外出先でCUDAのサンプル見せるのがメンドイ。
例えば ./cuda-run < source.cuda みたいな感じで実験できるといい感じ。
codepadみたいな感じで動かせればなおよしだけど。


261 名前:デフォルトの名無しさん [2011/12/29(木) 22:01:29.67 ]
そういうスクリプトかけばよい

262 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 10:51:17.15 ]
>>260
>母体になるプログラムなしで、
それってなんのこと? 外出先のPCで動かしたいってこと?
コンパイラのことなら、事前にコンパイルしておくかリモートでアクセスすればいい。
ドライバのことなら、外出先の端末にインストールさせて貰うしかない。
外出先のPCなんか頼らず、自前のPCを持っていけばいいじゃん。

263 名前:デフォルトの名無しさん [2012/01/05(木) 13:36:51.62 ]
>>257
手元に開発環境がなく、エラーメッセージをコピー忘れしてました。すみません。

# cc Drawtest.c -lglut
# ./a.out

(空のウィンドウが製作される)
(Drawtest.cをDrawtest.cuに中身は同じで拡張子だけ変えて)

# nvcc Drawtest.cu -lglut
/usr/bin/ld: skipping incompatible /usr/local/cuda/bin/../lib64/libglut.a when searching for -lglut

(-lglutを見付かられなかった?)

# nvcc -L /usr/local/cuda/lib64/ -l /usr/local/cuda/include/ Drawtest.cu -lglut
/usr/bin/ld: cannot find -l/usr/local/cuda/include/
collect2: ld はステータス 1 で終了しました

となりました。



264 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 14:25:08.28 ]
インクルードパスの指定は -l じゃなくて -I な

265 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 15:05:37.06 ]
/usr/bin/ld: skipping incompatible〜って64/32ビット混在時のエラーメッセージじゃなかったかな

266 名前:デフォルトの名無しさん [2012/01/05(木) 15:09:35.86 ]
>>264
なんというミス。
目で見て違いが分からない。
L(小文字)→i(大文字)に変えて同じようにしてみました。
# nvcc -L /usr/local/cuda/lib64/ -I /usr/local/cuda/include/ Drawtest.cu -lglut
/usr/bin/ld: skipping incompatible /usr/local/cuda/lib64//libglut.a when searching for -lglut
/usr/bin/ld: skipping incompatible /usr/local/cuda/bin/../lib64/libglut.a when searching for -lglut

結局パス指定なしと同じ見たいですね。

267 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 15:37:13.27 ]
おれも64/32の違いかと思ったが、パス指定から指摘してみた
実行している環境は? -m64 オプション付けてみ

268 名前:デフォルトの名無しさん [2012/01/06(金) 13:53:42.06 ]
# nvcc -L /usr/local/cuda/lib64/ -I /usr/local/cuda/include/ Drawtest.cu -lglut -m64
/usr/bin/ld: skipping incompatible /usr/local/cuda/lib64//libglut.a when searching for -lglut
/usr/bin/ld: skipping incompatible /usr/local/cuda/bin/../lib64/libglut.a when searching for -lglut
ううむ・・・・。

centOS 64bit
Device 0: "Quadro 4000"
Device 1: "GeForce 9500 GT"
パスは
LD_LIBRARY_PATH = /usr/local/cuda/lib64
です。
openGLのないコードはコンパイル及び実行まで問題ありません。

openGLを使うにあたって
/usr/local/cuda/include/にglut.h freeglut.h freeglut_ext.h freeglut_std.h
/usr/local/cuda/lib64/にlibglut.a
をコピペしましたが、まだ足りないのでしょうか?

269 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 13:59:40.26 ]
libglutは64ビット?
32ビットなんじゃねか?

270 名前:デフォルトの名無しさん [2012/01/06(金) 15:03:44.65 ]
glut.h freeglut.h freeglut_ext.h freeglut_std.h libglut.aをccが見ているであろう先のものと置き換えてしてみました。

# nvcc -L /usr/local/cuda/include/ -I /usr/local/cuda/include/ Drawtest.cu -lglut -m64
/tmp/tmpxft_000030a4_00000000-12_Drawtest.o: In function `disp()':
tmpxft_000030a4_00000000-1_Drawtest.cudafe1.cpp:(.text+0x14e6): undefined reference to `glClearColor'
tmpxft_000030a4_00000000-1_Drawtest.cudafe1.cpp:(.text+0x14f0): undefined reference to `glClear'
/usr/local/cuda/bin/../lib64/libglut.a(libglut_la-freeglut_init.o): In function `glutInit':

(中略)

(.text+0x898): undefined reference to `glPopClientAttrib'
collect2: ld はステータス 1 で終了しました

openGL系の関数が読まれていないみたいです。


271 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 15:37:17.18 ]
いや、だからfreeglutは64ビットを使用してるのかと聞いてるんだが
質問に対しきちんと回答できないようでは教えようがない罠

272 名前:デフォルトの名無しさん [2012/01/06(金) 18:39:39.36 ]
>>271
freeglutは64ビットのものを入れ直してやってみましたが、同じ結果になりました。

>>257
そこでCUDAのヘッダフォルダとライブラリフォルダに入れていたものを消し、-Lと-Iで直接freeglutのフォルダを指定したら
解決しました。
ライブラリが足りなかったのか、それともCUDAと一緒くたにしたのがダメだったのか解かりませんが、ちゃんとPATH通せってことみたいです。
お騒がせしました。


273 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 19:45:07.40 ]
>>262
だよねぇ・・・



274 名前:デフォルトの名無しさん [2012/01/06(金) 20:14:34.67 ]
環境
Windows7 Professional 64bit
Microsoft Visual C++ 2010 Express Version 10.0.40219.1
Microsoft .NET Framwork Version 4.0.30319
GeForce GTX 580
CUDA Toolkit 4.0.17
SDK 4.0.19
devdriver_4.0_winvista-win7_64_270.81_general

このサイトを参考に環境を構築しました。
feather.cocolog-nifty.com/weblog/2011/07/visual-studio-2.html
そして以下のサイトのサンプルプログラムを実行してみました。
www.gdep.jp/page/view/218
Hello,Worldと99 bottles of beerはcpu、gpu共に実行できました。
しかし、Matrixのプログラムはcpuの方は実行できるのですがgpuの方が実行できません。
以下のエラーを吐きます。
matrix_gpu.cu(5) : fatal error C1083: Cannot open include file: 'cutil_inline.h'
: No such file or directory
どうやらVisualStudioのパスがうまく通ってないということまでわかり、以下のサイトなどを参考にCUDA_INC_PATHなどを変えてみましたが、一向に変わりません。
d.hatena.ne.jp/Levi/20090921/1253535802#c
SDK内のcutil_inline.h自体をtoolkitのincフォルダにコピペすると、他の.hファイルもいくつか同じエラーが出たのでエラーになったものをすべてコピペしたところ、LNK2019"link.exe"というエラーで先に進めませんでした。
一度VisualStudioを再インストールしてみましたが、状況は変わりません。
Nvidia GPU computing SDK Browserではサンプルプログラムを実行できているので、CUDAの環境は整っていると思われます。
どうすれば解決できますでしょうか・・・。かれこれ1週間以上格闘しています。
VisualStudioは2010よりも2008にした方がいいでしょうか?


275 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 20:23:04.24 ]
C初心者にはきついと思うんだが…
とりあえず 'cutil_inline.h'のある場所を見つけて
そこを-I /'cutil_inline.hのある場所'と指定する

意味わからなければCのコンパイルを勉強すること






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<192KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef