CUDAその2 /cuda by example サンプルコードを動かす

CUDA by exampleベースでこのblogでは学習を進めていく予定である。

しかしながら、CUDA by exampleはいろいろと厄介なところがあるため、ちょっと補足したり掘り下げたりしながら進めていく。本のために作られたマクロやヘッダファイルがポイポイ出てくるため、配布されているサンプルコードをまるっとダウンロードしないと、そのままでは使い物にならない。

写経スタイルでのオベンキョーが好きな自分にはいささか面倒だが、まぁこれも楽しもう。

 

ということで、

CUDA By Example | NVIDIA Developer

からまずサンプルコードをダウンロードしてくる。

とりあえずテンプレートの動作確認のためにごく簡単なコードを書く。

新しいプロジェクトを作成して、Installed>templates>NVIDIA>CUDA 8.0 runtimeを選択。適当に名前を付けて保存。

すると、Externalにヘッダファイルがいろいろ入って、Kernel.cuとかいうソースの存在するプロジェクトが出来るはずである。

今回はサンプルコードを打ち込むのが目的なので、中身はとりあえず削除。サンプルコード3-1,3-2を打ち込む。コンパイルして実行。うむ、動く。

 

ここで、3-3を打ち込んで同様に実行しようとすると、今度はコンパイルエラー。

"book.hとかいうヘッダファイルは知りません"とか、"HANDLE_ERRORとかいうマクロ知りません"と言われてしまう。ヘッダはどうやら、ダウンロードしたファイル、cuda_by_example\common内にあるようで、ソリューションのプロパティ、

Configuration properties>VC++ directories>include directories 

内へ、先のcommonフォルダのパスを追記。

サンプルコード3-3が通るようになった。

Surfacce 死亡/修理に失敗する

見出しの通り。

 

はじめ、正面のパネルを外すまでは順調だった。

分解の難易度がクッソ高い理由の一つとして、液晶画面を壊さずに剝がすのが難しいとあちこちに書かれていたものの、ヒートガンで適切に温めてから、オープナー(とは名ばかりの、ピック形に切ってバリを取った0.3mm厚のアルミ辺)でこじってやれば、案外簡単に開くのだ。

ちょっと剥がしづらいときは、温めてから接着剤をカッターみたいなもので切ってやれば簡単に隙間は広がっていく。

思いのほか簡単じゃないかーと思いながら、一個一個ネジの位置を記録したり接着剤を外したりFFCを外したりして、お目当てのバッテリーに到着。バッテリも接着剤でくっついているので、ベリっと外す。

そしてバッテリパックを交換して、液晶を繋ぐと・・・ごくごくうっすらと起動画面が表示されるものの、画面が非常に暗い。

「あ、これバックライトあかんやつだ」と即座にわかったので、モニタ裏のFFCをチェックする。問題なくつながっている。

どこか断線でもしたのか・・・どこぞでショートでもしたのか・・・バッテリパックがだめな奴だったのか・・・

幸い、LCDに照明をガンあてして、頑張って斜めから見ると読み取れるので、powercfg /batteryreport からバッテリの電圧やキャパシティ、使用回数がほぼ新品同様なのは確認した(3回使用されていた。まぁチェックか何かだろう。)。

疑ってごめんよセラーさん。

 

とりあえずその時、すでに時間は遅かったので寝ることを選択。スイッチ長押しで電源を切った。

 

そして次の日、起動しない。起動しないだけならまだしも、電源ケーブルを繋げてもケーブル側のLEDがつかない。

あれこれやって、ケーブルが健康で、マザーのコネクタの上までDC12Vが出ているのは確認するも、もはやわけがわからない。

結局その後、うんともすんとも言わなくなった、4.2万の文鎮が出来上がったのであった。

つらい。

 

ので、その悲しみにまかせてポチっとしました。

 

https://www.amazon.co.jp/gp/product/B071SDNWZL/ref=oh_aui_detailpage_o01_s00?ie=UTF8&psc=1

今後は出張も多いだろうし、軽くて高性能なラップトップがほしかったのである。

正直、茄子が出た勢いにすべてを任せている。

まぁ、もうどうにでもなーれ。

 

あ、今からSurface pro 2をバラしたいって変態さんが居たら、取った写真もほぼ未使用バッテリもあるのでどうぞお気軽にコメントを。

自分みたいな犠牲者はもう作りたくないし、直したいって人がいたらぜひ自分の代わりに雪辱を晴らしてほしいのである。

 

----------------------------------------------

 

一応の原因としては、FFCかマザーが破損したか、Windowsを強制終了した際、何かアプデの最中だったのかなぁなどと考えている。

アプデの最中ならBIOSが立ち上がってもよさそうではあるが、液晶が故障しているかもしれない現段階では、トラブルシューティングの手段が少なすぎる。

LCD単品で5K払って云々するのも楽しいかもしれないが、修理自体が目的でないので、さすがにそこまでする気にはなれなかった。

 

CUDAサンプルコードのコンパイル/エラーが出た

CUDAをインストールしたので、さっそくsampleコードをコンパイルしてみる。

対象はGPGPU界隈ではおなじみ(らしい)の、nbodyである。

が、MSB6003なるエラーコードが出てコンパイルが通らない。

プロジェクト単位じゃなくて、ソース単位でコンパイルしても通らない。

CUDAを使う - インストール(Windows編):tech.ckme.co.jp を参考に、パスを張りなおしても通らない。

MSB6003のエラー原因も良くわからない。

 

Visual Studio community 2015をインストールした後、CUDA toolkit 8.0をインストールしたところ、上記エラーが発生。何が原因かわからないので、とりあえずVS自体にエラーが無いか、空のプロジェクトを作成してhello,worldでも書いて確認しようとしたところ、visual studioの空のプロジェクトが作れないことが判明した。

 

具体的には、

f:id:nolf3979:20170522225948p:plain

こんな感じの画面で右下okを押し、作成しようとしても、一瞬ウィンドウが消えたあと、同じ画面に戻っているという症状だった。

他、いくつか試してみるも、インストール済とされているプロジェクトが全体的に作成できない事が判明。

その過程で、

C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\ProjectTemplates

内のフォルダが異様に少ないのに気づく。 テンプレートがぶっ壊れてるのだろう。

方法 : 既定のプロジェクト テンプレートを復元する

を参考に修復を実行したり、visual studioインストーラから修復をかけたりしてもどうにもならない。

 

ので、結局再インストールをするに至る。

vsを再インストールからのCUDA toolkit 8.0のインストールで、結構時間がかかるのが嫌らしい。

が、再インストール後は問題なくhello,worldを空のプロジェクトから作成できたし、nbodyもコンパイル出来た。

おそらくはVS側のインストールがうまくいっていなかったのだろう。

これで一件落着である。

f:id:nolf3979:20170522222613p:plain

結構動きは遅い。リアルタイムでやっているのだし仕方ないが。

 

・・・ただ一つ解せないのは、再インストールに至るまでの過程で環境変数は結局元に戻しているので、両方インストールしただけで全部済んでいる点である。

インストールの過程でよくわからんプロセスを経てリンクが張られているのか、環境変数に加えた変更を俺が見逃しているのか、訳が分からないが、まぁ、いいや。

 

・・・どなたか詳しい方居たら教えてください。

中の人は研究室にあったレガシィコードで動くFortranをチマチマ弄った経験しかないのです。

 

P.S.

Surface用バッテリが本日到着。

梱包が微妙で、中身もなんか擦れた感があり、新品なのか微妙な感じである。

バッテリを繋いで充放電の履歴を見てみて、仮に新品でないならopencase待ったなしである。

CUDA環境構築 / VS2017ではなくVS2015を使え

Surface用バッテリはまだ来ない。

セラーに直に「おせぇぞゴルァ」と言ったところ、「佐川で頼んだけどトラッキングナンバーこねぇから通知してなかった。メンゴメンゴ。いつもならあと5~6日でつくから待ってね」との事。

まぁヤフオクみたいなもんだし仕方ないか・・・・。

ちなみに先ほど送られてきたトラッキングナンバーは、調べてみたら「該当なし」との表示。トップセラーだから送らないなんてことはないと思うが、最悪の場合ケースオープンで返金待ったなしである。

 

ところで、就職すると常に時間に追われるもので、自分で何か勉強をしないと、タスクを消化するだけで人生が終わっていくと気づく。

自分で自分を作っていく意識が無いと人生つまんなくなるな、と思うので、興味はあったけど金と時間と自分の怠慢が許さなかった、CUDAでも始めてみようかと思う。

ラボにいたころは一応CFDおじさんをやっていたので、それなりの勘所はあるつもりだし、なんなら将来のメシの種にもなるかもしれないではないか。

 

そんな甘い期待を抱きながら、とりあえずVisual studio community 2017をインストール。そのあとに、CUDA toolkitもインストール。

www.visualstudio.com

 

developer.nvidia.com

VSの後にCUDA tool kitをインスコすると、IDEに更にCUDA用ライブラリやらヘッダやらを統合してくれるらしい。

 

そんなわけでインストールして、サンプルファイルを開いてみる。

 

が、どうも表示がおかしく、「見つかりません」とか「読み込みに失敗しました」とかばっかり出てくる。

こりゃなんじゃらほい、とあれこれ調べてみたら、どうやらCUDAのバージョンはVSのバージョンと密接に結びついており、現行のCUDA 8.0はVS2017には対応していないらしい。 

https://devtalk.nvidia.com/default/topic/978691/support-for-visual-studio-2017/

うまくやってwin10の2017でサンプルだけ走らす方法も書かれているが、ほしいのは開発環境であってサンプルを動かすことだけではないので、メンドクセェと思いつつもVS2015をインスコしてから、CUDA tool kit 8.0を再度インスコすることとする。

すでに2015はMSのトップからは取得できないようなので、アカウントをチョイチョイとやって、Visual Studio Dev Essentialsにサインインしてからダウンロード。

 

やっとこさサンプルプログラムがまともに読み込めた。

疲れた。

 

 

バッテリ購入

Aliexpress使うだのなんだの言ったけど、面倒そうなので結局ebayで買った。

どうせ中国製なのにそうする意味あるんかい、と思わなくはないが、こっちのがなんとなくカスタマーフレンドリーな気がする、というだけの理由。

 

OEM Battery P21GU9 5500mAh For Microsoft Surface Pro 1 1514 / Surface Pro 2 1601 | eBay

 

英語が問題なく使えるところで、評価高いセラーから買うのって安心だよね!

 

Li-ionバッテリだから、船便なので5/18以降着とのこと。

 

ディスプレイが破損した場合どうするかは、そもそもバッテリ繋いで動いてくれないとどうしようもないので、バッテリがちゃんと動くようになってから考えよう。

 

それまでに工具類をそろえなきゃ(使命感)

バッテリがヤバいと確信したわけ

まぁ持ち時間が短いのはともかく、バッテリの値がおかしいだけなら、ドライバ入れなおすなり出荷時の状態に戻すなりで、どうとでもなるはずだ。

が、ドライバを入れなおそうとインストールしなおそうと出荷時の状態に戻そうと症状が改善しなかったのと、Battery reportの表示内容がコレだったのがアカンと思った理由として強い。尚、出荷状態に戻した後である。

 

f:id:nolf3979:20170508214053p:plain

f:id:nolf3979:20170508214054p:plain

 

出荷時状態からすでに設計容量42000mWhのところで86000mWhとか表示されてたのです。たぶんドライバどうこうというよりは、バッテリ側が変な信号返してるんじゃないかと思った次第。

出荷時状態に戻すまでの過去のレポートも、スクショは取ってないが2014年の段階からこの値だったので、使ってた人は初期不良食らったんだろうなぁ、と思っている。バッテリの充放電回数は案外少ない125回。意外なほどすぐ捨てたのではないだろうか。一年過ぎてから気づいて、交換NGと言われてポイみたいな。

まぁ、どんな保存をされてたかは知らないが、今はもう昔の話。バッテリも30分と経たずに落ちるし、警告も出ないのでは交換するより仕方ない。

surfaceパーツ購入用メモ

・ディスプレイ

surfaceはディスプレイをひっぺがすので、ディスプレイが歪んでもおかしくない。

予備ディスプレイも検討すべき。

 

www.amazon.com

 

Aliexpressにもいくつかあるが、どうもカメラの数がデフォルトと違うものが多々ある(正面になぜか丸が三つあったり、照度センサとカメラの左右が違ってたり・・・)ので、評価のついてる米尼が安定かなって。

 

・交換用バッテリ

こっちは逆で、おそらくAliexpressのがマシに見える。

www.aliexpress.com

 

 

www.amazon.com

 

というのも、尼だとメーカー名不明だが、aliexpressだと一応サムスン製(らしい)ので。今後3年くらいは使いたいのである。

この前GALAXYで爆発事故を起こしまくっていたのは記憶に新しいが、それでも業務用で同じことは繰り返さないだろう、という希望的観測に基づいている。

 

・粘着テープ

引っぺがしたモニタとバッテリを再びくっつけるため。

iFixitでは「ひどく汚れてなきゃ残ってる粘着剤で行ける」「必要なら3Mの業務用の使っとけ」とあったが、どのくらい厚ければ(薄ければ)いいのか見当がつかない。

そんなとこでYoutubeで修理動画を漁っていると、こんな映像があった。

 

youtu.be

 

要はモニタを外してくっつけるタイプの修理だが、張られているテープに300LSEという文字が見える。

www.amazon.co.jp

http://www.mmm.co.jp/tape-adh/bonding/thin/nonbasis/low_surface/

 

これでテープも決まった。どうやら厚みは薄いほうが良いらしい。

 

後はヒートガンとトルクス、汚れ落とし用の溶剤とピックあたり。

シュリンクや熱加工はドライヤーかバーナーでこれまで済ましていたが、今回はドライヤー程度だと厳しいかもしれないので念為。ディスプレイ越しにあぶった場合、ドライヤ程度でしっかり温まるか疑問である。