スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

引越し中

FC2やばい?
以下のページに引越し中です。
http://kane.daa.jp/old_blog/
スポンサーサイト

PythonとNumPyを、Intelコンパイラでビルド出来たっぽい

PythonとNumPyを、Intelコンパイラ(13.1.1)でビルドしてみました。CentOS 6.2使用。

● Python-2.7.5

端末で以下を実行してビルドする。

cd $HOME/Downloads
wget http://www.python.org/ftp/python/2.7.5/Python-2.7.5.tar.bz2
cd $HOME/src
tar xf $HOME/Downloads/Python-2.7.5.tar.bz2
cd Python-2.7.5
mkdir build
cd build
CC=icc CXX=icpc ../configure --prefix=/opt/Python-2.7.5 --enable-shared --without-gcc
make

コンパイルエラーが出た。

/home/usrname/src/Python-2.7.5/Modules/_ctypes/libffi/src/x86/ffi64.c(56): エラー: 識別子 "__m128" は定義されていません。
UINT128 i128;
^

コンパイルは /home/usrname/src/Python-2.7.5/Modules/_ctypes/libffi/src/x86/ffi64.c で異常終了しました (コード 2)。

以下のファイルをエディタで開く。

$HOME/src/Python-2.7.5/Modules/_ctypes/libffi/src/x86/ffi64.c

エディタで「__INTEL_COMPILER」を検索して、include文を追加。

#if defined(__INTEL_COMPILER)
#define UINT128 __m128
#else

↓↓↓↓↓↓↓ 変更 ↓↓↓↓↓↓↓

#if defined(__INTEL_COMPILER)
#include <xmmintrin.h>
#define UINT128 __m128
#else

保存する。

再びmakeし、成功したらmake install

make
sudo make install
ls /opt

$HOME/.bashrcに以下を追加。

export PATH=/opt/Python-2.7.5/bin${PATH:+:$PATH}
export LD_LIBRARY_PATH=/opt/Python-2.7.5/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}

端末を再起動するなりしてPATHを通してから、動作確認。

cd
python2.7

IntelコンパイラでビルドされたPythonが立ち上がれば、たぶんOK。

Python 2.7.5 (default, May ** 2013, **:**:**)
[GCC Intel(R) C++ gcc 4.4 mode] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

Pythonを終了させる。

● NumPy-1.7.0

端末で以下を実行してビルドする。

cd $HOME/Downloads
wget http://sourceforge.net/projects/numpy/files/NumPy/1.7.0/numpy-1.7.0.tar.gz
cd $HOME/src
tar xf $HOME/Downloads/numpy-1.7.0.tar.gz
cd numpy-1.7.0
CC=icc CXX=icpc python2.7 setup.py build

ビルドに成功したらインストール。

sudo -s

# 以下の3行はroot用に環境変数の設定
source /opt/intel/bin/compilervars.sh intel64 # Intelコンパイラを使えるように
export PATH=/opt/Python-2.7.5/bin${PATH:+:$PATH}
export LD_LIBRARY_PATH=/opt/Python-2.7.5/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}

CC=icc CXX=icpc python2.7 setup.py install
ls /opt/Python-2.7.5/lib/python2.7/site-packages

numpyがインストールされたことを確認し、rootから抜ける。

Pythonを起動して、NumPyを使ってみる。

cd
python2.7
import numpy
numpy.version.version

以下のようにNumPyのバージョンが表示された。

Python 2.7.5 (default, May ** 2013, **:**:**)
[GCC Intel(R) C++ gcc 4.4 mode] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>> numpy.version.version
'1.7.0'
>>>

Pythonを終了させる。

Fortran2003初心者日記1

Fortran 2003ではオブジェクト指向の機能が使えるそうです。classを使ってプログラムを書いてみました。まだ継承は使ってません。

MODULE class_Foo
IMPLICIT NONE
PRIVATE
PUBLIC :: Foo

!! Type
TYPE :: Foo
PRIVATE
INTEGER :: iii = 0

CONTAINS
PROCEDURE, PUBLIC :: bar => Foo__bar
FINAL :: Foo__destructor
END TYPE Foo

!! Type overloading
INTERFACE Foo
MODULE PROCEDURE Foo__constructorA
MODULE PROCEDURE Foo__constructorB
MODULE PROCEDURE Foo__createA
MODULE PROCEDURE Foo__createB
END INTERFACE Foo

CONTAINS

!! Constructors
SUBROUTINE Foo__constructorA(this, iii)
TYPE(Foo), INTENT(INOUT) :: this
INTEGER, INTENT(IN) :: iii

PRINT *, " Foo__constructorA begin"
this%iii = iii
PRINT *, " Foo__constructorA end"
END SUBROUTINE Foo__constructorA

SUBROUTINE Foo__constructorB(this, i1, i2)
TYPE(Foo), INTENT(INOUT) :: this
INTEGER, INTENT(IN) :: i1
INTEGER, INTENT(IN) :: i2

PRINT *, " Foo__constructorB begin"
this%iii = i1 + i2
PRINT *, " Foo__constructorB end"
END SUBROUTINE Foo__constructorB

TYPE(Foo) FUNCTION Foo__createA(iii) RESULT(this)
INTEGER, INTENT(IN) :: iii

PRINT *, " Foo__createA begin"
CALL Foo__constructorA(this, iii)
PRINT *, " Foo__createA end"
END FUNCTION Foo__createA

TYPE(Foo) FUNCTION Foo__createB(i1, i2) RESULT(this)
INTEGER, INTENT(IN) :: i1
INTEGER, INTENT(IN) :: i2

PRINT *, " Foo__createB begin"
CALL Foo__constructorB(this, i1, i2)
PRINT *, " Foo__createB end"
END FUNCTION Foo__createB

!! Destructor
SUBROUTINE Foo__destructor(this)
TYPE(Foo), INTENT(INOUT) :: this

this%iii = this%iii + 1
PRINT *, " Foo__destructor ", this%iii
END SUBROUTINE Foo__destructor

!! Method
SUBROUTINE Foo__bar(this, iii)
CLASS(Foo), INTENT(INOUT) :: this
INTEGER, INTENT(IN) :: iii

PRINT *, "Foo__bar"
this%iii = iii
END SUBROUTINE Foo__bar

END MODULE class_Foo

SUBROUTINE hoge
USE class_Foo
IMPLICIT none

TYPE(Foo) :: f1
TYPE(Foo) :: f2
TYPE(Foo) :: f3
TYPE(Foo) :: f4

PRINT *, "*** hoge begin"
PRINT *, "f1 = Foo(10)"
f1 = Foo(10)
PRINT *, "f2 = Foo(20, 30)"
f2 = Foo(20, 30)
PRINT *, "CALL Foo(f3, 6000)"
CALL Foo(f3, 6000)
PRINT *, "CALL Foo(f4, 7000, 8000)"
CALL Foo(f4, 7000, 8000)
PRINT *, "f*%bar(5*0)"
CALL f1%bar(510)
CALL f2%bar(520)
CALL f3%bar(530)
CALL f4%bar(540)
PRINT *, "*** hoge end"
END SUBROUTINE hoge

PROGRAM main
USE class_Foo
IMPLICIT none

TYPE(Foo) :: f1
TYPE(Foo) :: f2
TYPE(Foo) :: f3
TYPE(Foo) :: f4

CALL hoge()

PRINT *, "*********"
PRINT *, "f1 = Foo(10)"
f1 = Foo(10)
PRINT *, "f2 = Foo(20, 30)"
f2 = Foo(20, 30)
PRINT *, "CALL Foo(f3, 6000)"
CALL Foo(f3, 6000)
PRINT *, "CALL Foo(f4, 7000, 8000)"
CALL Foo(f4, 7000, 8000)
PRINT *, "f*%bar(5*0)"
CALL f2%bar(510)
CALL f3%bar(520)
CALL f4%bar(530)
CALL f1%bar(540)
END PROGRAM main

このコードはgfortranではコンパイルできませんでした(FINALが未サポートらしい)。
PGIコンパイラでコンパイルした実行結果と、Intelコンパイラでコンパイルした実行結果が異なっていたので、両方載せておきます。今回はコンパイラオプションを何も指定せずにコンパイルしましたが、オプションを変えると挙動が変わったりするのかなぁ?

実行結果(PGIコンパイラ使用)

*** hoge begin
f1 = Foo(10)
Foo__createA begin
Foo__constructorA begin
Foo__constructorA end
Foo__createA end
f2 = Foo(20, 30)
Foo__createB begin
Foo__constructorB begin
Foo__constructorB end
Foo__createB end
CALL Foo(f3, 6000)
Foo__constructorA begin
Foo__constructorA end
CALL Foo(f4, 7000, 8000)
Foo__constructorB begin
Foo__constructorB end
f*%bar(5*0)
Foo__bar
Foo__bar
Foo__bar
Foo__bar
*** hoge end
Foo__destructor 511
Foo__destructor 521
Foo__destructor 531
Foo__destructor 541
*********
f1 = Foo(10)
Foo__createA begin
Foo__constructorA begin
Foo__constructorA end
Foo__createA end
f2 = Foo(20, 30)
Foo__createB begin
Foo__constructorB begin
Foo__constructorB end
Foo__createB end
CALL Foo(f3, 6000)
Foo__constructorA begin
Foo__constructorA end
CALL Foo(f4, 7000, 8000)
Foo__constructorB begin
Foo__constructorB end
f*%bar(5*0)
Foo__bar
Foo__bar
Foo__bar
Foo__bar


実行結果(Intelコンパイラ使用)

*** hoge begin
f1 = Foo(10)
Foo__createA begin
Foo__constructorA begin
Foo__constructorA end
Foo__createA end
Foo__destructor 1
Foo__destructor 11
f2 = Foo(20, 30)
Foo__createB begin
Foo__constructorB begin
Foo__constructorB end
Foo__createB end
Foo__destructor 1
Foo__destructor 51
CALL Foo(f3, 6000)
Foo__constructorA begin
Foo__constructorA end
CALL Foo(f4, 7000, 8000)
Foo__constructorB begin
Foo__constructorB end
f*%bar(5*0)
Foo__bar
Foo__bar
Foo__bar
Foo__bar
*** hoge end
Foo__destructor 511
Foo__destructor 521
Foo__destructor 531
Foo__destructor 541
*********
f1 = Foo(10)
Foo__createA begin
Foo__constructorA begin
Foo__constructorA end
Foo__createA end
Foo__destructor 1
Foo__destructor 11
f2 = Foo(20, 30)
Foo__createB begin
Foo__constructorB begin
Foo__constructorB end
Foo__createB end
Foo__destructor 1
Foo__destructor 51
CALL Foo(f3, 6000)
Foo__constructorA begin
Foo__constructorA end
CALL Foo(f4, 7000, 8000)
Foo__constructorB begin
Foo__constructorB end
f*%bar(5*0)
Foo__bar
Foo__bar
Foo__bar
Foo__bar

メソッドのオーバーロードは、どうやって書けばいいんだろう?

[Linux] GVim(Pythonサポート付)を、CentOS 6.2でソースからインストールしてみた

GVim(GUIで動く Vim)を Pythonサポート付でインストールしてみた。最初はシステムの Python使用を試みたが、GVimのインストールに失敗したため、Pythonも新たにソースからインストールした。

インストール先OS:CentOS 6.2

● Pythonをインストール。
前述のように、システムの Python使用では GVimがインストールできなかった(システムに「/usr/lib/python2.6/config」ディレクトリがなかったため)。そこで、新たに Pythonをソースからインストールした。インストールするバージョンは、今回はシステムの Pythonと同じ(2.6.6)にしておいた。

cd $HOME/Downloads
wget http://www.python.org/ftp/python/2.6.6/Python-2.6.6.tar.bz2
cd $HOME/src
tar xf $HOME/Downloads/Python-2.6.6.tar.bz2
cd Python-2.6.6
mkdir build
cd build
../configure --enable-shared
make
sudo make install
which python

pythonコマンドの場所は、以下のように表示された。

/usr/local/bin/python

さらに以下を実行。これをやっておかないと、後に GVimのインストーラがシステムの Pythonを見に行ってしまった。

sudo ln -s /usr/local/bin/python2.6 /usr/local/bin/python2


● GVimをインストール

cd $HOME/src
hg clone https://vim.googlecode.com/hg/ vim
cd vim
./configure CPPFLAGS=-I/usr/local/include/python2.6 LDFLAGS=-L/usr/local/lib/python2.6 --enable-pythoninterp --with-python-config-dir=/usr/local/lib/python2.6/config --enable-fontset --enable-multibyte --enable-gui=gnome2
make
sudo make install
vim --version

vimのバージョン情報は、以下のように表示された。「+python」となっていれば、Pythonサポート付でのビルドに成功。

VIM - Vi IMproved 7.3 (2010 Aug 15, compiled ...)
適用済パッチ: 1-843
Compiled by usrname@...
通常 版 with GTK2 GUI. 機能の一覧 有効(+)/無効(-)
-arabic +file_in_path -mouse_sgr +tag_binary
+autocmd +find_in_path -mouse_sysmouse +tag_old_static
+balloon_eval +float -mouse_urxvt -tag_any_white
+browse +folding +mouse_xterm -tcl
+builtin_terms -footer +multi_byte +terminfo
+byte_offset +fork() +multi_lang +termresponse
+cindent +gettext -mzscheme +textobjects
+clientserver -hangul_input +netbeans_intg +title
+clipboard +iconv +path_extra +toolbar
+cmdline_compl +insert_expand -perl +user_commands
+cmdline_hist +jumplist +persistent_undo +vertsplit
+cmdline_info -keymap +postscript +virtualedit
+comments -langmap +printer +visual
-conceal +libcall -profile +visualextra
+cryptv +linebreak +python +viminfo
-cscope +lispindent -python3 +vreplace
+cursorbind +listcmds +quickfix +wildignore
+cursorshape +localmap +reltime +wildmenu
+dialog_con_gui -lua -rightleft +windows
+diff +menu -ruby +writebackup
+digraphs +mksession +scrollbind +X11
+dnd +modify_fname +signs -xfontset
-ebcdic +mouse +smartindent +xim
-emacs_tags +mouseshape -sniff +xsmp_interact
+eval -mouse_dec +startuptime +xterm_clipboard
+ex_extra -mouse_gpm +statusline -xterm_save
+extra_search -mouse_jsbterm -sun_workshop
-farsi -mouse_netterm +syntax
システム vimrc: "$VIM/vimrc"
ユーザ vimrc: "$HOME/.vimrc"
ユーザ exrc: "$HOME/.exrc"
システム gvimrc: "$VIM/gvimrc"
ユーザ gvimrc: "$HOME/.gvimrc"
システムメニュー: "$VIMRUNTIME/menu.vim"
省略時の $VIM: "/usr/local/share/vim"
コンパイル: gcc -c -I. -Iproto -DHAVE_CONFIG_H -DFEAT_GUI_GTK -I/usr/include/gtk-2.0 -I/usr/lib64/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 -I/usr/local/include/python2.6 -g -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1
リンク: gcc -L/usr/local/lib/python2.6 -L/usr/local/lib -Wl,--as-needed -o vim -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lgdk_pixbuf-2.0 -lpangocairo-1.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lSM -lICE -lXt -lX11 -lXdmcp -lSM -lICE -lm -ltinfo -lnsl -lselinux -L/usr/local/lib/python2.6/config -lpython2.6 -lpthread -ldl -lutil -lm -Xlinker -export-dynamic

あとは「gvim」と打ち込めば起動できる。GVim上で以下のコマンドを実行し、ステータスバーに「a」と表示されれば、Pythonサポート付のビルドに成功。

:python print "a"

[OpenFOAM] Windowsで使う時、Windows版と仮想マシン上のLinux、どっちが良い?

11月のOpenFOAM勉強会@関東で、(スタンドアロンの)WindowsでOpenFOAMを使う時、(1)Windows版を用いるのが良いか、(2)ホスト型仮想マシン上のLinuxで動かすのが良いか、という話題が出ました。パフォーマンスは比較していないので、どちらが高いかわかりません。

物理マシン上のLinuxで動かすのに比べると、両者共にデメリットがあります。

●Windows版のデメリット
・git pullで最新にアップデートできない
・PyFoamが(まだ)動かない
・MSYS上でシェルスクリプトは使えるが、MSYSは使い勝手が悪い(と私は思った)

●Linux@仮想マシンのデメリット
・GPUが使えない
・仮想マシン製品によっては、使えるCPU数に上限がある(例:VMWare Playerは4CPUまで)

どちらを使うかは、ケースバイケースですね。
プロフィール

カネダック

Author:カネダック
 
普通のC++プログラマですが、業務で流体解析をやっていて格子職人と呼ばれています。
J.S.バッハ等、古楽をピリオド楽器による演奏で聴くのが好き。
リュート演奏にあこがれつつ、クラシックギターを弾きます。

保有資格
・中小企業診断士
・Oracle Master 8 Platinum(今のGold相当)

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。