どうしたの
_for (level = 1; level <= log2((double)size); level++)
^
_
log2()
を使用しているようですが、何が問題なのでしょうか?実際にOpenMPIコードで使用していますが、この行をコメントすると問題が修正されます。
フルソース ( http://pastie.org/7559178 )行40を参照
_[jiewmeng@JM Assign3]$ mpicc -o cpi cpi.c && mpirun -np 16 cpi
/usr/bin/ld: /tmp/cca9x4he.o: undefined reference to symbol 'log2@@GLIBC_2.2.5'
/usr/bin/ld: note: 'log2@@GLIBC_2.2.5' is defined in DSO /usr/lib/libm.so.6 so try adding it to the linker command line
/usr/lib/libm.so.6: could not read symbols: Invalid operation
collect2: error: ld returned 1 exit status
_
log2(4)
は機能するようですが、変数を渡すことはできませんか?
libm
をリンクするには、このドキュメントのように-lm
引数を追加する必要があります。 数学部のLinux環境でのMPI のコメント:
コードに数学関数(exp、cosなど)が含まれている場合は、数学ライブラリlibm.soにリンクする必要があります。これは、コンパイルコマンドの最後に-lmを追加することで、シリアルコンパイルの場合と同様に行われます。つまり、
mpicc -o sample sample.c -lm