Octaveでの不正な命令エラー

このQ&Aのポイント
  • Octaveで大きな行列を読み込み、演算を行うと不正な命令エラーが発生します。
  • 同じ行列を別の環境で読み込んだ場合には正常に演算ができます。
  • 再インストールを試しても問題は解決されません。設定ファイルが壊れている可能性があります。
回答を見る
  • ベストアンサー

数値演算言語 octaveの "不正な命令です"

ある程度の大きさの行列をファイルから読み込みます。 その行列を使った演算(例えばベクトルとの積)を行うとすると panic: Illegal instruction -- stopping myself... attempting to save variables to `octave-core'... save to `octave-core' complete 不正な命令です とでます。 違う環境で同じ行列を読み込んだら、ちゃんと演算できます。 何か設定ファイル的なものが壊れているのでしょうか? 再インストールもしたのですが、変わりません。 読み込もうとするファイルは192x192の上三角行列です。 例: octave:1> load A octave:2> size(A) ans = 192 192 octave:3> v=ones(192,1); octave:4> B=A*v; panic: Illegal instruction -- stopping myself... attempting to save variables to `octave-core'... save to `octave-core' complete 不正な命令です

質問者が選んだベストアンサー

  • ベストアンサー
  • rabbit_cat
  • ベストアンサー率40% (829/2062)
回答No.2

数値計算の専門アプリでは、行列演算はサイズによって異なるアルゴリズムを使ってることが多いです。SIMD系の命令とか、CPUのキャッシュサイズとか、演算とメモリ転送の速度比較、なんかをもとにして内部できりかえています。 blas、atlasなんかを使うと顕著ですが、素のoctaveも、バイナリで配布されてるやつは、結構最適化されてるんではないかと思います。

abcpotato
質問者

お礼

返事遅くなりました。すいません。 ソースからコンパイルしようとしましたが、てこずったので、結局 Ubuntu Linuxの32bit版入れてしまいました。 ちゃんと動きました。ありがとうございました。

その他の回答 (1)

  • rabbit_cat
  • ベストアンサー率40% (829/2062)
回答No.1

インストールしたバイナリに、使ってるCPUでサポートされてない命令が入っているとか? 自前でコンパイルするとどうですかね。 (自前でコンパイルすると、おそらく計算速度が低下しますが)

abcpotato
質問者

補足

Octaveは Ubuntu Linux AMD64 Edition で、apt-get で入るヤツです。 パソコンはPentium Dマシンです。 あ、もしかして、だめだったのでしょうか? でも、50x50の小さめの行列だと、うまくいくんです。。。

関連するQ&A

  • 不正命令

    windowsXPにphotoshopLEをインストールしようとしたところ 16ビットWindowsサブシステム NTVDM CPUは不正命令を検出しました。 CS:0003 IP:57fb OP:ff ff 00 04 fc アプリケーションを終了するには、[閉じる]を選んでください。                  閉じる(C)       無視(I) と言うメッセージが表示されました。 無視をクリックしても同じようなメッセージが表示されます。今までこのようなメッセージは表示されませんでした。 なぜこんなメッセージが出たのか教えてください

  • 数値+演算子+数値を計算したい!

    数値1+演算子+数値2を計算させたいのですが、1 + 1 のような計算を格納するにはどうしたらいいですか? 数値1 Decimal 数値2 Decimal 演算子 String 結果  Decimal Decimal = Decimal + String + Decimal だとエラーが出ます。当たり前ですけど・・・

  • 数値の比較演算について

    int x = 0; if(x >= 0 && x <= 1) { x = 'a'; } if(x >= 2 && x <= 3) { x = 'b'; } 以下ある程度同様のif分岐 ※自作プログラムより一部抜粋及び改変 C言語を始めたばかりなのですが上記のようなif分岐を行い、%cでxを表示するのですが、xの値が0にもかかわらず、aではなく別の記号が表示されてしまいます。 自分では直前にprintfでxの値が変わっていないか確認し、%dでどのような数値になっているかも確認しました。 どこが悪いのか直接的な答えでなくとも、ヒントだけでも構いませんのでご教示していただけないでしょうか?

  • 不正命令の検出

    コンピュータを立ち上げると、「C\WINDOWS\system32\bad2.exe、NTVDM CPUは不正命令を検出しました。CS:2efe IP:0234 OP:63 63 65 73 73 アプリケーションを終了するには、「閉じる」を選んでください。」というメッセージが出ます。その後閉じるを選択すると普段どおりにPCを使えます。ただ、タスクマネージャーとシステムの復元が機能しません。「ファイル名を指定して実行」するとシャットダウンして再起動します。どなたか治し方を教えてください。

  • 不正命令を検出

    PCを立ち上げたときに、 「C:\WINDOW\system32\VXH8JK~1.EXE NTVDM CPUは不正命令を検出しました。」 と表示されます。 PCに関して初心者も同然なので、どうしてよいものか 慌てて質問させて頂きました。 前のように表示されなくするには、どのような操作をしたら 良いのでしょうか? アドバイスを宜しくお願い致します。

  • regedit 不正命令

    スタート→ファイル名(実行)→regeditにすると NTVDM CPUは不正命令を検出と出てしまい実行されません。 原因はウィルスかと思いますが、検索をしても何も出てきません。修復するにはどのようにすればいいですか。

  • C言語の演算について

    次のプログラムを実行したらどう出力されますか。 微妙な代入演算の違いが分からないので、教えていただけないでしょうか。 #include<stdio.h> void main (void) { int x = 5; int y = 8; int z = 3; int a,b,c,d,e,f; a = y == x + z; b = !x; c = x + y / z; d = x *=z - 1; e = --y / --z; f = y+++ % x++; printf("%d,%d,%d,%d,%d,%d\n",a,b,c,d,e,f); } できれば途中のトレースも書いていただけると助かります。 よろしくお願いします。

  • c言語、演算子&について

    当方c言語、初心者でただいま勉強中です。 以下のようなプログラムをコンパイルし実行すると、 i=10,j=2というように表示されます。 この場合の&は論理積と理解してよいのでしょうか? そうだとすると&の後の-10はどのように理解すればよいのでしょうか? ご存じの方いらっしゃれば教えていただけないでしょうか? #include <stdio.h> int main(void) { int i,j; i=10; j=i&-10; printf("i=%d,j=%d",i,j); return 0; }

  • C言語の演算について

    次のプログラムを実行したらどう出力されますか。 微妙な代入演算の違いが分からないので、教えていただけないでしょうか。 #include<stdio.h> void main (void) { int x = 5; int y = 8; int z = 3; int a,b,c,d,e,f; a = y == x + z; b = !x; c = x + y / z; d = x *=z - 1; e = --y / --z; f = y++ % x++; printf("%d,%d,%d,%d,%d,%d\n",a,b,c,d,e,f); } できれば途中のトレースも書いていただけると助かります。 よろしくお願いします。 なお、先ほど記述ミスがあるのにも関わらず投稿してしまいました…。 正しい記述はこちらの質問です。 大変失礼しました。 前の質問は削除可能になり次第、削除いたします。

  • c言語の簡単な演算なのですがわかりません。

    int a = 10, b = 5, c = 3; b = ++a - c--; print("%d\n", b); b の結果が がなんで 8 になるのでしょうか? aのインクリで11 cのデクリで2 で9のような気がしましたが違いますね。 計算の順番をわすれてしまいました。 小学生レベルといわずよろしくお願いします。