NVIDIA CUDA/OpenCL 設定メモ
Linux環境でNVIDIAのCUDA/OpenC
1 NV_COMPUTE_SDK_PATH= "/path/to/N VIDIA_GPU_ Computing_ SDK" 2 SDK_INSTAL L_PATH="/path/to/N VIDIA_GPU_ Computing_ SDK/C"
Linux環境でNVIDIAのCUDA/OpenC
1 NV_COMPUTE_SDK_PATH= "/path/to/N VIDIA_GPU_ Computing_ SDK" 2 SDK_INSTAL L_PATH="/path/to/N VIDIA_GPU_ Computing_ SDK/C"
subviewはsuperviewのalphaを引き継いでしまう。たぶん。親のalphaが0.7で子が0.5の場合は0.7*0.5で子は0.35のalphaになる?
背景スケスケでコンテンツはクッキリ表示したい場合はどうすればいいか?と言うと、もう一つalpha 1.0のUIViewを用意し、そのviewをsuperviewにして子にaplha 0.7のbackground
つまり最初のviewの構成が
1 UIView alpha 0.7 2 UIView alpha 1.0 contens view
1 UIView alpha 1.0 2 UIView alpha 0.7 backgroundview 3 UIView alpha 1.0 contents view
解決法がタイトルは嘘にしてしまったが、やりたい事はコレで実現できる。もちろんbackgournd
link_to 等のヘルパメソッドは sinatra 本体には含まれていませんが、
sinatra_mo
1 % gem install sinatra_more
直接 Sinatra::B
1 require 'sinatra' 2 ... 3 require 'sinatra_more/markup_ plugin' 4 Sinatra::Base.register SinatraMor e::MarkupPlug in 5 ... 6 get '/' do 7 ...
該当クラスで register します。
1 require 'sinatra_more/markup_ plugin' 2 3 class Applicatio n < Sinatra::B ase 4 register SinatraMor e::MarkupPlug in 5 end
link_to だけでなく、全56種(ver 0.3.33 現在)ものヘルパメソッドが利用できるようになります。 以下に、よく使いそうなものを抜粋します。
1 link_to(*args, &block) 2 stylesheet_link_tag(*sources) 3 javascript _include_t ag(*sources) 4 image_tag(url, options={}) 5 image_path (src) 6 escape_htm l(text) 7 h!(text, blank_text = ' ') 8 content_ta g(*args, &block) 9 tag(name, options={}) 10 input_tag(type, options = {}) 11 form_for(object, url, settings={}, &block) 12 text_field _tag(name, options={})
詳細は lib/sinatr
sinatra_mo
1 require 'sinatra_more/markup_ plugin' 2 require 'sinatra_mo re/render_ plugin' 3 Sinatra::Base.register SinatraMor e::MarkupPlug in 4 Sinatra::Base.register SinatraMor e::RenderPlug in 5 ...
各プラグインの代表的なメソッドを記載します。
例えば、RenderPlug
描画系プラグイン
1 partial(template, options={}) 2 erb_template(template_p ath, options={}) 3 haml_templ ate(template_p ath, options={}) 4 render_tem plate(template_p ath, options={})
認証系プラグイン
1 current_user 2 authentica te_user! 3 logged_in? 4 authentica ted?(&block)
メール関係?(使わないので未調査)
ルーティング系プラグイン (named route?)
1 map(*args, &block) 2 # map(:accounts).to('/accounts/url') 3 # map(:admin, :show).to('/admin/sho w/:id') 4 # map(:admin) { |namespace| namespace. map(:show).to('/admin/sho w/:id') }
まだリリースされて間もないせいか、 NVIDIAのOpenCL SDKを使っていると不可解なエラーに遭遇します。 掲題のようなエラーメッセージを出すのもその一例ですが、 以下のようなコード(一部抜粋)でエラーがでます。
1 float4 x = sphere->c; 2 dg->t = x.x;
しかし以下のように記述すると大丈夫です。
1 float x = sphere->c.x; 2 dg->t = x;
OpenCLコンパイラが生成したptxコードの中に'selp'というのが入るような場合に問題が発生するようです。
NVIDIAのOpenCL SDKの場合、*.clファイルをCLコンパイラがコンパイルして、ptxという中間言語に変換します。さらに、ptxをptxparse(PLANGというパッケージの一部らしい)が解析してllvmのbcに変換します。 このケースでは、CLコンパイラが吐き出すコードと、ptxparse側の認識が一致していない感じです。 とりあえず、バグが直るまでコンパイラの気持ちになって回避するしかありません。
NVidiaのOpenCL SDKには、少なくともkernel moduleとdriver component の二つの要素があるらしい。
1 Error: API mismatch: the NVIDIA kernel module has version 190.18, 2 but this NVIDIA driver component has version 185.18.08.Please make 3 sure that the kernel module and all NVIDIA driver components 4 have the same version.
たまにこんなエラーメッセージが出てきます。
kernel moduleというのはバージョン番号とファイル名の一致からすると
1 /usr/lib64/libcuda.s o.190.18
このへんのファイルらしい(Linux版) driver componentというのはどこにある何を指しているのかが不明。
at iPhoneOS 3.1.2
shouldAuto
それで無理くり何とかする方法を考案した。けど、この方法では(もう少し改善すればできるかもしれないが)重力方向への回転しかできない。
shouldAuto
1 - (void)rotateNow{ 2 UIDevice *device = [UIDevice currentDevice]; 3 self.toRot ate = device.ori entation; 4 NSNotifica tion *notificati on = [NSNotifica tion notificati onWithName :@"UIDeviceOr ientationD idChangeNo tification " object:device]; 5 [[NSNotifica tionCenter defaultCen ter] postNotifi cation:notificati on]; 6 } 7 8 - (BOOL)shouldAuto rotateToIn terfaceOri entation:(UIInterfac eOrientati on)interfaceO rientation { 9 if(self.toRot ate){ 10 return interfaceO rient == self.toRot ate; 11 }else{ 12 return NO; 13 } 14 }
こんな感じ。何をしたかったかと言うと向きが変わったときにいきなり回転させるんじゃなくて、ちょっとボタンをだして確認を取りたかった。だからタイミングだけずらして回転方向は重力方向だけでいいやって話しなんだけど。
もしかすると、このNSNotifica
まぁ何にせよ。かなりhackな方法だからOSのバージョン上がったら使えなくなるかもしれない。
ちょっとレンダリング結果を動画にして確認したい場合に、.txt形式で出力してconvert (ImageMagic
1 /* 2 * Output image 3 */ 4 std::vector<unsigned char> buf(3*width*height); 5 glFlush(); 6 glReadBuff er(GL_BACK); 7 glPixelSto rei(GL_UNPACK_ ALIGNMENT, 1); 8 glReadPixe ls(0, 0, width, height, 9 GL_RGB, GL_UNSIGNE D_BYTE, &buf[0]); 10 11 char filename[1024]; 12 sprintf(filename, "%s_%04d.txt", basename, frame); 13 FILE *fp = fopen(filename, "w"); 14 fprintf(fp, 15 "# ImageMagic k pixel enumeratio n: %d,%d,%d,rgb\n", 16 width, height, 255); 17 for(int y = 0; y < host->height; ++y){ 18 for(int x = 0; x < host->width; ++x){ 19 int idx = (host->height - y - 1)*host->width + x; 20 fprintf(fp, "%d,%d: (%d,%d,%d)\n", 21 x, y, 22 buf[3*idx + 0], 23 buf[3*idx + 1], 24 buf[3*idx + 2]); 25 } 26 } 27 fclose(fp);
出来上がったら、
1 % convert basename_*.txt basename.mp4
fltkもGLUTも気がつけばFATになっていっている気がします。
だいたいこのぐらいで十分なので、
GUI toolkitが欲しいです。無かったら作ろうかな。
Widnowsの時代にはBSoD (Blue Screen of Death) というのがありましたが、 Macの場合は画面がグレーアウトするので、Gray Screen of Deathと呼んでるみたいです。
悲しいです。
最近GSoDが頻発するのですが、Geniusバーに持っていっても原因不明。いっそ綺麗に壊れてくれれば交換してくれるんですけどね。 道具として使い物になるかならないかギリギリのところ。
iPadのCPUはApple独自開発のA4というものでした。Qualcomm Snapdragon
See Also