• 締切済み

パソコンの処理についての質問です

C言語で画像処理のプログラムを作成し実行したところ、一向に終わらないので、タスクマネージャで処理に使用しているCPUコアを調べてみたところ、コアが複数あるにも関わらず1つのコアでのみ処理を行っていて、時折別のコアに処理が全て移動している状態でした。 この状態から、全てのコアで同時に処理を行わせて処理速度を向上させることは出来ないのでしょうか? 質問がわかりにくいかもしれませんがよろしくお願いします。 スペックはwindows8 Intel(R)Core(TM)i7 CPU@3.85GHzでメモリは8GBです。

みんなの回答

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.5

他の回答者の方々も書かれていますがマルチスレッドなりマルチプロセスなりで動作するようにプログラムを組む必要があります。また処理の内容によってはマルチスレッドやマルチプロセスにしても意味がない場合もあります(シーケンシャルに処理する必要があるものなど)。 で、一向に終わらないのは無限ループになってるとかそういうことはありませんか?

  • yakan9
  • ベストアンサー率54% (2247/4134)
回答No.4

> この状態から、全てのコアで同時に処理を行わせて処理速度を向上させることは出来ないのでしょうか? できないと思いますよ。 マルチタスク処理用にプログラムを作る必要があることをまず理解してください。 マルチタスク処理とは、並行処理ともよく言います。 スーパーコンピュータを効率よく処理するために、並行処理を利用します。 分かりやすくいえば、同じような式が10個あり、全てを解いた後、10個の答えから、また問題を解いていくといった複雑な処理過程を想像してください。 この10個の問題を解かせるのを並行処理せよという指令を出すようにプログラムを作らないとだめということです。 一般のプログラムは、10個の式を並べ、解けた答えのa~jの変数で再度式を組み立てて問題を解かせます。 この10個式を並べた後、これらは並行処理してよいという指令を出し、10個全ての答えが出揃うまで完了待ち合わせという処置をしないといけません。 一般には、シリアルユーザブルルーチンでプログラミングされています。 これは、CPU一台で順序良く処理していくことです。 OSのマルチタスク処理では、並行処理をかけられるように、タスク完了待ち合わせキューを作り、リエントラントルーチンにより制御できるような特殊なプログラム技術を使います。 分かりやすく言えば、各仕事毎にCPUを割り当てられるようにしておき、終り次第、その後処理をして、次の仕事にとりかかるといったことです。 よって、CPUが多いほど独立した処理を同時にやっていけ、全体的に効率よく仕事を処理できることになります。 これに準じた手法を導入し、完了待ち合わせの手法を取り入れたプログラムを作ることです。 コンピュータをある程度理解しておく必要がある技術を使います。

  • bardfish
  • ベストアンサー率28% (5029/17766)
回答No.3

処理を複数のコアに分散させて処理効率をあげるためにはそういうコーディングをする必要があります。 あなたが書いたコードを見ていないのでなんとも言えませんが、マルチコア対応にするためには一から書きなおしになるでしょう。 使用しているコンパイラもわかんないし… フリー版を使っているとしたらマルチスレッドはダメかもしんないし。

回答No.2

Intel(R)Core(TM)i7 CPU@3.85GHz そんなCPUがあるのでしょうか、ソフト開発するのにオーバークロックは?? >一向に終わらないので ブレークポイントは設定しないのでしょうか? マルチスレッド用にプログラムが記述されているのでしょうか? http://www.ncad.co.jp/~komata/c-kouza28.htm

回答No.1

マルチスレッドで処理をするようにプログラムは作ってあるの?

関連するQ&A

専門家に質問してみよう