• 締切済み

膨大データ処理を高速化したい

仕事上、膨大データ処理を行っており、その処理に一度の処理に何十分も掛かり困ってます。 OSはWindows7でCPUはCore5、メモリ4GBの環境でも何せこれだけの膨大データなので。 その方法としてインメモリというメモリに対象データを格納してHDDを介さず高速データ処理が可能な技術もあるそうですが、どうやらそれは個人向けの技術ではなさそうですね。 ですが膨大データ処理を行ってる以上、高速処理を実現させる必要があり、できれば個人でもインメモリを実現させたいです、またインメモリに代わる高速処理の方法があれば教えて下さい。

みんなの回答

回答No.5

膨大なデータとおっしゃっているのでメモリーに載り切らないぐらいのデータを扱っているのかと思いきや、たった200MBですか。そのデータ処理のアルゴリズムが悪いだけではないでしょうか。 Windows7の実装は詳しく知りませんが、メモリーの容量(4GB)の20分の1程度のデータなら一度読んだら全部メモリーに載ってます。初回読む場合でもシーケンシャルアクセスであればOSが先読みしてくれて、ディスクI/Oのためにプログラムが長時間停止するということはまず無いと思います。 どうしても、メモリーにデータを読み込んでディスクI/Oをせずに処理すれば高速になるとしか思えないなら、ファイルを読むだけのプログラムを書いて時間を測ってみたらいかがでしょうか。 あなたが行っているその膨大なデータの処理が何の言語で書かれていて、具体的にどういうことをしているのかを知らずして、これ以上のことは語れませんが、あなたのプログラムのデータ量あたりの時間計算量のオーダーを計算してみてはいかがでしょうか。 その言語処理系の標準ライブラリーなどを駆使してできないかまず考えましょう。大抵はあなたが考えたアルゴリズムよりもずっと良い方法でライブラリーが処理してくれることでしょう。

cs4f18df
質問者

補足

回答ありがとうございます。 皆様のご意見を参照する以前に、以下説明をする必要がある事に気付きました。 自分のやってる処理は、あるソフトウェアでC言語に似た独自の言語でプログラミングしたスクリプトを稼働させテキスト処理を行うものです。 おそらくそのソフトに処理を高速化する為の機能は特にないと思います、インメモリの設定もできないと思います。 なのでソフトに頼らず自分のスクリプトオンリーで処理するなら、皆様のご回答通りの解決策ができるかもしれませんが、作業上、このソフトを使う事が必要不可欠です。 しかも、そのソフトが古くマルチコア非対応なので、CPUをCore7にする等、どんなに処理スピードに優れたCPUを用いてもスピードアップはほとんど期待できないらしいです。 ですが、処理に時間を喰ってる事が作業のネックになってるのが現状で、こういう状況でも処理を速くできる方法はないか知りたく質問させて戴いた次第です。 今思いつく解決方法はスクリプトを効率的に書き直し、処理数をなるべく少なめにして目的の処理ができる事をするしかないと思います。

回答No.4

IT業界とは無縁の者です。少しばかりVBA、C、Javaが書ける素人ですが・・・。  商社の一万人規模のソフト部門やNECが作成したオフコンの某データ処理プログラムの所要時間が90秒でした。ところが、私が作成した全く同じ処理プログラムの所要時間は、僅かに0.001秒。CPU=35MZというPCでも、このような高速化を実現できました。 >メモリに対象データを格納してHDDを介さず・・・  こういう高度な処理は、ズブの素人の私にできる芸当ではありません。可能なのは、高速化のアイデアを捻ることのみ。 ・一体どうしたら、ファイルアクセスを高速化できるのか? ・一体どうしたら、データの検索・比較というプロセスを追放できるのか?  商社やNEC等が作成したアプリケーションの共通項は、ファイルアクセスの遅さとデータの検索・比較処理の存在でした。それを忠実にPCで実現したら一件当たりの処理時間は25分でした。これで、<所要時間が90秒>というのが相当な高速処理だと知ることができました。「ゲーッ!」と困り果てた私は、「待てよ!」と。そこで、ファイルアクセスの高速化について調査。加えて、データの検索・比較というプロセスの追放の可能性を考察。結果、僅かに0.001秒という高速化に成功しました。  やったことは、誰でも可能なそれです。Cの低レベルのファイルアクセスを利用する。加えて、データの検索・比較を追放するに足る設計の構造体変数にデータを代入しBSave()関数で保存。処理によって呼び出すべき変数を定義したパターンマッチファイルを用意して、それに基づきBLoad()で構造体変数を読み込む。たった、これだけのことです。  さて、こういう話を交わすには、使用言語が明らかであること。データ構造が明らかであること。処理内容が明らかであること。かと、思います。  以上の3つは補足されたが良いと思います。

cs4f18df
質問者

補足

回答ありがとうございます。 皆様のご意見を参照する以前に、以下説明をする必要がある事に気付きました。 自分のやってる処理は、あるソフトウェアでC言語に似た独自の言語でプログラミングしたスクリプトを稼働させテキスト処理を行うものです。 おそらくそのソフトに処理を高速化する為の機能は特にないと思います、インメモリの設定もできないと思います。 なのでソフトに頼らず自分のスクリプトオンリーで処理するなら、皆様のご回答通りの解決策ができるかもしれませんが、作業上、このソフトを使う事が必要不可欠です。 しかも、そのソフトが古くマルチコア非対応なので、CPUをCore7にする等、どんなに処理スピードに優れたCPUを用いてもスピードアップはほとんど期待できないらしいです。 ですが、処理に時間を喰ってる事が作業のネックになってるのが現状で、こういう状況でも処理を速くできる方法はないか知りたく質問させて戴いた次第です。 今思いつく解決方法はスクリプトを効率的に書き直し、処理数をなるべく少なめにして目的の処理ができる事をするしかないと思います。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

何がボトルネックとなって時間がかかっているのか、が不明では、対策も答えようがありません。 ・メインメモリは、意識しなくても勝手に使われています。 個人向けとかそうでないとかは関係ありません。 100GB超のメモリを積んで、となると、個人向けとは言えないかもしれませんが。 ・ファイルの読み書きに時間が掛っているのなら、一旦メモリに読み込んで、メモリ内のアクセス中心にして、ファイルアクセスを減らすことで速度向上が期待できます。 が、計算そのものに時間が掛っているのなら、読み書きはそれほど影響しません。 ・タスクマネージャー等で確認したときに、CPUコア毎の負荷が特定のコアに集中しているようなら、それを各コアに分散して並列に処理することで、高速できる可能性があります。 ただ、順番に処理しないとならない場合は、並列化の恩恵はあまりありません。 ・他にも、画面表示とかイベント待ちとか、いろんな原因があります。 例えば、その処理がExcelのマクロなら、次の方法で画面表示変更を止めるだけで、劇的に早くなります。 https://sites.google.com/site/compositiosystemae/home/vbaworld/primitive/exp1/stopredrow

cs4f18df
質問者

補足

回答ありがとうございます。 皆様のご意見を参照する以前に、以下説明をする必要がある事に気付きました。 自分のやってる処理は、あるソフトウェアでC言語に似た独自の言語でプログラミングしたスクリプトを稼働させテキスト処理を行うものです。 おそらくそのソフトに処理を高速化する為の機能は特にないと思います、インメモリの設定もできないと思います。 なのでソフトに頼らず自分のスクリプトオンリーで処理するなら、皆様のご回答通りの解決策ができるかもしれませんが、作業上、このソフトを使う事が必要不可欠です。 しかも、そのソフトが古くマルチコア非対応なので、CPUをCore7にする等、どんなに処理スピードに優れたCPUを用いてもスピードアップはほとんど期待できないらしいです。 ですが、処理に時間を喰ってる事が作業のネックになってるのが現状で、こういう状況でも処理を速くできる方法はないか知りたく質問させて戴いた次第です。 今思いつく解決方法はスクリプトを効率的に書き直し、処理数をなるべく少なめにして目的の処理ができる事をするしかないと思います。

  • ninoue
  • ベストアンサー率52% (1288/2437)
回答No.2

同じく処理データの種類やデータ量等をお知らせください。 最近の普通のノートパソコンでは64bit OSで8GB主記憶程度迄は拡張できるようです。 パソコンの仕様を確認して下さい。 4GBの増設メモリが5000円前後で入手出来るようです。 その他には現状のプログラムでディスクアクセスの制限が無ければどの程度まで高速化出来る予定でしょうか。 タスクマネージャのCPU使用率等はどのようになっているでしょうか。 USB接続或いはSerial ATA接続のSSDにディスクのデータを移されるのも良いのではないでしょうか。 128GB-512GBで2-7万円程度のようです。 http://kakaku.com/pc/ssd/itemlist.aspx?pdf_Spec301=128-256 もちろんプログラムも変更してインメモリ処理されるのが一番良いとは思われますが、データ量や予算等次第でしょうね。

cs4f18df
質問者

補足

回答ありがとうございます。 皆様のご意見を参照する以前に、以下説明をする必要がある事に気付きました。 自分のやってる処理は、あるソフトウェアでC言語に似た独自の言語でプログラミングしたスクリプトを稼働させテキスト処理を行うものです。 おそらくそのソフトに処理を高速化する為の機能は特にないと思います、インメモリの設定もできないと思います。 なのでソフトに頼らず自分のスクリプトオンリーで処理するなら、皆様のご回答通りの解決策ができるかもしれませんが、作業上、このソフトを使う事が必要不可欠です。 しかも、そのソフトが古くマルチコア非対応なので、CPUをCore7にする等、どんなに処理スピードに優れたCPUを用いてもスピードアップはほとんど期待できないらしいです。 ですが、処理に時間を喰ってる事が作業のネックになってるのが現状で、こういう状況でも処理を速くできる方法はないか知りたく質問させて戴いた次第です。 今思いつく解決方法はスクリプトを効率的に書き直し、処理数をなるべく少なめにして目的の処理ができる事をするしかないと思います。

  • IDii24
  • ベストアンサー率24% (1597/6506)
回答No.1

膨大と書かれている量がよくわかりません。しかも形式もわかりません。画像なのか、動画なのか、テキストなのかです。 これらがわからなければ答えることができません。

cs4f18df
質問者

補足

説明不足で済みません。 データはテキストで形式はTXT、容量は200MBくらいです。 それを一行一行読込んでいくので時間が掛かります。 改めて宜しくお願いします。

関連するQ&A