タグ付けされた質問 「fortran」

23
重い計算のためにFortranはCよりも最適化が簡単ですか?
Fortranは重い計算ではCよりも高速である、または高速になる可能性があることを時々読んだ。それは本当ですか?私はFortranをほとんど知らないことを認めなければなりませんが、これまでに見たFortranコードは、Cにはない機能が言語にあることを示していませんでした。 それが本当なら、その理由を教えてください。数の計算に適した言語やライブラリを教えないでください。それを行うためにアプリやライブラリを作成するつもりはありません。ただ興味があるだけです。
410 c  performance  fortran 

8
BLASはどのようにこのような極端なパフォーマンスを実現していますか?
好奇心から、私は自分の行列乗算関数とBLAS実装のベンチマークを行うことにしました...結果に驚くことはほとんどありませんでした。 カスタム実装、1000x1000行列乗算の10回の試行: Took: 15.76542 seconds. BLAS実装、1000x1000行列乗算の10回の試行: Took: 1.32432 seconds. これは単精度浮動小数点数を使用しています。 私の実装: template<class ValT> void mmult(const ValT* A, int ADim1, int ADim2, const ValT* B, int BDim1, int BDim2, ValT* C) { if ( ADim2!=BDim1 ) throw std::runtime_error("Error sizes off"); memset((void*)C,0,sizeof(ValT)*ADim1*BDim2); int cc2,cc1,cr1; for ( cc2=0 ; cc2<BDim2 ; ++cc2 ) …
108 c++  fortran 

6
Pythonでバイナリファイルを読み取る
Pythonでのバイナリファイルの読み取りは特に難しいと思います。手伝って頂けますか?このファイルを読む必要があります。このファイルはFortran 90では簡単に読むことができます。 int*4 n_particles, n_groups real*4 group_id(n_particles) read (*) n_particles, n_groups read (*) (group_id(j),j=1,n_particles) 詳細には、ファイル形式は次のとおりです。 Bytes 1-4 -- The integer 8. Bytes 5-8 -- The number of particles, N. Bytes 9-12 -- The number of groups. Bytes 13-16 -- The integer 8. Bytes 17-20 -- The integer 4*N. Next many …
104 python  binary  fortran 

2
numpyはFortranルーチンよりもはるかに高速なのはなぜですか?
シミュレーション(Fortranで記述)から温度分布を表す512 ^ 3配列を取得します。配列は、サイズが約1 / 2Gのバイナリファイルに保存されます。この配列の最小値、最大値、平均値を知る必要があります。とにかくFortranコードを理解する必要があるので、試してみることにし、次の非常に簡単なルーチンを思いつきました。 integer gridsize,unit,j real mini,maxi double precision mean gridsize=512 unit=40 open(unit=unit,file='T.out',status='old',access='stream',& form='unformatted',action='read') read(unit=unit) tmp mini=tmp maxi=tmp mean=tmp do j=2,gridsize**3 read(unit=unit) tmp if(tmp>maxi)then maxi=tmp elseif(tmp<mini)then mini=tmp end if mean=mean+tmp end do mean=mean/gridsize**3 close(unit=unit) 私が使用しているマシンでは、ファイルごとに約25秒かかります。それはかなり長いと私を驚かせたので、私は先に進んでPythonで次のことをしました: import numpy mmap=numpy.memmap('T.out',dtype='float32',mode='r',offset=4,\ shape=(512,512,512),order='F') mini=numpy.amin(mmap) maxi=numpy.amax(mmap) mean=numpy.mean(mmap) さて、もちろんこれはもっと速いと思っていましたが、本当に感動しました。同じ条件下で1秒もかかりません。平均は、私のFortranルーチンが見つけたもの(私も128ビットのfloatで実行したので、どういうわけかそれをもっと信頼しています)から外れていますが、有効数字の7桁程度にすぎません。 どうしてnumpyはこんなに速くなるのでしょうか?つまり、これらの値を見つけるには、配列のすべてのエントリを調べる必要がありますよね?私はFortranルーチンで非常に愚かなことをしているので、もっと時間がかかりますか? 編集: コメントの質問に答えるには: はい、32ビットと64ビットのfloatを使用してFortranルーチンを実行しましたが、パフォーマンスに影響はありませんでした。 iso_fortran_env128ビットのフロートを提供するものを使用しました。 …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.