• 締切済み

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

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

みんなの回答

  • ki073
  • ベストアンサー率77% (491/634)
回答No.15

No.7,12です。 少し気になるところを、 >別の質問掲示板で私の使ってるソフトを使用してる人がマルチコア非対応なのでCore i7のPCでも速くならなかったと書かれてたのを読みました。 普通コンパイルしただけでは、マルチコア対応になりません。マルチコア対応するには、市販のコンパイラ(インテルやPGIなど)では自動並列化オプションがあり並列化可能であれば並列化(いわゆるマルチコア対応)してくれます。しかし並列化ができるようにプログラムの構造をしていないと原理的にできません。無料で使えるようなものだとopenMPなどで手動で並列化を指示していきますが、これをミスると正しい答えがでません(エラーもでない)ので、ミスを防ぐために私自身は市販のコンパイラで自動並列化に対応した書き方をしています。 C言語の場合は、ポインターの場合はrestrictを適切に使うと最適化がうまく行く場合があります。またconstも効果があります。ポイターよりも配列の方が高速になりやすい傾向がありますが、でもプログラムの書き方が一番影響します。 >プロンプトでの処理 という言葉がたびたび出てきますが、何を指しているのでしょうか? C言語など一般的なプログラミング言語に書き換えができるのでしたら、まずプロファイラを使って時間がかかる処理を特定するのが一番最初にやる作業です。足を引っ張っている部分はプログラム全体から見るとほんの少しですので、そこだけを高速化すれば良いのです。

cs4f18df
質問者

補足

回答、情報提供どうもありがとうございます。 紹介された市販のコンパイラですが数万くらいしますね。 openMPは無料なのでどんなものか試してみました。 gccコンパイラをインストールして以下プログラムで #include <stdio.h> #include <omp.h> int main() { int i; #pragma omp parallel { #pragma omp for for(i=0;i<300;i++)printf("(%d) Hello, Mercurium!\n",i); } return 0; } 並列処理を実行し、次にopenMP(#include <omp.h>)を外し普通の実行もしてみましたが全然速くなった感じはしませんでした。 また以下の様な手順でコマンドでプロファイラ出力を試してみましたが 、コマンドの入力も間違ってないと思うのに not in executable format というメッセージが出てできませんでした。 1.以下コマンド入力 gcc -pg -o abc abc.c 2.abc.exeを実行する。 3.以下コマンド入力 ./abc 4.以下コマンド入力 gprof gmon.out

  • SortaNerd
  • ベストアンサー率43% (1185/2748)
回答No.14

処理対象を分割する事はできませんか? できるなら複数同時に走らせれば速くなるでしょう。 そうでなければプログラムを新規開発する以外に方法は思いつきません。

cs4f18df
質問者

補足

回答、情報提供どうもありがとうございます。 返答が遅れてすいません。 分割はまず無理だと思います、計算の仕方が複雑な構造なので、対象データ全体を計算しないと正しい結果を出す事は難しい気がします。 回答を拝見した後、ソフトウェアで時間の掛かる処理だけならプロンプトでの実行でどうにかならないかという方法を思い立ちボーランドC++をインストールして膨大データの処理のスクリプトを作成、コンパイルして試してみましたが、プロンプトでの処理だとソフトウェアより遥かに時間が掛かってしまってます。 プロンプトでC言語を動かす事は久しぶりで、あまり満足にプログラミングはできてませんが、高速処理をプログラミングで実現できる事を試して行こうと思います。 なので今度はプロンプトでのC言語スクリプトをいかに高速的に実行させれるかが問題になってきます。

noname#214300
noname#214300
回答No.13

演算に使っているプログラム自体をいじれないのならば、PCの環境で速くするしかありません。 インメモリだのは、プログラム自体を書き換える(新規作成する)必要があり解決方法になりえません。 (たったの200MB程度なら、ほぼインメモリで動いているような気がしますが) 他の方もちらっと書かれていますが、以下の施策が現実的でしょう。 ・以下のスペックのPCを用意してください。 CPU Core i7-4790K メモリ 16GB マザー Z97チップセットのもので、オーバークロックが簡単に出来る機能を持ったもの CPUクーラー とりあえずよく冷えるものを OS Windows7 64bit ・PCはネットから切り離し、ウィルス対策系のソフト等余計な物は一切入れないでください。 ・OS上にRAMDISK(10GB程度)を構築し、ソースファイルやテンポラリファイルを全てRAMDISK上においてください。 ・冷房をよく効かせた部屋で、4.5GHz程度までCPUをオーバークロックします。 (ケースの側面を開けて、扇風機で冷気をたくさん当てると良いでしょう) ・この状態で計算を行います。 Core i7-4790Kは単発スレッドでもほぼ最速で動きますから、これ以外の選択肢はあり得ません。 ディスクIOでどの程度足を引っ張っているか分かりませんが、おまじない程度でRAMDISKを利用します。 (ある程度メモリの多い環境では数GB程度はキャッシュメモリにデータを置くため、200MB程度でHDDがガリガリ言い続けることはあり得ません) これ以上はプログラム自体を書き換えなければならないので、実現方法はありません。

cs4f18df
質問者

補足

回答、情報提供どうもありがとうございます。 返答が遅れてすいません。 ちなみに自身のはCore5、メモリ4GBですが言われた通りの環境にすると金も掛かり大変ですね、それよりメモリのボトルネックより4GBのメモリの幅を満足に活かせない気がします。 別の質問掲示板で私の使ってるソフトを使用してる人がマルチコア非対応なのでCore i7のPCでも速くならなかったと書かれてたのを読みました。 回答を拝見した後、ソフトウェアで時間の掛かる処理だけならプロンプトでの実行でどうにかならないかという方法を思い立ちボーランドC++をインストールして膨大データの処理のスクリプトを作成、コンパイルして試してみましたが、プロンプトでの処理だとソフトウェアより遥かに時間が掛かってしまってます。 プロンプトでC言語を動かす事は久しぶりで、あまり満足にプログラミングはできてませんが、高速処理をプログラミングで実現できる事を試して行こうと思います。 なので今度はプロンプトでのC言語スクリプトをいかに高速的に実行させれるかが問題になってきます。

  • ki073
  • ベストアンサー率77% (491/634)
回答No.12

No.7です。 補足欄からは全体像が見えないのですが、 数値計算のようなプログラムなのか、データベースのようなテキスト処理しているプログラムなのかも見えてきません。どちらなのでしょうか?それとも全く別の種類のものなのか?? あくまでも直感なのですが、ファイル自体の読み込みが遅いというよりは、それを処理する部分が遅いのだと思うのですが、 その場合には、そのプログラム言語のコンパイラの新しいのが存在すればコンパイルし直せば多少は速くなるかも知れませんが、2倍も速くなれば上出来でしょう。時々スクリプトと書かれているので、インタープリタで動く様なものなのでしょうか? いずれにしても、ある程度は書き直さないと難しいような印象を持ちます。 「プログラムのコアな部分」は書き換えられないという印象ですが、前処理を分離可能ならそこを分離して速度を稼ぐのも手ですが、「プログラムのコアな部分」の実行時間が長いのでしたらほとんど効果は期待できないです。

cs4f18df
質問者

補足

回答、情報提供どうもありがとうございます。 返答が遅れてすいません。 問題のデータ処理ですが、数値だらけのデータを読込み膨大量の計算してその結果を出力するものです。 ソフト用の独自言語でコンパイルして実行させてます。 回答を拝見した後、ソフトウェアで時間の掛かる処理だけならプロンプトでの実行でどうにかならないかという方法を思い立ちボーランドC++をインストールして膨大データの処理のスクリプトを作成、コンパイルして試してみましたが、プロンプトでの処理だとソフトウェアより遥かに時間が掛かってしまってます。 プロンプトでC言語を動かす事は久しぶりで、あまり満足にプログラミングはできてませんが、高速処理をプログラミングで実現できる事を試して行こうと思います。 なので今度はプロンプトでのC言語スクリプトをいかに高速的に実行させれるかが問題になってきます。

  • mk48a
  • ベストアンサー率56% (1133/2007)
回答No.11

とりあえずファイルの入力がボトルネックになっているようであれば、RAMディスクを使ってみると少しは速くなるかも。 テキストファイルをRAMディスク上に置くとファイルI/Oが速くなります。 RamPhantomEX http://www.iodata.jp/product/soft/speed/ramphantomex/ 200MBくらいだったら体験版で作成できるので確認してみても損はないかと。 手間もそんなにかからないし。 言語自体の処理能力の問題だったとすると特殊なものらしいので、地道にいろいろ試してみるしか方法は無いかと思います。

cs4f18df
質問者

補足

回答、情報提供どうもありがとうございます。 返答が遅れてすいません。 マザーボートを弄る事なくソフトのみでRAMが実現できる事は驚きです。 その後、ソフトウェアで時間の掛かる処理だけならプロンプトでの実行でどうにかならないかという方法を思い立ちボーランドC++をインストールして膨大データの処理のテストを試してみましたが、プロンプトでの処理だとソフトウェアより遥かに時間が掛かってしまってます。

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

そういう大事なことは最初に言ってくれないと 計算が遅いなら、速いプログラムを別の言語で作って、計算結果だけ読み込ませる、とかできませんか? 読み込みが遅いなら、テキスト以外の速く読める形式に変換することはできませんか?

cs4f18df
質問者

補足

ご回答ありがとうございます。 大事な事は最初に言うべきでした、すいません。 処理を速くしたければ言われる通り、そのソフトを使わずスクリプトオンリーで稼働させる必要がありますね。 そうして計算結果だけを取得する方法も思いつきます。 ですが作業上、目的のデータを正確に得るには、そのソフトを使う事が必要不可欠なのが現状です。 なんだかスクリプトの処理速度を上げるより、ソフトの問題になってしまいますね。 そのソフトは処理速度が遅いですが、現状それに代わるソフトは存在しません。 ソフトの問題なので、ソフトは処理速度の上げ方についての質問をいくつか知恵袋で見つけましたが、やはりスクリプトを効率的に書き直す他なさそうです。

  • wormhole
  • ベストアンサー率28% (1621/5657)
回答No.9

まず処理のどの部分がネックになっているかを調べる必要があるのではないでしょうか。 それをしない事には効率的な処理にする事などできませんし。 最悪、アルゴリズムから考え直さないといけない可能性もありますが。 ただ、そのスクリプトの処理系(ランタイム)がそもそも遅いとかいう場合はどうしようもないです。

cs4f18df
質問者

補足

ご回答ありがとうございます。 稼働させるソフトは自分で作ったものではないので、ネックと言えば先に回答された方への補足で書いたとおりそのソフトが古くマルチコアに対処してないという事です。 結局はスクリプトを効率的に書き直して、余計な処理を外しスピード上げるしかないかなと思います。 皆様のおっしゃられる通りの方法で処理速度を上げたければ、そのソフトを使わずスクリプトオンリーで処理する方法しかないと考えられますが、作業上、このソフトを使わないとできません。

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

C#でDatasetに読み込めば全てメモリ展開なんですけどね。その後はテーブルを焼くなり煮るなり出来るのし、クエリもかけられますし。メモリ上でリレーションも張ることも可能。データーベースもいりませんよ。結果は他のデーターセットに入れればそこからテキストで吐き出すのも早いですしね。XMLが一番早いですけど。 C#はMSのサイトから無料でダウンロードできますし。

cs4f18df
質問者

補足

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

  • ki073
  • ベストアンサー率77% (491/634)
回答No.7

普段はGBクラスのテキストデータの一部を切り出してそれを読み込むことよくやっているのですが、 全部を読み込むということですよね。 あくまでもテキストファイルを数値データとして読み込んだ場合ですが、 質問さんと同程度の(CPUが1.6GHzなので低いかも)パソコンで200MBの数値が並んだファイルを全部読み込んでみました。 よく使っているソフトで試してみた結果、 Rで1分程度 Scilabは結構早くて10秒 Rubyで数値として読み込む簡単なプログラムで1分程度 でした。 Rubyでもテキストとして読み込むだけでしたら1秒以下ですので、数値化に時間がかかっているものと思われます。 読み込んだ後計算させても一瞬ですので、難しい計算をしない限りこの程度の時間で読み込めるということです。 まさかエクセルで読み込んでいるのではないですよね。

cs4f18df
質問者

補足

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

  • mk48a
  • ベストアンサー率56% (1133/2007)
回答No.6

>データはテキストで形式はTXT、容量は200MBくらいです。 別に膨大というほどの量ではないです。 適切にプログラムすればインメモリ(データベース?)とか使わなくても普通にメモリ上に保持できる容量です。 >それを一行一行読込んでいくので時間が掛かります。 言語は何でしょうか? あと、プログラムの改変は可能でしょうか? この文だけだと1行ごとにファイルをopen,closeしているように受け取れますが、それだと時間がかかるのもわかります。 改変が可能であればファイルを一度に読み込んで、メモリ内で処理するするように変更して(もらって)ください。

cs4f18df
質問者

補足

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

関連するQ&A

  • どのパソコンが、大量のデータ処理に向いていますか?

    今度、新しいデスクトップパソコンを購入します。 目的は、「膨大な量のデータを処理すること」です。 で、新旧のパソコンのスペックは次の通りです。 ◇旧パソコン・・・CPU 2.93GHz    メモリ 0.99GB  HDD 320GB ◇新パソコン・・・CPU 2.66GHz     メモリ 4GB   HDD 1TB 処理するのは、全て、数字データです。 どちらが、膨大な数字データの処理に向いていますか? 「CPUが大きいパソコンとメモリが大きいパソコン、どれが向いているのか?」と、迷っています。

  • VBAで高速にデータを処理するコツを教えてください

    いつもお世話になっております。 VBAのことで教えて欲しいことがあります。 EXCEL2000 VBAであるデータを処理するコードを作っています。 データ数は1万行×5列×6シート=30万です。 処理する際のパラメータの違いから、この30万個のデータをfor文を使って繰り返し処理します。 繰り返し回数は20万回です。 一回の処理に1秒かかるとすると1秒×20万回なので、2~3日かかります。 このデータを処理する速度の向上を考えています。 L1キャッシュ→L2キャッシュ→メインメモリ→HDD の順に処理速度(アクセス速度?)が遅くなると調べて分かりました。 30万個のデータを配列(メインメモリ?)に格納する方法は下記のようにすればいいと分かりました。 Dim myData as Variant myData = Worksheets("myData").range("A1:E10000") myDataから1行1列目のデータを取り出すのはmyData(1,1)でできると言うことも分かりました。 そこで質問です。 1.コードの記述により、メインメモリよりも高速なL1キャッシュ、L2キャッシュを意識して使うことはできるのでしょうか。 処理している間ずっと30万個のデータをL1,L2キャッシュに格納しておけば、メインメモリに格納しておくよりも高速に処理ができると単純に考えました。 2.私のPCはVista、Core2Quad Q9450、4GB DRAMです。 VBAでは4つのコアをすべて使って実行すること(CPU使用率100%)はできないと聞きました。 上記の処理を実行する時、1つのコアで処理させるのがいいのか、複数のコアで処理させるのがいいのか、プロセスの優先度はどうすべきか、など、コードの記述以外の方法で処理速度を上げる方法はあるのでしょうか。 3.処理速度を向上させるコツなどありますでしょうか。 4.VBA以外の言語なら4つのコアをフルパワーで使えるよ、というのがありましたら教えてください。 (C言語はそれに該当するというのは聞きました。) よろしくお願いいたします。

  • ネットワークを用いたPC処理高速化

    ネットワークを用いて、他のPCのCPUやメモリを間借りし処理を高速化する技術、サービスはありますか?もし存在するなら利用したいです。 そもそも技術的に可能ですか?

  • CPUが同じならばXPのほうが高速処理?

    ・CPUが インテル(R) Core(TM) 2 Duo プロセッサー E6750 (4MB L2 キャッシュ、2.66GHz、1333MHz FSB) ・メモリーが 2GB(1GB x2) デュアルチャネル DDR2-SDRAMメモリ で同じならば OSはVistaよりXPを選んだほうがより高速処理になるのでしょうか? Vistaですとメモリーは1GBが推奨ですが、XPで512MBです、ですから単純に考えるとXPではより高品質なメモリーを搭載した事になり、高速処理になるのでしょうか? よって、あえてXPを選ぶという手もありでしょうか?

  • PCの高速化とHDDについて

    質問は二つあります。 一つ目は、ちょっとスペックの高いPCを一週間前ぐらいに買ったのですが、だんだんレスポンス等が遅くなってのが気になり始めました。 いろいろなHPを見ていても、低スペック向けの高速化などしか載ってないので、ちょっとハイスペックなPCにできる高速化の方法を教えてください。 特にメモリが4GBあるので、それをフルに使いたいなと思っているのですが… 二つ目は、HDDの増設についてです。 PCは「ガリレアJD」を使っているのですが、下のほうに3.5インチのスペースが一つありそこに増設をしようと思っています。 そこで思ったのですが、HDDの温度は大丈夫でしょうか? 一つの時のHDDの温度は45度ほどです。二つも重ねて入れても大丈夫なのでしょうか? PCのスペックも書いておきます。 [ケース]ガリレアJD [OS]Windows Vista [CPU]Core2 Duo E8400 [メモリ]4GB よろしくお願いします。

  • ノートパソコンの処理速度を早くするには?

    NECのVersa Pro VY16AW-1を中古で購入しました。 メモリは1GBですが、HDDは40GBしかありません。 内蔵HDDを交換すると、処理速度は上がるのでしょうか? ちなみにCPUはCore Duo1,66GBで、会計ソフトが使用目的です。

  • macの処理速度を上げたい

    グラフィックデザインの仕事をしています。 データの重いPhotoshop(700MB~2GBほど)や、Illustratorのデータを扱う際に、 よくPCがフリーズしたり、保存に時間(20分程)がかかったりするので、 なんとか、macのパフォーマンスを改善したいと考えています。 しかし、メモリを上げるべきなのか、CPUをグレードアップするべきなのか、 そもそもCPUは交換できるものなのか、それとも買い換えるべきなのか… 最適な方法がわからず困っています。 ▼今使っているmacの環境です。 本体:iMac CPU:3.06GHz Intel Core 2 Duo メモリ:4GB 1067 MHz DDR3(2GB×2) そこで、質問なのですが、 (1)PhotoshopやIllustratorの処理速度に大きく関わるのは、 CPUですか?メモリですか?それとも別のものですか? (2)MacのCPUの交換について検索したところ、 交換できないかもしれない、認識されない、などの記事を見かけました。 CPUの交換にはリスクがあるのかなぁと感じています。 もしCPUの交換をするのなら、いっそ最新のCorei7搭載のmacに買いかえた方が賢い選択でしょうか? (3)HDDからSSDに交換するのは、効果がありますか? (4)CPUやメモリ、HDD・SSDの違いは測定して数字として表すことは可能ですか? というのも、CPUやメモリをグレードアップすれば、どのくらいスピードが上がるかというのを、上司に説明して納得してもらう必要あるので、体感的な感想ではなく、数値で説明できるような資料があればなと思っています。そいうのが掲載されているサイトってあるんでしょうか? 以上です。 わかる方いらっしゃいましたら、ご回答頂けますでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • Mac
  • 高速処理の方法

    Ultrabook UH55/HのSSD高速処理は普通にOSをHDDにインストールでこうすく処理が自動的に行うのですか、高速処理のための設定方法等がありましたらご案内ください。

  • CPUとメモリの働き 画像処理に適したPC

    CPUとメモリの働き 画像処理に適したPC Photoshopやイラストレーターを使って画像処理をしたいのですが、 core i3でメモリー16GBのPCと Celeron G540でメモリー32GBのPC、どちらが適しているでしょうか。 どちらも64bitOSです。 CPUはi3>Celeron で メモリは 16GB<32GBです。 また、CPUの働き、メモリの働き(それぞれを変えると何が変わるか)を 教えてください。

  • 画像処理に特化したPCはどんな構成でしょうか?

    一眼デジタルの現像(印刷ではなく画像処理)の早いPCはどんな構成のPCでしょうか? rawファイル(一枚25~30Mbyte)くらいです。 現在はCPU CORE2 DUO6700    メモリ 3G    HDD   7200回転 3.5インチ    OS   XP SP2 です。 使っている感じでは結構遅くて、反映に時間がかかります。 HDDのアクセス時間が足を引っ張っているように思います。 まったく新しいPCを買うとして(自作可能)とすると、 HDDをSDDにする以外に何か高速化する方法はあるでしょうか? またハードとは別に使い方として、 RAM上のみで処理するようなことは可能でしょうか? ほかにも早くする方法があれば教えてほしいです。 処理する画像は