忍者ブログ
日々の研究生活のメモ書きなど
c言語を使ってgnuplotを起動してグラフを書かせる場合、次の2通りの方法が考えられる。

 (a) c言語でtxtファイルに出力してから、gnuplotを起動して書かせる

 (b) c言語でgnuplotにデータをそのまま渡して書かせる

参考ページ
C言語からgnuplotを操作する

Q : それではどちらの方が実行速度が早いのだろうか?

今回はこの疑問を解決する



プログラムで一番実行に時間がかかるのはデータIO(Input-Output、データの書き込みや読み込み)だと言われている
とすると、(a)はデータの書き込みをしてファイルを作るので(a)の方が時間がかかりそうな先入観が・・・

実際にやってみた(トリビア風)




(a)と(b)の実行時間を比較してみました。



赤が(a)青が(b)
横軸はデータの長さ
縦軸は実行時間 (/usr/bin/time を使って5回測定してその平均した値)

これを見る限りでは、データを一度txtファイルとかに出力した方が早い・・・・
たぶんgnuplotに直接データを渡すとき、一度全部溜め込んでから書くとか微妙なことをしてるのかなー・・・

何にせよデータ数が300行を超えたあたりからは、一度出力した方が早そうですねー
(どのみち再現するためにもtxtには出力したいところなんだけどね)


ソースは右下の続きを読むに付けておきます。

(a) のソースint main(int argc, char *argv[]){

FILE *gp, *fp;
int i;
double n, a, b;

if(argc > 1){
n = atof(argv[1]);
}
else{
n = 100;
}
fprintf(stdout, "n = %.0le\n",n);

if( (fp = fopen("test_data.txt","w")) == NULL){
perror("data fopen error");
exit(1);
fclose(fp);
}

for(i=1; i<=n; i++){
a = 1/n*i;
b = sin(2*M_PI*10*a);
fprintf(fp, "%5.5lf %5.5lf\n", a, b);
}

fclose(fp);

gp = popen("gnuplot -persist","w");
fprintf(gp, "set terminal pdf\n");
fprintf(gp, "set output '/dev/null'\n");

fprintf(gp, "plot \"test_data.txt\" w l lw 2\n");
fprintf(gp, "set output \"hoge.pdf\"\n");
fprintf(gp, "replot\n");

pclose(gp);
return 0;
}


(b) のソースint main(int argc, char *argv[]){

FILE *gp, *fp;
int i;
double n, a, b;

if(argc > 1){
n = atof(argv[1]);
}
else{
n = 100;
}
fprintf(stdout, "n = %.0le\n",n);

gp = popen("gnuplot -persist","w");

fprintf(gp, "set terminal pdf\n");
fprintf(gp, "set output \"hoge.pdf\"\n");
fprintf(gp, "plot '-' w l\n");
for(i=0; i a = 1/n*i;
b = sin(2*M_PI*10*a);
fprintf(gp, "%5.5lf %5.5lf\n", a, b);
}
fprintf(gp, "e\n");

pclose(gp);
return 0;
}
PR
プロフィール
HN:coffee
職業:物理屋(自称)
趣味:映画鑑賞、登山
出身:大阪府の南の田舎
自己紹介:
import MyProfile
import coffee_pote from TWITTER
import amazonのほしい物リスト from WISH_LIST

print "生きてます"
print "コロナのせいで15万くらい損失出してますが、生きてます"

# 最終更新 2020/03/15
カウンター
カウンター カウンター
ブログ内検索
ツイートするボタン
リンク
相互リンク募集中です (Twitterにてお知らせください)

Demo scripts for gnuplot version 5
(gnuplotのさまざまなデモ画像と作り方がまとめられている、眺めているだけでできるようになった気分になれる)

gnuplotスクリプトの解説
(米澤進吾さんの個人ページ、gnuplotと言えばこのかた)

gnuplot のページ
(Takeno Lab、うちのブログがリンクされていたのでリンク返し)

とある物理の院生日誌~院生は社会へ旅立った~
(研究室の先輩の個人ブログ)

英語例文を見て自然に英語・英会話を学ぶ
(楠本慶ニさんの個人ページ、様々な情報の密度の高さに感動)

Twitterから映画の評価が分かる & 映画の鑑賞記録が残せる coco
(映画の感想をまとめられるサイト、いつもお世話になっています)

Astronomy Picture of the Day Archive
(天文や宇宙関連の最新の話題について画像とともにNASAが説明しているページ)

今日のほしぞら
(任意の時刻の空で見える星を表示してくれる、国立天文台が管理している)

GNUPLOTとアニメーション
(応用の項目の「見せてあげよう!ラピュタの雷を!!」あたりからすごすぎる)

読書メーター
(読んだ本をリストできる便利なサイト)

flickr難民の写真置き場
(20XX年、flickrは有料化の炎に包まれた。あらゆるflickr無料ユーザーは絶滅したかに見えた。 しかし、tumblr移住民は死に絶えてはいなかった。)

教授でもできるMac OS X へのLaTeX, X11, gccのインストレーションと環境設定
(阪大の山中卓さんのwebページ、タイトルにセンスが溢れている、内容は超充実してる、特にTeX関連、学振DCとかPDの申請書類作成時にはお世話になっております)


Template "simple02" by Emile*Emilie
忍者ブログ [PR]