2019年5月25日土曜日

octave + cufft + pgi (openacc). !!!!!!!! This does not work !!!!!!!!!!


I tried to mimic the following page to call cuFFT from "octfile"(octave).
However, PGI compiler (19.4) dies.


If you want to try, save the following files and type

$ sh compile.sh
$ octave callOct.m


============ compile.sh ==============
#!/bin/bash
env CXX="pgc++" \
CXXFLAGS="-fast -acc -ta=tesla,cuda9.2,managed -Minfo=accel -Mcudalib=cufft" \
XTRA_CXXFLAGS=" " \
CPPFLAGS=" " \
DL_LD="pgc++" \
mkoctfile --verbose testFFTGPU.cc
============ compile.sh ==============
x


=== testFFTGPU.cc ===
#include<math.h>
#include <octave/oct.h>
#include <octave/parse.h>
#include <complex>
#include <chrono>
#include <fftw3.h>
#include "openacc.h"
#include "cufft.h"

void inv_CUFFT(Complex *in_data, Complex *out_data, int nc, int nr, void *stream)
{
    cufftHandle plan;
    cufftResult ResPlan = cufftPlan2d(&plan, nc,nr, CUFFT_Z2Z);
    cufftSetStream(plan, (cudaStream_t)stream);
    cufftResult ResExec = cufftExecZ2Z(plan,
                                      (cufftDoubleComplex*)in_data,
                                      (cufftDoubleComplex*)out_data,
                                      CUFFT_INVERSE);
    cufftDestroy(plan);
}


DEFUN_DLD(testFFTGPU, args, ,
            "main body;")
{
   ComplexMatrix Matrix(args(0).complex_matrix_value());
   octave_value_list retval;

   ComplexMatrix out(Matrix.dims());

   Complex *pmat = reinterpret_cast<Complex *> (const_cast<Complex *>(Matrix.fortran_vec()));
   Complex *pout = reinterpret_cast<Complex *> (const_cast<Complex *>(out.fortran_vec()));

   static dim_vector dv = Matrix.dims();

   int Nc = dv(0);
   int Nr = dv(1);

#pragma acc data copy(pmat[0:Nc*Nr],pout[0:Nc*Nr])
{
   void *stream = acc_get_cuda_stream(acc_async_sync);
#pragma acc host_data use_device(pmat,pout)
{
   inv_CUFFT(pmat,pout,Nc,Nr,stream);
}
}

   retval(0) = out;
   return retval;
}
=== end testFFTGPU.cc ==

=== callOct.m ===
mat = rand(100,100);
mat1 = mat;
mat2 = mat;
fftGPU = testFFTGPU(mat2);

ifft_mat1 = ifft2(mat1);
fftGPU - ifft_mat1
=== end callOct.m ===

2019年5月19日日曜日

納豆作り

そういえば、納豆を作る、というか増やしてみました。
レシピは検索すればいくらでもでてくるので割愛。

訴求点は、オーブンを50度の設定にできるという発見。
電気代が気になりますが、乾燥大豆で400gは一気に作れそうなので、
いっぱい食べるならもとは取れる気がする。





2019年4月23日火曜日

Hallstadt and Obertraun (3/3)

最終日は、Obertraun Dachsteinのケーブルカーでファイブフィンガーズという絶景スポットを訪ねました。

4月では山の頂上は雪に覆われていて、ケーブルカーの乗り場でカンジキを借りるようにおすすめされます(実際あったほうが安全です)。

9:57にホテルのバス停を出発するバスにのり(2.20ユーロ)、チケットの購入(panorama tickeet. 32ユーロぐらい)を終えて、10:30発のケーブルカーに乗車。10分で頂上付近まで到着します。

ここからは徒歩 on カンジキで30分ぐらい。アップダウンが激しく結構大変ですが、景色の素晴らしさは文句なしなので健康上の不安がなければ行く価値ありです。

帰りは13:45ぐらいにでるバスにのり、Obertraunのホテルまで。預けてあった荷物をピックアップして、14:28発のOEBBで帰りました(Attnang-Puchheimで16:00発、Wien Hbf 18:05着のRJに乗り換え)。

この日がイースターだったようなのですが、Obertraunの風習で車輪がついたものを”ヘンなところ”に置く習わしだそうで、自転車が看板に引っ掛けてあったり猫車が屋根の上に載ったりしていました。あとから気づいたのですが、宿からファイブフィンガーズが見えていて、デジカメの望遠でたまたま撮影していました(観測所だとか適当なことを言っていた)。

夕飯はお腹が疲れていたので、近所の中華寿司屋さんで持ち帰り。マグロサーモンセットとカリフォルニアロール。








Hallstadt and Obertraun (2/3)

腰の調子もだいぶ良くなってきたので、この日はHallstadtに向けて自転車で。
宿泊所でも借りられますが、まちなかのもののほうがやすかったので、こちらで借りました。

街の散策と、岩塩坑によったら丸一日潰れます。
時間があるようだったら、ハルシュタットへはバスで行って、別の日に自転車で散策するほうがいいかも。

岩塩坑はケーブルカーと入場料込みで30ユーロちょっと。結構なお値段ですが、行って損は無いように思います。
(マッププロジェクションを利用した展示とか、滑り台とか楽しませる要素が盛りだくさんで、一時間ぐらいはかかります)

朝食はホテルのビュッフェ、昼食はパンで質素に、夕食は同じイタリアンレストランでピザを持ち帰り









Hallstadt and Obertraun (1/3)

イースター休暇を利用して、ハルシュタットに行ってきました。
対岸のObertraunにある、Dormio Resort Obertraunにとまりました。
ハルシュタットより静かで安く、自転車で30分ぐらいで行けるのでお得だと思います。
(1日15ユーロぐらいで借りられます)

最寄り駅は Obertraun Dachsteinhöhlen Bahnhof でOEBBを使ってWien Hbfから4時間ぐらい。

実は前日に腰を痛めてしまったのもあって、この日はほぼ移動のみ。
近所のイタリアンレストランで夕食。

散歩の途中で夜にボートで湖を回ってくれるアトラクションがあることを発見したので、参加しました。
どうも満月近い夜だけやるようで、4月20日は偶然巡り合わせたようです。
一人20ユーロですが、残念ながら月が出てこなかったので10ユーロ返って来ました。
水が綺麗なので、月が出ればずいぶん綺麗なのでしょう。
機会があれば再挑戦したいところ(2019の予定は写真に載っています)







2019年3月19日火曜日

pythonのソースを整形 (autopep8)

私自身はviとかEmacsでコードを書くせいで、pythonのインデントのスペースの個数が時々間違ってるらしく、eclipseを使ってる若い人に怒られたので自動整形ソフトを探す。

autopep8が簡単でうまく行った。

https://github.com/hhatto/autopep8

2019年2月4日月曜日

mkoctfile + pgi compiler

#!/bin/bash
env CXX="pgc++ -noswitcherror" \
CXXFLAGS="-O3" \
DL_LD="pgc++ -noswitcherror" \
mkoctfile -v hogefuga.cc