のびっこ日記

(*|         |*)v ういっすー。 VRとかコンピュータービジョンとかARとかに興味があります。OpenCVとかPCLとかOculusRiftとかUnityとかKinectとかLeapMotionとか手を出していますが、いろいろドツボにハマっててくじけそう。誰か教えてー

同一のDLLを使用しているアプリ同士で、データの共有をする方法(・      ・)

最近あんまりブログ更新してませんでしたが、そろそろ復活したいと思います。

しかし、何書こうかな~。リクエスト有ったらお願いしますね。

 

 

今日はWin32の方のWindowsのDLLの話です。

WindowsのDLL、よく使う同じルーチンとかをまとめて入れておくといろんなEXEから呼べて便利なのですが、通常、複数のEXEから呼び出された時にはデータの共有がされません。呼び出し元のEXE毎に、別の変数用のデータのエリアが作成されます。

 

EXE(1) --> DLL

 

EXE(2) --> DLL

 

こんなかんじ。

 

でも、たまにEXE(1)でもEXE(2)でも同じ変数を参照したい時ってあるじゃないですか。

そんな時どうしたら良いのかというお話です。

 

実はこんな風にすると共有できたりします。

 

#pragma comment( linker, "/SECTION:.shared,RWS" )
#pragma data_seg( ".shared" )
extern int a = 0;
#pragma data_seg()

 

こうすると、データセグメントという共通のメモリエリアに変数を置いてくれます。

上の例でいうと、int aに関してだけは、

 

EXE(1)--> DLL <-- EXE(2)

 

こんな感じにアクセスができます。

ただ、アクセスは排他処理とかされないので、問題になるケースではクリティカルセクションとかミューテックスで囲んであげて下さいね。

 

今日はこのへんで。。(・        ・v

 

TensorflowをMac book Pro 2014(NVIDIAモデル)にGPU有りでインストールする方法(・     ・)

なんか流行ってるらしいTensorflowを始めたいので、Mac book Pro 2014 (NVIDIAモデル)のOSXにTensorflowをGPU有りでインストールしてました。

今回はとりあえず自分用インストール手順メモな感じです(・    ・)

特に最後のシンボリックリンク張るとこはかなり苦労しました。。libcupti.dylibのリンク張らないと一部のサンプル動かなかったです。。

 

brew.shからHomebrewをインストール

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

これでbrewコマンドがインストールされる。

 

Coreutilsのインストール

$ brew install coreutils

でインストール

 

XCodeのインストール

Appstoreからxcodeをインストール。

xcodeを一度起動してライセンスに同意しておく。

 

CUDAインストール

$ brew tap caskroom/cask

$ brew cask install cuda

以下を~/.bash_profileに記述

export CUDA_HOME=/usr/local/cuda
export DYLD_LIBRARY_PATH="$DYLD_LIBRARY_PATH:$CUDA_HOME/lib"
export PATH="$CUDA_HOME/bin:$PATH"

 

CUDA Deep Neural Network (cuDNN v5.1) libraryのインストール

Developer.nvidia.comで

Accelerated Computing Developer Program accountを作って、以下をダウンロード 

cuDNN v5.1 for CUDA 8.0
cuDNN v5.1 Library for OSX

tar xvf cudnn-8.0-osx-x64-v5.1.tar
cd cuda

$ sudo mv include/cudnn.h /Developer/NVIDIA/CUDA-8.0/include/

$ sudo mv lib/libcudnn* /Developer/NVIDIA/CUDA-8.0/lib
$ sudo ln -s /Developer/NVIDIA/CUDA-8.0/lib/libcudnn* /usr/local/cuda/lib/

 

pipのインストール

Sudo easy_install pip
Sudo easy_install --upgrade six

Sudo pip install tensorflow
Sudo pip install tensorflow-gpu

 

足りてないシンボリックリンクを作る

$ sudo ln -s /usr/local/cuda/lib/libcuda.dylib /usr/local/cuda/lib/libcuda.1.dylib

$ sudo ln -s /usr/local/cuda/lib/libcudnn.5.dylib /usr/local/cuda/lib/libcudnn.5

$ cd /usr/local/lib

$ sudo ln -s libcuda.dylib libcuda.1.dylib

$ sudo ln -s ../cuda/lib/libcudart.8.0.dylib .

$ sudo ln -s /usr/local/cuda/lib/* /usr/local/lib

$ sudo ln -s /Developer/NVIDIA/CUDA-8.0/extras/CUPTI/lib/libcupti.dylib /usr/local/lib/.

 

mnistサンプルを実行してみる

Git clone https://github.com/tensorflow/tensorflow.git

Cp -r tensorflow/tensorflow/examples .
Cd examples/tutorials/mnist/
Python mnist_with_summaries.py

 

こんな感じ。

なんかインストールで力尽きたよ。。(ー      ー)

 

 

Cドライブが一杯だけどDドライブがすかすか。そんな時は(・     ・)

今日は簡単なネタで(・    ・)

 

Windowsって、My Documentsとか一杯でもうCドライブがパンパン、とかそんな事有りますよね。んでもってドライブ増設してDドライブは空いてるんだけど・・とかとか。

 

こんな時にお勧めの設定が有ります。

以下のコマンドでCドライブのフォルダをDドライブの中に作ることができます。

 

まず管理者権限でコマンドラインプロンプトを起動して

(Windows10だと画面の左下で右クリック>コマンドプロンプト(管理者))

 

mklink /j Cドライブに作りたいフォルダ名 D:\Dドライブのフォルダ名

 

こんな感じにします。

例えばCドライブのMy Kindle Contentがデカくて困ったりしたときは、

まずフォルダごとDドライブに移動した後で、元々My Kindle Contentが存在したフォルダに移動した上で

C:\Users\nobikko\Documents>mklink /j "My Kindle Content" "E:\My Kindle Content"

こんな風にすると、Dドライブに移動できます。

 

良かったら試してみてね(*・       ・*)v

 

それではまたー