【GPGPU】くだすれCUDAスレ pert4【NVIDIA】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2010/12/04(土) 21:57:13もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
CUDA使いが優しくコメントを返しますが、
お礼はCUDAの布教と初心者の救済をお願いします。
CUDA・HomePage
http://www.nvidia.com/cuda
関連スレ
GPUで汎用コンピューティングを行うスレ
http://hibari.2ch.net/test/read.cgi/tech/1167989627/
GPGPU#5
http://hibari.2ch.net/test/read.cgi/tech/1281876470/
前スレ
【GPGPU】くだすれCUDAスレ【NVIDIA】
http://pc12.2ch.net/test/read.cgi/tech/1206152032/
【GPGPU】くだすれCUDAスレ pert2【NVIDIA】
http://pc12.2ch.net/test/read.cgi/tech/1254997777/
【GPGPU】くだすれCUDAスレ pert3【NVIDIA】
http://hibari.2ch.net/test/read.cgi/tech/1271587710/
0159デフォルトの名無しさん
2010/12/18(土) 17:43:36行列の計算ってのはね、分割できるんですよ。
0160デフォルトの名無しさん
2010/12/18(土) 18:13:31確かに。
分割できなければコアが複数あっても意味がない。
0161デフォルトの名無しさん
2010/12/18(土) 18:55:39結論C2070を買え。
0162130
2010/12/19(日) 18:30:10一般論として言えるのかどうか知らないけど、
行列が(計算結果を含めて)ビデオカードのメモリにスッポリ入るなら劇的な高速化が見込めるけど、
そうでなければ、マルチコアCPU+本体メモリのほうが速度でもメモリ消費量でも有利なようです。
0163128
2010/12/19(日) 20:32:38__const__宣言時とは考えにくいので最初にcudaMemcpyToSymbolしたときでしょうか
デバイスにあるということはコンスタントメモリも終了時に解放したほうがいいと思うのですが、
cudaFree()では解放できないようです
コンスタントメモリはどのように解放すればいいのでしょうか。
0164デフォルトの名無しさん
2010/12/19(日) 21:03:47リンパックベンチでGPU搭載マシーンが上位に来てるんだし
0165デフォルトの名無しさん
2010/12/19(日) 23:49:30SDKのサンプルみればいいんじゃないか?
0166デフォルトの名無しさん
2010/12/20(月) 00:43:41kernelコードだって似たようなものなんじゃ。
0167デフォルトの名無しさん
2010/12/20(月) 11:19:24定数メモリはcudaMalloc()のように「確保する」ということなしに使うようになっています。
その為、cudaMemcpyToSymbol()のような特殊な関数でしか転送できません。
また、「確保する」ことなしに使える以上、「解放する」手続きは用意されていません。
0168デフォルトの名無しさん
2010/12/21(火) 15:33:13CUDA向きの安定ソートってありますか?
16000要素くらいです
0169デフォルトの名無しさん
2010/12/21(火) 15:52:440170デフォルトの名無しさん
2010/12/21(火) 15:54:210171168
2010/12/21(火) 16:18:22マージソートのサンプルがSDKにあったのですね。
チェックしてみます
0172デフォルトの名無しさん
2010/12/21(火) 20:58:05やれやれ.
0173デフォルトの名無しさん
2010/12/21(火) 21:12:11何Wで駄目だった?
0174デフォルトの名無しさん
2010/12/21(火) 21:46:211400W。ディスク系を外においてもなぁ。
0175デフォルトの名無しさん
2010/12/21(火) 21:49:200176デフォルトの名無しさん
2010/12/21(火) 21:59:470177デフォルトの名無しさん
2010/12/21(火) 22:17:39いったことをしないと無理そうだな。
0178デフォルトの名無しさん
2010/12/21(火) 23:19:450179デフォルトの名無しさん
2010/12/22(水) 01:04:00>>172が日本在住でないなら話は別だが。
0180デフォルトの名無しさん
2010/12/22(水) 07:14:57あれは110V/1400W。80GOLDのリタンダント。
日本じゃ実効1100W。
0181デフォルトの名無しさん
2010/12/22(水) 22:34:500182デフォルトの名無しさん
2010/12/22(水) 23:25:26なら、「1100W電源」として売るべきだろ。
排気量2000ccの車を3000ccだと言って売る自動車屋などありえない。
そのあり得ないことを長年やってきたのが、PC電源代理業者だ。
0183デフォルトの名無しさん
2010/12/23(木) 00:59:59supermicroは日本向けのサイトを持っていない。仕方あるまい。
ちなみに法人で入れたときはこの説明はあった。
www.supermicro.com/products/system/4U/7046/SYS-7046GT-TRF.cfm
0184デフォルトの名無しさん
2010/12/24(金) 20:02:02例えばGTX480は
Fermi-ComputeCapability2.0-GF100-GTX480
でよいのでしょうか
それともアーキテクチャとCCは1対1対応しているのでしょうか
また、Fermiの分類位置はここでよいのでしょうか
0185デフォルトの名無しさん
2010/12/24(金) 22:08:13は正しいけど、FermiはC.C.2.X全部を含む
GFの"F"はFermi、GTXの"T"はなぜかTeslaだったはず
0186デフォルトの名無しさん
2010/12/24(金) 22:20:210187デフォルトの名無しさん
2010/12/24(金) 23:41:29CUDA目的ならComputeCapabilityだけ意識すればよいかと。
あとはパフォーマンスが違うだけだから。
0188デフォルトの名無しさん
2010/12/24(金) 23:43:40GeForce 7800GTXさんはCUDA対象外じゃ・・・・・・
0189デフォルトの名無しさん
2010/12/25(土) 00:54:10toolktのインストールは必須ですか?
LD_LIBRARY_PATH /usr/local/cuda/lib64
を通さなくてはならないということはtoolkit必須なのかな
0190デフォルトの名無しさん
2010/12/25(土) 01:00:31そのdllをexeと同じフォルダにおけばいいんじゃないか?
きっとlib64内のなんかのライブラリつかってんでしょ。cutilとかかな
0191デフォルトの名無しさん
2010/12/25(土) 02:39:520192デフォルトの名無しさん
2010/12/25(土) 09:47:13もちろんツールキットのライブラリも必要。
0193デフォルトの名無しさん
2010/12/27(月) 19:25:09CentOS 5.5(64bit)でCUDAを導入したくて
・Developer Drivers for Linux (260.19.26)
・CUDA Toolkit for RedHat Enterprise Linux 5.5 (64bit版)
をインストールし、とりあえずSDK code samplesをコンパイルして動くか確かめたのですが
コンパイル後のファイルを実行しようとすると
"cannot execute binary file"のメッセージが出てきてプログラムが実行できません。
この問題を解決したいのですがどこを確認してどう改善したらよいのでしょうか?
ちなみにカーネルのバージョンは2.6.9-55.0.2.ELsmpです。
0194デフォルトの名無しさん
2010/12/27(月) 19:40:290195デフォルトの名無しさん
2010/12/27(月) 20:29:330196デフォルトの名無しさん
2010/12/27(月) 22:11:09例えば、ディストリビューションのnvidiaドライバなんかが残っていない?
その上に、最新ドライバをインストールしていて、
コンパイル時と実行時に別の共有ライブラリを参照していたりとか。
ていうか、自分も、ubuntuでx-updatesのドライバと最新ドライバが両方入っていて挙動不審。
ubuntuでもOS再インストールかw
0197193
2010/12/28(火) 00:14:59返信ありがとうございます。
ちょっとその辺を調べてみます。
後日、問題が解決したらフィードバックします。
0198デフォルトの名無しさん
2010/12/28(火) 07:48:230199デフォルトの名無しさん
2010/12/28(火) 16:15:180200デフォルトの名無しさん
2010/12/28(火) 22:47:32スレッド数が192を超えたあたりで処理が行われていません。
スレッド数が512より小さくても処理が行われないことがあるのでしょうか?
グラボは9800GTで11レジスタ、共有メモリを36byte使用してます。
0201デフォルトの名無しさん
2010/12/28(火) 22:48:39「処理が行なわれない」ってどういう意味さ。
0202デフォルトの名無しさん
2010/12/28(火) 23:01:14説明不足でした。
処理を1000回行い、平均処理時間を計測しているのですが、
スレッド数が192を超えると0(ms)になってしまいます。
0203デフォルトの名無しさん
2010/12/28(火) 23:19:140204デフォルトの名無しさん
2010/12/29(水) 00:34:350205デフォルトの名無しさん
2010/12/29(水) 00:38:37エラーが発生するような状況になっていないかどうかを確認・・・・・かな。
これが起きているとそれ以降の(タイマーを含めた)全ての処理がエラーになる。
0206デフォルトの名無しさん
2010/12/29(水) 01:31:39cudaThreadSynchronize();
cudaGetLastError();
0207デフォルトの名無しさん
2010/12/29(水) 14:09:27助言ありがとうございます。
まずはエラーを確認してみたいと思います。
0208デフォルトの名無しさん
2010/12/29(水) 19:33:12カーネルの引数を構造体のポインタにまとめると解決する。
0209デフォルトの名無しさん
2010/12/30(木) 20:27:57lspci | grep -i nVidia
でPCIバスデバイス情報確認したら
VGA compatible controller: nVidia Corporation: Unknown device …
ってコンピューターさんがおっしゃられたんだが…
0210デフォルトの名無しさん
2010/12/31(金) 00:21:26/sbin/update-pciids
してからコンピュータさんにもう一度お伺いたててご覧なさい
0211デフォルトの名無しさん
2010/12/31(金) 05:27:050212デフォルトの名無しさん
2011/01/01(土) 11:59:190213デフォルトの名無しさん
2011/01/04(火) 09:25:33GeforceをCUDA専用、RADEONをグラフィック専用とすることは出来ますか?
0214デフォルトの名無しさん
2011/01/04(火) 09:34:04GeforceとRADEONの2枚を挿して
GeforceをCUDA専用、RADEONをグラフィック専用とすることは出来ますか?
0215デフォルトの名無しさん
2011/01/04(火) 09:41:440216デフォルトの名無しさん
2011/01/04(火) 10:36:530217デフォルトの名無しさん
2011/01/04(火) 10:52:31cudaSetDeviceFlags(cudaDeviceBlockingSync);
0218デフォルトの名無しさん
2011/01/04(火) 10:53:37cudaSetDeviceFlags(cudaDeviceBlockingSync);
が有効になるプログラムとならないプログラムがあるのですがどこを
調べれば良いでしょうか。
0219デフォルトの名無しさん
2011/01/04(火) 12:31:38そして「有効」かどうかをCPU負荷で判定しているのかどうかも。
cudaSetDevice()を除くすべてのCUDA関数より先にcudaSetDeviceFlags()を
呼び出しているかどうか以外には特に調べるべきところはありません。
0220デフォルトの名無しさん
2011/01/05(水) 18:57:39CUDA_C_Best_Practices_Guide.pdf
CUDA_C_Programming_Guide.pdf
Introductory CUDA Technical Training Courses VolumeI.pdf
0221デフォルトの名無しさん
2011/01/05(水) 20:31:24ただこれ内容が古かったと思うからどんな仕組みで動いてるかを把握するくらいでいいと思う
必要になったらまた読み返せばいい。
次にCUDA_C_Programming_Guide.pdfで基本を学ぶ。
これは読み返すことが多くなると思う。
その次にCUDA_C_Best_Practices_Guide.pdfで良い実装の仕方を学ぶ。
これは実際にプログラム組みながらでいいと思う。
あと余談だがfermi tuning guideも読むといい。
英語が苦手なら「はじめてのCUDAプログラミング」や「CUDAプログラミング実践講座 - 超並列プロセッサにおけるプログラミング手法」
を読んでから必要なところをPDFで追加で読むと理解が早いと思う。
0222デフォルトの名無しさん
2011/01/05(水) 21:02:090223デフォルトの名無しさん
2011/01/05(水) 21:15:200224デフォルトの名無しさん
2011/01/05(水) 21:16:37残念ながらありません
0225デフォルトの名無しさん
2011/01/06(木) 00:39:2510くらい増えるのですが、なぜですか?
0226デフォルトの名無しさん
2011/01/06(木) 22:50:400227デフォルトの名無しさん
2011/01/08(土) 18:48:55ローカルメモリを使うのが最良なのでしょうか?
シェアードメモリを使うと、同時に立ち上げられるスレッド数が減って
逆に遅くなりました。
0228デフォルトの名無しさん
2011/01/09(日) 21:38:49そういうのはプログラムによって変わるだろ
とりあえずptxファイル嫁
>>227
>各スレッドで数百バイトのワーキングエリアが必要な場合
これが今以上減らせないならそもそもCUDAに向いてない
0229デフォルトの名無しさん
2011/01/10(月) 17:57:08L2キャッシュは大体何clockかかりますか?
0230デフォルトの名無しさん
2011/01/10(月) 19:32:12L2は大体150
0231デフォルトの名無しさん
2011/01/11(火) 09:01:340232デフォルトの名無しさん
2011/01/13(木) 11:27:07nvccはcuでないと、cudaコードとしてコンパイルしてくれないのですが、
拡張子がcppのファイルをcudaソースファイルとしてコンパイルするオプションはありませんか?
0233デフォルトの名無しさん
2011/01/13(木) 19:39:510234デフォルトの名無しさん
2011/01/13(木) 20:42:06亀レスですが,Driver APIを用いて出来ました.
ありがとうございました.
0235デフォルトの名無しさん
2011/01/14(金) 20:47:45概略をのせてくれまいか?
cudaAAA()で○○を設定
cudaBBB()でXを取得して
pthread_AAA()を使ってXXXする
くらいの事でもいいから
0236234
2011/01/15(土) 13:34:59簡単にで良いなら.
// 前処理
#pragma omp parallel
{
cuInit(); // 初期化
cuDeviceGet(); // GPUへのハンドルを取得
cuCtxCreate(); // コンテキストを作成し,ホストスレッドにバインド
mallocとか色々
cuCtxPopCurrent(); // コンテキストをアンバインド
}
glutMainLoop();
// カーネル実行
#pragma omp parallel
{
cuCtxPushCurrent(); // バインド
カーネル実行
cuCtxPopCurrent(); // アンバインド
}
関数の引数は省略しました.
0237デフォルトの名無しさん
2011/01/15(土) 17:57:20ありがとう。参考にさせてもらいます
0238デフォルトの名無しさん
2011/01/15(土) 21:30:19キャッシュはおまけ程度って考えでおk?
ていうか各スレッドが違うグローバルメモリにアクセスするなら同じカーネル内ではキャッシュ効かないよね
0239デフォルトの名無しさん
2011/01/15(土) 22:14:42キャッシュ汚染はひどいからな
マルチスレッドとキャッシュは相性が非常に悪い
0240デフォルトの名無しさん
2011/01/15(土) 23:23:54速度が10倍は違う。本当に使いにくいよ。
メモリアクセスがネックの(単純な)アプリで、shared memoryの使いまわしのできないアプリでは、
マルチスレッドを上回るのは難しい。
0241デフォルトの名無しさん
2011/01/15(土) 23:49:58FermiならCPUの2倍くらい出るってことは結構ある。
非Fermiならローカルメモリ使ったら即使い物にならない速度だったけど、
Fermiならキャッシュがなんとかしてくれたり。
0242デフォルトの名無しさん
2011/01/16(日) 18:58:37betaを(double)0に指定しても、
内部では真面目に係数をかけているのでしょうか?
参考(PDF注意)
http://developer.download.nvidia.com/compute/cuda/3_2_prod/toolkit/docs/CUBLAS_Library.pdf
0243デフォルトの名無しさん
2011/01/16(日) 19:01:420244デフォルトの名無しさん
2011/01/16(日) 19:13:170245デフォルトの名無しさん
2011/01/16(日) 21:42:18ありがとうございます。
FORTRANのコードを見る限り、ちゃんと係数の値によって
処理変えているようでした。
>>244
ありがとうございます。
実際に測定したのですが、係数の値を変えても
計算時間に明確な差は現れませんでした。
GTX480 1枚, CUDA 3.2, Windows 7 64bit
A=7500x8000の行列,B=8000x7500,C=7500x7500の行列で
C=alpha * A*B + beta * Cを計算
alpha = 1, beta = 0を15回で85.079秒
alpha = 10, beta = 10を15回で85.072秒
FORTRANのコードのような実装になっていない気がするのですが。
0246デフォルトの名無しさん
2011/01/16(日) 21:45:25をひたすらマイナーチェンジしていくのが一番早いと思う。
スクラッチはマイナーチェンジの経験を積んでからで十分。
0247デフォルトの名無しさん
2011/01/17(月) 05:28:45GPUがPTX読むみたいな事が書いてあるんだけど
0248デフォルトの名無しさん
2011/01/17(月) 06:02:220249デフォルトの名無しさん
2011/01/17(月) 07:27:520250デフォルトの名無しさん
2011/01/17(月) 10:47:310251デフォルトの名無しさん
2011/01/17(月) 20:15:090252デフォルトの名無しさん
2011/01/19(水) 09:33:50どう頑張ってもnvccでコンパイルしたサンプルファイルが実行できませーん
って開発以前の問題で精神折れそうだわ…
0253デフォルトの名無しさん
2011/01/19(水) 13:17:05#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct record { /* 1人分のデータ */
char name[32]; /* 氏名 */
int score; /* 得点 */
struct record *next; /* 次のデータへのポインタ */
};
void printlist( struct record *list ) {
if ( list != NULL ) { /* リストが空でなければ */
printf( "%16s:%4d\n", list->name, list->score );
printlist( list->next ); /* 先頭の次からリストの表示 */
}
}
0254デフォルトの名無しさん
2011/01/19(水) 13:59:28実行できないならできないなりにエラーメッセージが帰ってくるのではないでしょうか
CUDAコアとはスカラプロセッサのことでいいのでしょうか
FermiのみCUDAコアという呼び方をするのですか?
0255デフォルトの名無しさん
2011/01/19(水) 14:09:09実行できないならできないなりにエラーメッセージが帰ってくるのではないでしょうか
CUDAコアとはスカラプロセッサのことでいいのでしょうか
FermiのみCUDAコアという呼び方をするのですか?
0256デフォルトの名無しさん
2011/01/19(水) 21:03:35SFUを使えないのでしょうか
倍精度浮動小数点の計算は単精度浮動小数点演算機が2クロックで計算するのですよね
同じようにSFUが単精度計算分の2週でやってくれるということはないのでしょうか
0257デフォルトの名無しさん
2011/01/19(水) 21:10:310258デフォルトの名無しさん
2011/01/19(水) 21:57:03■ このスレッドは過去ログ倉庫に格納されています