新しく発言する EXIT インデックスへ
仮想メモリーを増やす方法ありますか?

  仮想メモリーを増やす方法ありますか? 会社員 2003/11/02 18:51:41 
  言語仕様の制限の中に tetsu 2003/11/02 19:09:37 
   └tetsuさん 会社員 2003/11/02 21:01:51 
    ├RetrainVirtualMemory=0は,[Frame]セクショ... 白石和夫 2003/11/02 21:58:41 
    │└[Frame]のすぐ下の行に書いて・・ 会社員 2003/11/03 13:31:53 
    │ └1億桁を計算できるか tetsu 2003/11/04 08:14:23 
    └配列変数10^7個はやはりメモリー限界と考え... tetsu 2003/11/02 22:01:47 
     ├再び「EXTYPE102」がでてきました。 会社員 2003/11/05 22:11:42 
     │├私の理解ではスワップは使用していないファ... tetsu 2003/11/06 14:10:34 
     │├私の「スワップ」の理解が間違っているのか... 会社員 2003/11/06 22:51:57 
     │└現在のバージョンは,「RetrainVirtualMemo... 白石和夫 2003/11/13 18:26:03 
     │ ├ver5.1.4で上限を1GBに変更しました。 白石和夫 2003/11/20 07:45:40 
     │ └ありがとうございます。 会社員 2003/11/29 10:16:03 
     └メモリーの消費量の計算方法を教えてくださ... 会社員 2003/11/29 10:46:55 
      ├1000桁モードでは,9桁増えるごとに4バイト... 白石和夫 2003/11/30 13:02:36 
      │└ありがとうございます。 会社員 2003/11/30 16:36:47 
      │ └10進1000桁モードで多く消費するメモリは「... 白石和夫 2003/12/01 08:54:35 
      │  └ver5.1.5で「変数用メモリ」の表現を「変数... 白石和夫 2003/12/01 22:41:51 
      └メモリーを消費しにくいプログラミングって... 会社員 2003/12/14 15:35:17 
       ├Windowsのアプリケーションに許されたアドレ... 白石和夫 2003/12/16 12:00:28 
       └テキストファイルへ落として読み書き 会社員 2003/12/23 08:58:03 
        └いずれ64ビット化はすると思いますが,いつ... 白石和夫 2003/12/23 09:12:22 

  仮想メモリーを増やす方法ありますか? 会社員 2003/11/02 18:51:41  ツリーへ

仮想メモリーを増やす方法ありますか? 返事を書く
会社員 2003/11/02 18:51:41
こんにちは
お世話になります。

dim X(J),Y(J),Z(J)で、
J=10^7にしたところ

以下のエラーがでてきました。
『EXTYPE-102 仮想メモリーが確保できなかった』

これを避ける方法はありますか?
物理メモリを増やせばいいのでしょうか?

よろしくお願いします。

環境:OS Windows XP
物理メモリ:256MBを実装

  言語仕様の制限の中に tetsu 2003/11/02 19:09:37  ツリーへ

Re: 仮想メモリーを増やす方法ありますか? 返事を書く
tetsu 2003/11/02 19:09:37
言語仕様の制限の中に

★ 変数用仮想メモリー
通常,変数に割り当てる仮想メモリーは,実装物理メモリー容量から16Mバイトを減じた値(ただし,最小1Mバイト,最大512Mバイト)を上限とする。
なお,BASIC.INIにキーを追加することでこの制限を解除できる。

と書いてあります。
BASIC.INIに RetrainVirtualMemory=0 を書き込めば良い様です。


   └tetsuさん 会社員 2003/11/02 21:01:51  ツリーへ

Re: 言語仕様の制限の中に 返事を書く
会社員 2003/11/02 21:01:51
tetsuさん 
レスありありがとうございます。

BASIC.INIの最後に『RetrainVirtualMemory=0』追加しましたが、同じでした。
やはり
『EXTYPE-102 仮想メモリーが確保できなかった』
とでてきます。

書き方が悪いのでしょうか?
あるいは、別の原因でしょうか?

==BASIC.INI==
[Trace]
FontName=MS ゴシック
FontSize=12
[PrintBMP]
EnLarge=0
[OptionAC]
0=1
1=1
2=1
3=1
4=1
5=1
6=0
7=0
8=0
9=0
[Debug]
FontName=MS ゴシック
FontSize=11
[Graphics]
AxisColor=15
[Text]
FontName=MS ゴシック
FontSize=12
InitialMargin=1600
[Frame]
Left=140
Top=174
Width=673
Height=551
FontName=MS ゴシック
FontSize=12
Flat=0
ToolBar=1
AutoIndent=1
JISFormat=0
JISSetWindow=0
JISDim=0
JISDef=0
ForceFunctionDeclare=0
OptionExplicit=0
Shift_F5=LET
Shift_F6=PRINT
Shift_F7=OPTION ANGLE DEGREES
Shift_F8=
[Printer]
FontName=MS 明朝
FontSize=11
[AutoFormat]
kw=0
RetrainVirtualMemory=0

    ├RetrainVirtualMemory=0は,[Frame]セクショ... 白石和夫 2003/11/02 21:58:41  ツリーへ

Re: tetsuさん 返事を書く
白石和夫 2003/11/02 21:58:41
RetrainVirtualMemory=0 は,[Frame]セクションに書いてください。[Frame]のすぐ下の行に書けばOkです。

    │└[Frame]のすぐ下の行に書いて・・ 会社員 2003/11/03 13:31:53  ツリーへ

Re: RetrainVirtualMemory=0は,[Frame]セクショ... 返事を書く
会社員 2003/11/03 13:31:53
[Frame]のすぐ下の行に書いて・・

RetrainVirtualMemory=0 を[Frame]セクションに書いてうまく動きました。

ただ、配列を準備する時間は
10^6=>2秒
10^7=>8分30秒 (約250倍)
へ急激に増えました。
(やはり、物理メモリの範囲を超えるからでしょうか?)

もう少し変数を増やしてどうなるかも見てみ見ることにします。
ありがとうございました。

・・・円周率計算をして、1億桁を計算できるかを検討の途中で
10^7〜10^8サイズの配列が準備できるのかを考えていました。

    │ └1億桁を計算できるか tetsu 2003/11/04 08:14:23  ツリーへ

Re: [Frame]のすぐ下の行に書いて・・ 返事を書く
tetsu 2003/11/04 08:14:23
1億桁を計算できるか

十進BASICはインタープリタですから1億桁は時間が掛かりすぎるのでは?
計算するならコンパイラにした方が良いと思いますよ。
それに家庭用パソコンではよほどCPU放熱の良いものでないと、何時間もCPU稼働率100%が続くと熱暴走を起こしてしまう危険も有ると思います。

    └配列変数10^7個はやはりメモリー限界と考え... tetsu 2003/11/02 22:01:47  ツリーへ

Re: tetsuさん 返事を書く
tetsu 2003/11/02 22:01:47
配列変数 10^7 個はやはりメモリー限界と考えられます。
十進BASICでは説明がないようなので解りませんが、浮動少数変数のため、1変数当り10バイト以上消費していると考えられます。
そうするとこの宣言だけで100MBものメモリーを確保しょうとする訳ですからちょっと無理かも?
それにしてもこれほどの配列変数を必要とするとは、何をしようとされているのか気になります。
何らかの工夫が必要かも知れません。

     ├再び「EXTYPE102」がでてきました。 会社員 2003/11/05 22:11:42  ツリーへ

Re: 配列変数10^7個はやはりメモリー限界と考え... 返事を書く
会社員 2003/11/05 22:11:42
再び「EXTYPE102」がでてきました。

配列変数を10変数へ増やし、10^8でやってみました。
(Cドライブ 空き15GB)

すると、再び「EXTYPE102 仮想メモリーが確保できなかった」のエラーが出てきました。

BASIC.INIに「RetrainVirtualMemory=0」と書いても、やはり限界はあるんでしょうか?
tetsuさんの計算でいくと確保しようとする領域は 今回 約1GB相当になると思います。

物理メモリを超えるとハードディスクにスワップするものと
思っていますが、そういう考えでダメなのでしょうか?

たかが円周率に ちょっと無謀と思いつつも。。。
よろしくお願いします。

     │├私の理解ではスワップは使用していないファ... tetsu 2003/11/06 14:10:34  ツリーへ

Re: 再び「EXTYPE102」がでてきました。 返事を書く
tetsu 2003/11/06 14:10:34
私の理解ではスワップは使用していないファイルを一時的にハードディスクに移動するもので、
今から使用するために確保する仮想メモリーに対して有効になるとは考えられないのですが?
さらにスワップはファイルを分割して移動するとも考えてなかったのですがどうでしょうか?

     │├私の「スワップ」の理解が間違っているのか... 会社員 2003/11/06 22:51:57  ツリーへ

Re: 再び「EXTYPE102」がでてきました。 返事を書く
会社員 2003/11/06 22:51:57
私の「スワップ」の理解が間違っているのかもしれません。

tetsuさんのいうとおり
『今、使っている』メモリ領域は、スワップはしないのかもしれません。

ちょっと、手づまりになりました。

     │└現在のバージョンは,「RetrainVirtualMemo... 白石和夫 2003/11/13 18:26:03  ツリーへ

Re: 再び「EXTYPE102」がでてきました。 返事を書く
白石和夫 2003/11/13 18:26:03
現在のバージョンは,「RetrainVirtualMemory=0」を書いても512MBまでしか使いません。
実際はもう少し上限を引き上げることは可能ですが,32ビットCPUのアドレス空間は4GBしかないので,そんなには増やせません。

     │ ├ver5.1.4で上限を1GBに変更しました。 白石和夫 2003/11/20 07:45:40  ツリーへ

Re: 現在のバージョンは,「RetrainVirtualMemo... 返事を書く
白石和夫 2003/11/20 07:45:40
ver 5.1.4で上限を1GBに変更しました。

     │ └ありがとうございます。 会社員 2003/11/29 10:16:03  ツリーへ

Re: 現在のバージョンは,「RetrainVirtualMemo... 返事を書く
会社員 2003/11/29 10:16:03
ありがとうございます。

さっそく使わせていただいています。

     └メモリーの消費量の計算方法を教えてくださ... 会社員 2003/11/29 10:46:55  ツリーへ

Re: 配列変数10^7個はやはりメモリー限界と考え... 返事を書く
会社員 2003/11/29 10:46:55
メモリーの消費量の計算方法を教えてください。

こんにちは。
1000桁モードで多倍長FFT乗算の計算をしようとしています。

計算をさせているとだんだんメモリを消費し
メモリソフトのスワップ容量が1.3GBになったところで
「Windows-仮想メモリ最小値が低すぎます」(これはOS側の警告文です)
とでてきます。

メモリーの消費量は何で決まるのしょうか?
教えてください、よろしくお願いします。

      ├1000桁モードでは,9桁増えるごとに4バイト... 白石和夫 2003/11/30 13:02:36  ツリーへ

Re: メモリーの消費量の計算方法を教えてくださ... 返事を書く
白石和夫 2003/11/30 13:02:36
1000桁モードでは,9桁増えるごとに4バイト消費します。

      │└ありがとうございます。 会社員 2003/11/30 16:36:47  ツリーへ

Re: 1000桁モードでは,9桁増えるごとに4バイト... 返事を書く
会社員 2003/11/30 16:36:47
ありがとうございます。

白石先生 回答ありがとうございました。
さっそく計算してみます。

計算が進むにしたがってオーバーフローへ向かっていく理由が
納得できました。

      │ └10進1000桁モードで多く消費するメモリは「... 白石和夫 2003/12/01 08:54:35  ツリーへ

Re: ありがとうございます。 返事を書く
白石和夫 2003/12/01 08:54:35
10進1000桁モードで多く消費するメモリは「変数用メモリ」とは別のところから取られるので「RetrainVirtualMemory=1」にしたほうが良い結果が得られると思います。

      │  └ver5.1.5で「変数用メモリ」の表現を「変数... 白石和夫 2003/12/01 22:41:51  ツリーへ

Re: 10進1000桁モードで多く消費するメモリは「... 返事を書く
白石和夫 2003/12/01 22:41:51
ver 5.1.5で「変数用メモリ」の表現を「変数管理用メモリ」に変え,直接INIファイルで指定できるようにしました。実際は複雑ですが,内部で通常のヒープメモリのほかに,起動時にアドレス空間を確保したメモリをスタック的に利用しています。スタック的に使っているのが「変数管理用メモリ」です。Windowsではアプリケーションが使えるアドレス空間は2GBしかない(!)ので,「変数管理用メモリ」を増やすと,それ以外の目的に使える仮想メモリ(通常のヒープで使うメモリ)が減ってしまいます。特に,1000桁モードと有理数モードではヒープを大量に消費するので,「変数管理用メモリ」を多くとってしまうと不利です。

      └メモリーを消費しにくいプログラミングって... 会社員 2003/12/14 15:35:17  ツリーへ

Re: メモリーの消費量の計算方法を教えてくださ... 返事を書く
会社員 2003/12/14 15:35:17
メモリーを消費しにくいプログラミングってありますか?

こんにちは。
とりあえず、√2を 1638万桁まで計算できました。

しかし、1億桁は遠いようです。

1000桁モードで 9桁で4バイトを消費するとすると
1億桁という数字を表現するだけで、250桁区切りで40万の配列が必要で これは 180MBもメモリを消費する計算です。

FFT乗算の途中では、さらに、桁の2倍の配列と実数、虚数、自身の数と相手の数で
単純には 約10倍のメモリ消費≒1.8GBが必要なようです。

不要な桁を「0」を埋め込んだりしてメモリーの消費を抑えて何とか
2^16×250桁=16384桁の計算までたどりつきましたが、ここから先で止まっています。。。。
(2^18×250桁=6553600桁は計算途中でオーバーフローでした。)

メモリを消費しないプログラミングの注意点がありましたら 教えてください。

以上、よろしくお願いします。

       ├Windowsのアプリケーションに許されたアドレ... 白石和夫 2003/12/16 12:00:28  ツリーへ

Re: メモリーを消費しにくいプログラミングって... 返事を書く
白石和夫 2003/12/16 12:00:28
Windowsのアプリケーションに許されたアドレス空間2GBを有効に使う方法を考えるしかないです。
まず,Windows2000/XPであれば,コントロールパネルの仮想メモリの設定でページングファイルの最小値を2GB以上にしてみてください。
そして,BASICのINIファイルで,VirtualMemoryの設定値をエラーが出ない範囲で小さく設定してください(Ver5.1.6が必要)。再帰を使っていないのであれば,すべての配列の確保が終わった時点でエラーにならない程度まで小さくしても多分大丈夫です。


       └テキストファイルへ落として読み書き 会社員 2003/12/23 08:58:03  ツリーへ

Re: メモリーを消費しにくいプログラミングって... 返事を書く
会社員 2003/12/23 08:58:03
テキストファイルへ落として読み書き

こんにちは。
配列をできるだけ使わずテキストファイルへ落として読み書き(INPUT/OUTPUT)することで、かなり消費されるメモリ量は減った感じです。

しかし、計算速度は、約3倍落ちました。

以前、オーバーフローの起きた250×2^18=6553600桁の計算でも、
オーバーフロー『自体』は起こらなくなりました。
しかし、ハードディスクのランプが付いたまま止まったような状態です。
(一応動作はしていましたが、あまりに遅いので一旦PCを停止しました。)

とりあえずメモリを増やす(778MB→1778MB)ことにしています。

やはり1億桁は巨大です。

ところで、勝手ながら、今後、10進BASICを64bit版対応(=Win_XP PRO版)にされるなんてことは今後あるのでしょうか?

64bitであれば (ハード的問題がまだまだ別にありますが、)まずメモリーオーバーフローの問題には煩わせることがなくなるのですが。。。

        └いずれ64ビット化はすると思いますが,いつ... 白石和夫 2003/12/23 09:12:22  ツリーへ

Re: テキストファイルへ落として読み書き 返事を書く
白石和夫 2003/12/23 09:12:22
いずれ64ビット化はすると思いますが,いつになるかは分かりません。最初は16ビットだったのですから。32ビットになったときは,2GB=∞という感じでした。


インデックスへ EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。