Accepted at SC19 (WACCPD19)!
See you guys in Denver.
Acceleration in Acoustic Wave Propagation Modelling using OpenACC/OpenMP and its hybrid for the Global Monitoring System
https://waccpd.org/program/
2019年10月14日月曜日
2016年3月27日日曜日
UbuntuでACML
GPGPUされたBLAS/LAPACKを手軽に使いたかったので、Ubuntu (14.04)でACML6.1を使う。
sudo update-alternatives --install /usr/lib/libblas.so.3 libblas.so.3 /opt/ACML/6.1.0/gfortran64_mp/lib/libacml_mp.so 60
sudo update-alternatives --install /usr/lib/liblapack.so.3 liblapack.so.3 /opt/ACML/6.1.0/gfortran64_mp/lib/libacml_mp.so 60
して、登録後
sudo update-alternatives --config libblas.so.3
sudo update-alternatives --config liblapack.so.3
AMD A8-3850とRadeon R9 390という歪な構成ながら、問題サイズが大きければOpenBLASよりも速いこともあるようなので、まぁまぁ?ACMLの時はtopでみてる感じだとCPU使用率50%ぐらい。OpenBLASの時はもちろんほとんど400%
計算例:
Python:
>>> from numpy import *
>>> from time import *
>>> a=random.rand(10000,10000); t=time(); a=linalg.inv(a); time()-t
ACML: 46.84487009048462
OpenBLAS: 72.2047929763794
OCTAVE:
octave:1> a=rand(10000,10000); b=a;
octave:2> tic; c=a*b; toc;
追記:
octaveをインストールする時にいろいろ文句を言われたので、下の方がいいかも。
sudo update-alternatives --install /usr/lib/libblas.so.3 libblas.so.3 /opt/ACML/6.1.0/gfortran64_mp/lib/libacml_mp.so 60 --slave /usr/lib/libblas.so.3gf libblas.so.3gf /opt/ACML/6.1.0/gfortran64_mp/lib/libacml_mp.so
sudo update-alternatives --install /usr/lib/liblapack.so.3 liblapack.so.3 /opt/ACML/6.1.0/gfortran64_mp/lib/libacml_mp.so 60 --slave /usr/lib/liblapack.so.3gf liblapack.so.3gf /opt/ACML/6.1.0/gfortran64_mp/lib/libacml_mp.so
sudo update-alternatives --install /usr/lib/libblas.so.3 libblas.so.3 /opt/ACML/6.1.0/gfortran64_mp/lib/libacml_mp.so 60
sudo update-alternatives --install /usr/lib/liblapack.so.3 liblapack.so.3 /opt/ACML/6.1.0/gfortran64_mp/lib/libacml_mp.so 60
sudo update-alternatives --config libblas.so.3
sudo update-alternatives --config liblapack.so.3
AMD A8-3850とRadeon R9 390という歪な構成ながら、問題サイズが大きければOpenBLASよりも速いこともあるようなので、まぁまぁ?ACMLの時はtopでみてる感じだとCPU使用率50%ぐらい。OpenBLASの時はもちろんほとんど400%
計算例:
Python:
>>> from numpy import *
>>> from time import *
>>> a=random.rand(10000,10000); t=time(); a=linalg.inv(a); time()-t
ACML: 46.84487009048462
OpenBLAS: 72.2047929763794
OCTAVE:
octave:1> a=rand(10000,10000); b=a;
octave:2> tic; c=a*b; toc;
ACML:4.4 sec
OpenBLAS: 46.8 sec
すばらしい。
追記:
octaveをインストールする時にいろいろ文句を言われたので、下の方がいいかも。
sudo update-alternatives --install /usr/lib/libblas.so.3 libblas.so.3 /opt/ACML/6.1.0/gfortran64_mp/lib/libacml_mp.so 60 --slave /usr/lib/libblas.so.3gf libblas.so.3gf /opt/ACML/6.1.0/gfortran64_mp/lib/libacml_mp.so
sudo update-alternatives --install /usr/lib/liblapack.so.3 liblapack.so.3 /opt/ACML/6.1.0/gfortran64_mp/lib/libacml_mp.so 60 --slave /usr/lib/liblapack.so.3gf liblapack.so.3gf /opt/ACML/6.1.0/gfortran64_mp/lib/libacml_mp.so
2013年5月10日金曜日
スペクトル法で時間発展拡散方程式(1D)
勉強のためやってみたので、Octaveのスクリプトを。
もちろん、間違ってても責任は持ちません。
もちろん、間違ってても責任は持ちません。
function laplacian = calc_lap(nDim, dif_coef, cur_func)
for i=1:1:nDim
laplacian(i) = -1.0*dif_coef*i^2*cur_func(i);
end
endfunction
nGrid=128;
nSteps=2000;
deltaT=0.0001;
dif_coef = 1.0;
#Define initial condition
initial_value=zeros(1,nGrid);
initial_value(1,nGrid/2)=1.0;
init_fft=fft(initial_value);
#Begin time integral loop
cur_coef=zeros(1,nGrid);
hlf_coef=zeros(1,nGrid);
nxt_coef=zeros(1,nGrid);
lap_coef=zeros(1,nGrid);
cur_coef = init_fft;
#hold on;
#plot(abs(initial_value));
for iStep=1:1:nSteps
# 2-stage Runge-Kutta time integral
lap_coef = calc_lap(nGrid, dif_coef, cur_coef);
for i = 1:1:nGrid
hlf_coef(i) = cur_coef(i) + deltaT/2.0 * lap_coef(i);
end
lap_coef = calc_lap(nGrid, dif_coef, hlf_coef);
for i = 1:1:nGrid
nxt_coef(i) = cur_coef(i) + deltaT * lap_coef(i);
end
cur_coef= nxt_coef;
if(mod(iStep,50) == 0)
cur_val = ifft(cur_coef);
hold on;
plot(real(cur_val));
endif
end
plot(real(cur_val));
hold off;
print -deps time_diffusion
登録:
投稿 (Atom)
