SSブログ
前の20件 | -

UbuntuでDell UP2414Qを利用する注意点 [Linux]

数年前にDell UP2414Qを入手して、4Kの広い画面を楽しんでいるのだが、Linuxにおいて知って置かなければならない知識があるので、メモしておく。

1) そもそもPC側の出力が4Kに対応しているかどうか確認する。
2) DisplayPortは4K UHDに対応していない。
3) HDMI 1.4までは4K UHD@30Hzまで。
4) HDMI 2.0は4K UHD@60Hzに対応している。
5) Dell UP2414QはHDMI2.0に対応していない。
6) Dell UP2414Qは4K UHDを実現するために、2個のモニターを一つとして表示する。
  つまり、デュアルディスプレイとして取り扱われる。
  ->これはMST(Multi-Stream Transport)と呼ばれ、DP1.2で自動的に有効となる。
7) 6)のために、4K UHD@60Hzで表示できるものの、Linuxではメニューバーが2つでる、
  「TwinView」となってしまう。※WIndowsでは問題なく表示できる。


これらを踏まえ、対応する方法を検討すると、
(1) 問題を単純化するため、他のモニターを無効にする。
(2) nvidia-settingsを管理者権限で開き、xorg.confを/etc/X11/xorg.conf
   ※何か問題が出たら、xorg.confを削除する
(3) xorg.confに下記の編集をして、「TwinView」を有効にする。
   (表示の関係で全角が入っているので、コピペは注意)
 ・ "ServerLayout" に以下を追加:
    Option "Xinerama" "1"
  ・ "Screen"に以下を追加:
    Option "TwinView"
    #この設定は仮想解像度を有効にしている。
    Option "TwinViewXineramaInfoOverride" "3840x2160+0+0"
    #この設定での解像度は、実際に設定できる画面の半分の解像度を指定する。
    #ただし、DFP-x.yの部分は、nvidia-settingsより実際の番号を確認する。
    Option "metamodes" "DFP-4.9: 1920x2160, DFP-4.8: 1920x2160"
    Option "TwinViewOrientation" "LeftOf"

この設定を行い、再起動すればSSTで表示できると思う。
Ubuntu 16.04ではOKだった。
MST
MST.jpg

SST
SST.jpg

nice!(1)  コメント(3)  トラックバック(0) 
共通テーマ:日記・雑感

Xeon phiを使う際の注意について [PC]

アメリカでは個人でXeon phiを購入して使っているギークな人たちがいる。
しかし、日本でXeon phiを個人で使う人は非常に稀だと思う。
なぜなら、単体での購入ができないから。できたとしても1枚20万以上するので、ちょっと趣味で購入するという人がいるとは思えない。まだNVIDIAのTeslaを使うだろう。

しかし、昨年末ぐらいにインテルがアメリカでXeon phiのキャンペーンを行っており、S31P1という特殊なモデルだが、200ドル以下で販売している。しかしながらいろいろ取り扱い店に問い合わせてみても、結局購入できなかったが、最近Amazon.comで230ドル程度で購入できるようになった。
今回それを購入してみた。

Xeon phiを利用するにあたり、注意しなければならないことがある。Xeon phiはPCIEに接続する拡張ボードで、消費電力が多いもので300Wは必要となる。ただし、それ自体は昨今のハイエンドGPUでは当たり前なので問題はない。一番の問題はマザーボードがXeon phiに対応しているかどうかが重要。これはAbove 4G decodingと呼ばれるもので、Xeon phiやTeslaなどが利用するオプションとなっている。
これが有効にできないマザーボードでは残念ながらXeon phiを使うことができない。とはいえ、最近普通のサーバー系のマザーであれば問題ないが、コンシュマー向けだと、非常に限られており、調べた限りでは、

・Asus P9X79 WS
・Asus P9X79-E WS
・Asus P8Z77 WS

ぐらいしかなかった。いずれも古いマザーなので、入手は難しくなっており、自分はなんとかP8Z77 WSを手に入れXeon phiを動かすことに成功した。

まあ、ここまではなんとかなるとして、次の問題はS31P1はエアフローがパッシブ(つまりファンがついていない)なので、冷却が非常に問題となる。これに関してはなんとか写真のようにPCIスロット用のFOX-2というファンがアタッチしたので、利用している。ただこれだけだとすごく負荷をかけるとXeon phiの温度が100度を超えてしまうので、排気用のファンを追加することでなんとか100度以下にすることができた。
冷却システム今後改善していかないといけない。

IMG_20150208_232509s.jpg



nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

非商用インテルコンパイラが使えなくなる?

最近インテルが最新のインテルコンパラ Version 15をリリースしたので、ダウンロードしようとしたら、
サイト自体がUnder constructionとなっており、教育関連者はIntel Education Offeringsにいけと書いてある。
今後使えるようになることを期待したい。しかし最近、インテルはコンパラ関連はライセンス構成を変更してきているので、微妙かも。。。

https://software.intel.com/en-us/non-commercial-software-development

個人で買うのは高価なのだけど、icc15からはC++11にフル対応だからぜひ使っていきたい。
とりあえずは静観しておこう。

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

OpenMPIでMultiThreadingな1対1通信を有効にする。

接続トラブルがあり、久しく更新していなかったので、久しぶりの更新。

OpenMPIでMultiThreadingな1対1通信を有効にする。

MPIでマルチスレット対応させるにはMPI_Init_thread()で初期化させなくてはならない。
OpenMPIではビルド時に--enable-mpi-thread-multipleを有効にする必要がある。

これがないと、例えばSend/Recvをマルチスレッドで実行することができない。

OpenMPIでマルチスレッドが有効化どうかを調べるのにはOpenMPIがインストール
されているディレクトリにおいて、 下記のコマンドを実行してthreadが「yes」になっているかを確認するか、

$ ./ompi_info | grep -i thread

コードのの中で、MPI_Init_thread()関数の返り値がMPI_THREAD_MULTIPLEになっているか
確認する。ちなみに、MPI_Init_thread()関数とMPI_Init()関数はいずれか一度しか呼んではいけない。
なお、MPI-3からはC++のバインディングは非推奨となったので、今後は使わないほうが良い。
まあ、実装自体がかなり古いのと、MPIの規格を決める人たちにC++に精通している人があまりいない
のでもはやメンテナンスができないのだろう。boost.MPIの実装もCベースだし。

GCCの場合
./configure --prefix=/opt/openmpi/openmpi-1.6.5.gcc --enable-mpi-thread-multiple --disable-mpi-f77 --disable-mpi-f90 --enable-static CXXFLAGS=-std=c++0x

ICCの場合
./configure --prefix=/opt/openmpi/openmpi-1.6.5.gcc --enable-mpi-thread-multiple --enable-static CPP='icc -E' CC=icc CXX=icpc --disable-mpi-f77 --disable-mpi-f90 CXXFLAGS=-std=c++0x
nice!(0)  コメント(136)  トラックバック(0) 
共通テーマ:日記・雑感

OpenMPでのlockの初期化の続き [C/C++関連]

更新がかなり滞ってしまったが、前回「OpenMPでのlockの初期化」の記事でデストラクタをどうするかとかを書いていたが、単純にSingletonパターンで解決していたので、ちょっと追加する。

Singleton *Singleton::Instance()
{
static Singleton obj;
static omp_lock_t omplock;
m_pmutex = &omplock;
omp_init_lock( m_pmutex );
return &obj;
}

これでOKのはず。
とりあえずこのクラスで作成するmutexは唯一性が保証される。
ただし、プログラム終了時までomp_lock_tは残ってしまい、消すのはOS任せとなる。
nice!(0)  コメント(3)  トラックバック(0) 
共通テーマ:日記・雑感

テクスチャメモリについて [CUDA]

CUDAのコードを書いていると、最適化を行う際はまずスレッド/ブロックをどうするか、Shared Memoryをどうするかとかを考えるが、今回テクスチャメモリを使ってみた。
これまで、テクスチャユニットを使うようなことは無いと思っていたが、テクスチャメモリをバインドすることによって、普通に配列にアクセスするのと同様にできるようなので、ちょっと試してみた。
まずテクスチャメモリを使う方法としては最低限下記のが必要。

<宣言>
texture< float, 1, cudaReadModeElementType > texfA;

<テクスチャメモリをグローバルメモリとバインド>
何かグローバルメモリに確保されたメモリのポインタをpgA、
確保したサイズをAllocOnGlobalByteSizeなどとする。
cudaChannelFormatDesc channelDesc = cudaCreateChannelDesc();

cudaBindTexture(NULL, texfA, pgA, channelDesc, AllocOnGlobalByteSize));

が最低限必要。実際に使う場合はtex1Dfetch()関数を使って、1D配列と同様に、
a = tex1Dfetch(texfA,Index);

のように使う。ただし、いくつか制限があり、グローバルメモリのアライメントが512バイト(Fermiの場合)でないと動作しないので、アライメントは考慮しなくてはならないのが面倒。また、ホストへの転送をまとめてやりたいがために、複数の確保すべきメモリを1次元配列にまとめて確保し、それぞれをオフセットしたポインタで表している場合は、アライメントを考慮しづらい場合がある。そのような場合は確保した領域のベースポインタに対し、テクスチャをバインドし、アクセス時に下記のようなoffsetを追加してあげる事によって使えるようになる。
a = tex1Dfetch(texfA, offset + Index);

しかしながらテクスチャメモリは、何も考えないでコードを書いてパフォーマンスが出ない場合などに用いると効果が出やすいが、ある程度考えられたコード(shared memoryなど)では逆に遅くなってしまう場合がある。




nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

USB出力機能付きポータブル電源 [その他]

スマホやタブレット用にソニーのUSB出力電源を購入した。




災害時を見越して、手回しの自家発電ができるものを購入。
災害が来るより電池の寿命が先に来ると思うが、無いよりはまし?
ただし、回すのは結構重い。120rpmで回せばスマホなら1分話せるレベルだそうだが、
災害時は繋がらないことが多いので、10分は最低ないとダメだろうから、
あの重さで10分はかなり辛そう。まあ、災害時は緊急なのでその程度は気にならないとは思うが、
ある程度鍛えていないと筋肉痛になりそうだ。

nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

OpenMPでのlockの初期化 [C/C++関連]

OpenMPをC++で使っているとクラスの仮想継承などで内部のメンバのomp_lock_t変数が初期化されているか確認することが必要になる。そうしないと複数回初期化されたりして嬉しくないことが起こる。
OpenMPでlockの初期化かされているかどうかを確認するAPIは用意されていない。
ただし、OpenMPのlockは所詮Mutexなので、omp_lock_tの中身を確認すれば、その判断をすることができるが、例えばIntelとGNUでomp_lock_tの中身は違う。
Intelはポインタ、GNUは4バイトのchar配列として取り扱われている。
個別のAPI毎に対応すれば初期化されているかどうかを確認することは出来なくもないが、
それはかなり面倒だし、確実ではない。

じゃあどうするかというと、こんな感じでやればとりあえずはできる。
ただし、このクラスは必ず並列化領域の前で最初にインスタンス化する必要がある。
staticメンバにすることによって仮想メモリ内で唯一となるので、
複数のスレッドから同一アドレスとなるので使う分には問題がなくなるはず。
ただし、デストラクタの時に開放はしないようにする。

Class A {
public:
    A();
private:
    static omp_lock_t  *m_pmutex;
}

omp_lock_t*         A::m_pmutex == NULL;

A::A(void)
{
	if(m_pmutexForCout == NULL)
	{
		m_pmutex = new omp_lock_t;
		omp_init_lock(m_pmutex);
	}
}


このままだとメモリリークを起こすので、使わなくなった所で明示的にdeleteするぐらいしかなさそう。スマートじゃないのでもっといいやり方を考えてみる。
nice!(0)  コメント(0)  トラックバック(1) 
共通テーマ:日記・雑感

Ubuntu 12.04 LTSでEclipseのエディタが開けなくなる問題 [Linux]

Ubuntuの自動アップデートで「部分的なアップグレード」を行うと出てきて、何も考えずにそのまま実行したところ、EclipseのCDTでエディタが開けなくなった。試行錯誤の結果、次の方法で回復。

$ sudo apt-get purge *java *jre

でjava関連のファイルをすべて削除する。
※絶対に何も考えずに実行してはいけない。必ずJava関連だけを削除。

どうやらリポジトリのjreがダメなようで、再インストールしても何も状況は変わらない。
そこでオラクルのJAVAをインストールしてみる。

$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java7-installer

これでEclipseの問題は解決
nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

HPプリンタ [Linux]

自分はEPSON、CANON、HPとプリンタを使ってきたのだが、
この中でLinuxにいちばんやさしいのはHPだったので、
今はHPを使っている。(インクの高さから最近はブラザーを使ってみようかと考えているが。)

今さらながら、Ubuntu 12.04でのプリンタ設定。
といってもほとんどやることはなくて、「Ubuntu Softwareセンター」で”hplip”で出てきたものをインストールすればOK。
プリンタもスキャナもUbuntuから難なく実行される。
ある意味WindowsやMacよりも簡単になってしまった。

ただし、さすがにデジカメの写真印刷を行うにはまだアプリ側の問題でまだ厳しい。
(出来なくはないけど、アプリの関係でどうしてもMacでやってしまう。)


HP Photosmart 6510 スマートフォン対応 ePrint 無線対応 4色独立 A4インクジェット複合機 CQ764C#ABJ

HP Photosmart 6510 スマートフォン対応 ePrint 無線対応 4色独立 A4インクジェット複合機 CQ764C#ABJ

  • 出版社/メーカー: ヒューレット・パッカード
  • メディア: Personal Computers




HP 【HP Officejet Pro 8600】 ePrint 無線 A4 複合機 CM749A#ABJ

HP 【HP Officejet Pro 8600】 ePrint 無線 A4 複合機 CM749A#ABJ

  • 出版社/メーカー: ヒューレット・パッカード
  • メディア: Personal Computers



nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

Samsung SSD 830 256GB [PC]

先日、秋葉原のツクモに行ったらSamsung SSD 830がかなり安かったので購入してみた。
と言っても1ヶ月ぐらい前の話なので、今だったら安くても買わないかもしれない。

ちょうどUbuntu 12.04を本格的に使おうと考えていたので、それのBoot用ディスクとした。
インストールはUEFIで行ったら、難なくインストールできた。(自分の環境では最初にGTX580を別のVGAに変える必要があったが)

使い勝手としては、Crucial m4よりも速いみたいだ。
まあ悪くないと思う。





nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

G.Skill TridentX DDR3 2400MHz CL10 (10-12-12-31) 32GB(8GBx4) [PC]

G.Skill TridentX DDR3 2400MHz CL10 (10-12-12-31) 32GB(8GBx4)を海外のサイトから購入した。
購入金額は送料込みで$440(36000円程度)であった。
もともと米Amazonのマーケットプレイスに出展されていたんだが、調べてみるとショップ自身でサイトを持っていたようだった。ちょっと不安だったけどとりあえずポチッとしてみたら比較的スムーズに発注され、
トラッキングを見ると何故かアイルランドから来ていた。どうやらアイルランドのお店らしい。
概ね1週間ほどで届いたのでまずまず良いと思っていたところ、4枚中一枚が認識しないという問題があった。
早々RMAのリクエストをしてみると、問題なく受け付けてもらえ、交換することに。
EMSで1800円程度払い、再びアイルランドへ。その後交換が認められ、再び日本へ。
交換品はなんともなく、少なくとも3960XとASUS P9X79Deluxeの組み合わせでデフォルトのXMP設定で問題なく動作している。

同じものを日本で買うと5万円弱なので、多少のリスクと手間が気にならなければ海外通販を利用するのもありだと思う。リスクを下げたければ米Amazonが安心といったところか。


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

Ubuntu 12.04のインストールの注意点 [Linux]

Ubuntu 12.04をASUS P9X79DELUXEとGTX580の組み合わせではイントールの段階で画面がでなく、反応せず、インストールできない。その場合は他のNVIDIAのVGAを持ってきてインストール後、GTX580を挿せばOKのようだ。
nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

SSDの下落ぶりが凄まじい。 [PC]

SSDの下落ぶりが凄まじい。
去年インテルのSSD 510 120GBを2万円強で購入し、その後ADATAのS510 120GBを1万半ばで購入した記憶があるが、今年は256GBがとうとう1万7000円を切り、512GBが限定的ではあるが3万円を切ることがしばしば。流石にHDD程ではないが、512GBが2万を切るようになれば、おそらくたいていの用途ではHDDを購入することはなくなるだろう。

ちなみに、そろそろ落ち着くだろうとおもってAmazonでぽちってしまった。
(数時間前は在庫8個だったのが在庫1個だったため思わず・・・)

ただし、Amazonのシステムは在庫ありの表示はしばらく出ているようで、最後の1個を購入したあと再びそのアドレスに行くと、「在庫1個」の表示はそのままだが、Primeの表示は消えるようだ。
(今見たら在庫なしになっていた。少しのディレイがあるようだ。)


Crucial 2.5インチ 内蔵型 SATA3.0対応 M4 SSDシリーズ 256GB CT256M4SSD2

Crucial 2.5インチ 内蔵型 SATA3.0対応 M4 SSDシリーズ 256GB CT256M4SSD2

  • 出版社/メーカー: Crucial Technology
  • メディア: Personal Computers



nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

Boostのビルド(インテルコンパイラ) [C/C++関連]

Ubuntuはバージョンが上がっていくと、Boostライブラリのバージョンも上がってしまい、
これまで書いていたアプリがFilesystemV2であったため、ビルドが面倒になってきた。
やり方としては既存のアプリをV3に書き換えればいいだけだと思うのだが、なぜかうまくいかなかった。
Boostはコンパイラに依存する部分があるので、今回は1.45.0をUbuntu 12.04LTSでインテルコンパイラのビルドを行った。

やり方は下記のとおり。(環境は64bit)
bjam --toolset="intel" "-sINTEL_PATH=/opt/intel/bin"--prefix=/home/user/boost/icc address-model=64 --stagedir=stage64/icc --build-type=complete stage --with-filesystem --with-system install -j8 --layout=versioned threading=multi cxxflags="-std=c++0x -O3"

Boost FileSystemはsystemも必要。
ビルドの際はコンパイル時は上記のincludeパスを、リンク時は上記でビルドしたライブラリを直接指定する方がいい。
nice!(0)  コメント(1)  トラックバック(0) 
共通テーマ:日記・雑感

EclipseでCUDAを使う その2 [CUDA]

EclipseでCUDAのファイルを開くと、CUDA専用の関数などがハイライトされずかなり見づらい状況が続いていたが、ちょっと調べてみたら、下記のやり方でOKだった。

1)プロジェクト名を右クリックー>「プロパティ」ー>「C/C++一般」ー>「パス及びシンボル」ー>「インクルード」タブに/usr/local/cuda/includeを追加。

2)device_launch_parameters.h、device_functions.hをインクルード。

3)Eclipseのメニューの「ウィンドウ」ー>「設定」ー>「C/C++」ー>「エディター」ー>「構文の色」ー>「コード」ー>「マクロ参照」の使用可能にするをチェック。

これによってとりあえず赤の波線は出なくなる。__global__などの色はお好みの色で。
nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

EclipseでCUDAを使う [CUDA]

EclipseでCUDAを使う場合、通常includeファイルやlibの設定をしてあげればOKだけど、注意点としてはMakeファイルを自動にしないで自分で書くようにする。プロパティー>C/C++の設定で設定を行う。

あと、cuやcuhに関しては、C++ファイルとして登録しておく。その際は
*.cu
*.cuh
としておかないとC++のファイルとして認識されない。あとなぜCではなくC++かというと、
予約語の関係で、例えばexternとかはC++でないと認識されない。
nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

CUDAのプログラミングの覚書 [CUDA]

CUDAのコードを書いていて、たまに理解しがたいエラーがでることがあるが、
大抵はメモリ周りのエラーでホストからデバイスへの転送がうまく行ってないことが多い。
Fermiからデバイス側でprintfが使えるようになったのは非常に助かるようになった。
とはいえ、同じ間違いを何度も繰り返してしまうので、ちょっとメモしておく。

1)構造体のサイズに注意。
ホスト側とデバイス側で同じ構造体を扱っているのに、転送でエラーになることがある。
多くの場合で、ホストとデバイス側でサイズが異なっている。構造体の中身を変更したときなどに起こる。一旦プロジェクトをクリーンして再ビルドをすればうまく行くことが多い。

2)ホスト側にデバイスの情報を置き忘れ。
カーネルの引数にポインタを持ってくる場合に、デバイス側のメモリのポインタを保持していない、
またはホスト側のポインタを与えてエラーになることが多い。

3)CUDAのコードを実行すると数回に1回の割合でうまく動作してしまう場合はメモリ周りに問題がある。しっかしデバッグをしないとあとで痛い目にあう。

4)デバイス側のメモリを確保しても必ずしもデータは0クリアされていない。また、First Touchの問題か、エラーがでることがあるので、CudaMemsetで初期化を忘れない。

5)Tookitの出来によってパフォーマンスが変わる。例としては4.0=>4.2で一割ほど改善があった。

6)シェアードメモリをexternで使う場合はカーネル引数を忘れずに。

7)Threadはあまり意識しなくてもいいが、BlockとGridは意識する。

8)なるべく多くの処理をCUDAデバイス側でやらないとパフォーマンスが得にくい。

ちょっと思っただけでもこのくらいか。
nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

Turbo boost時の周波数 その2 [PC]

i7zのログに温度を追加するためにソースに下記の手を加た。

587行目に下記を追加

logCpuFreq_single(Read_Thermal_Status_CPU(core_list[ii]));

これで一応温度がファイルに出力される。

それを用いてPrimeの実行時のグラフ化

TB_Freq_On_Prime2.jpg

まあ、これで何がわかるというわけでもないが、ちょっと温度が高すぎるくらいかな。
nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

Turbo boost時の周波数 [PC]

WindowsにはTurboBoost時の周波数を取得するアプリはいくつかあるようで、ASUSなどのマザーボード付属のツールにもあるみたいだが、Linuxでは/proc/cpuidから周波数は取得できるものの、これはあくまでもCステートによる周波数しか得ることが出来ず、TB(TurboBoost)が効いた状態での周波数は取得できない。
TB周波数を取得するにはMSR(Model-Specific Register?)から情報を取得し、計算を行えば取得できるが、
結構面倒なので、少し調べてみると、i7zというツールがあるようだ。

使い方はリンクに書いてあるようにいくつかLinuxのアプリをビルド出来ればなんの問題もなく簡単。
スタンドアローンで使えるのはいい。ただし、MSRを取り扱っている以上、管理者で実行する必要がある。

実行するとこんな感じになる。
Screenshot_i7z.pngi7zの実行時

ログファイルも取ることが可能で、

[user@host ]$ sudo ./i7z -w a

とすれば実行フォルダにログが出力される。
このログ利用してをPrime実行時のTBの状態をグラフ化してみた。
一応、3960Xのオーバークロックはベースクロック100MHz、TBの倍率を46倍に設定しただけ。最大4.6GHzまでブーストされる。

TB_Freq_On_Prime.png


ほとんど負荷が均一なので、グラフは重なっている。
実際には、どうもみていると、温度が高いとTB倍率が下げられる傾向がある。インテルの簡易水冷の冷却機能限界なのかも。OCをもっと上げたいのなら、やっぱりいいクーラーが必要だ。(ちなみにPrimeを実行していると爆音になる。)本当は温度との比較を行いたいところだったが、i7zは温度情報をログファイルに出力してくれないので、時間があれば、温度も出力できるように修正してみたい。



nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感
前の20件 | -

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。