質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
アセンブリ言語

アセンブリ言語とは、機械語を人間にわかりやすい形で記述した低水準言語です。

CUDA

CUDAは並列計算プラットフォームであり、Nvidia GPU(Graphics Processing Units)向けのプログラミングモデルです。CUDAは様々なプログラミング言語、ライブラリ、APIを通してNvidiaにインターフェイスを提供します。

CPU

CPUは、コンピュータの中心となる処理装置(プロセッサ)で中央処理装置とも呼ばれています。プログラム演算や数値計算、その他の演算ユニットをコントロール。スマホやPCによって内蔵されているCPUは異なりますが、処理性能が早いほど良いとされています。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

3回答

2330閲覧

GPUと並列処理を行うCPUでの処理速度について。

carnage0216

総合スコア194

アセンブリ言語

アセンブリ言語とは、機械語を人間にわかりやすい形で記述した低水準言語です。

CUDA

CUDAは並列計算プラットフォームであり、Nvidia GPU(Graphics Processing Units)向けのプログラミングモデルです。CUDAは様々なプログラミング言語、ライブラリ、APIを通してNvidiaにインターフェイスを提供します。

CPU

CPUは、コンピュータの中心となる処理装置(プロセッサ)で中央処理装置とも呼ばれています。プログラム演算や数値計算、その他の演算ユニットをコントロール。スマホやPCによって内蔵されているCPUは異なりますが、処理性能が早いほど良いとされています。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/04/02 03:11

編集2018/04/02 03:21

好奇心ゆえの質問なので怒られてしまうかもしれませんが答えて頂けるとありがたいです。

gpuと並列処理を行うcpuの処理速度は画像処理と機械学習においてどちらが速いですか?
gpuはc/c++でプログラムが書いてありcpuはc/c++とアセンブリ言語または、全てアセンブリ言語で書いてあるとします。

また、仮にcpuの処理速度が遅い場合、cpuはgpuのように画像処理の物体検出は滑らかにできるでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

episteme

2018/04/02 03:13

すまんが日本語で頼む。
carnage0216

2018/04/02 03:23 編集

すいません。何かわけのわからない事を書いてしまいました。しかし、何が間違っているのかわかりません。 ご指摘頂けないでしょうか。
episteme

2018/04/02 03:26

どっちが速いもなにも、物差しが揃ってないものを比べようがない。"並行処理を行うCPU"て何よ? 物理スレッドいくつ起こせるのよ? 並列化率をどのくらいと見積もってんのよ? CUDAで動くOpenCVとっととビルドしなよ。そしたら少なくとも画像処理に関しては両者が比較できるでしょ。
carnage0216

2018/04/02 03:30

おっしゃる通りであります。質問の修正を致します。ビルドに関してはもうそろそろできます。今外出しておりまして夕方には帰宅できます。
YomogiKOBO

2018/04/02 03:34

画像処理は、光学技術をベースにした話なのか?CMOSセンサーは並列処理してたのか?
YomogiKOBO

2018/04/02 03:35

機械学習と指している範囲は、行動心理学、統計学?、人間工学?
episteme

2018/04/02 03:37

で、フツーに考えてCPUが速かったらNVIDIAがこんなに儲かってるわけなくね?
YomogiKOBO

2018/04/02 03:41

っとと。機械学習のどの点を基準に速さも計測するのかな??別にGPUを使わずとも・・
carnage0216

2018/04/02 03:43

機械学習の範囲は行動心理と人間工学(深くは知りません)です。GPUと言えど不得意な処理もあるためCPUが速い場合もあるのではないかと思いました。
episteme

2018/04/02 03:50 編集

↑ 「...かもしれない」以外、僕は答えを持ち合わせていません。
carnage0216

2018/04/02 03:48

行動心理において、学習させて予測させる事がしたいと考えています。
YomogiKOBO

2018/04/02 04:06

マルチコアにしたところで、画像処理は処理の端点となるものと求めるものが題材としてあげやすい(二値化、顔認証、測距など)、一方機械学習は学習させるものによって取り扱い範囲、処理量も異なってくる。どうやって速さの基準点がもとまるのか。そこを教えてくれ。
carnage0216

2018/04/02 04:22

CPUの方で0.01s単位で顔認証ならば顔がスムーズに検出出来たり、行動予測においても相手が次にどのような行動をとるかの予測が0.1s後あるいは0.01s後にわかるのであればよいです。なので、顔認証での基準は0.01sで相手が次にどのような行動をとるかの予測の基準は0.1sあるいは0.01sです。わかりにくくて申し訳ありません。
y_waiwai

2018/04/02 05:00

またおまえか案件やねーw
YomogiKOBO

2018/04/02 07:16

えっ。測定結果ありきの速度比較なの?、機械学習って書いていて学習速度ではなく学習済みなの?
YomogiKOBO

2018/04/02 07:18

速度測定はどういゆう条件設定(OS、画像数、HD画像?4K画像?)なのか情報追記お願いします。
carnage0216

2018/04/02 07:19

情報が少なすぎました。改めて編集いたします。
YomogiKOBO

2018/04/02 07:41

顔認証速度の記載があったけど、計測環境は閲覧者で自作しろってことですか?
guest

回答3

0

もう解決済みですが。

GPUとCPUの処理速度を議論するには、3点について理解している必要があります。

  1. GPUとは何か
  2. IO律速と演算律速
  3. 並列計算について

  1. まずGPUをCPUと比較した場合ですが、GPUは大量に演算コアのある計算装置です。

CPUでは一般向けだと最近では6~8コアなども出ていますが、その程度のコアの数です。
これに対して、例えばコンシューマ向けで最高ランクまで行くとGTX1080Tiでは3584コア持っています。
これだけ演算を並列に行うことによってCPUよりも大幅にflopsを向上させることができます。
その差はこちらのwikipediaでご覧にいただけますが、
https://ja.wikipedia.org/wiki/FLOPS
GPUは、最高性能のCPUに対して2倍以上、普段使いのCPUに対して10倍ほどの性能が出ます(理論値)。
演算するコアが多いことがGPUの強みです。

  1. それで次に考えねばならないのが行いたい計算がIO律速か演算律速かです。

なぜならGPUが速いのはコアがたくさんあって演算が速いのです。
これに対して、IO律速のプログラムを実行しても、速度の向上は全く期待できません。
GPUが有利なのは演算律速の場合です。
http://www.r-ccs.riken.jp/aicssite/wp-content/uploads/2017/05/tokuronA_17_5_katagiri.pdf
※一応IOというのはInput/Outputの略でデータの読み込み書き込みのことです。

  1. これとは別に並列計算の実行可能性についても十分考慮しなければなりません。

よくある例えは次のようなものです。
7分でオムレツを考えた場合、100個のオムレツを作るのにかかる時間はいくらかというものです。
100個のフライパンとコンロを用意すれば7分で出来上がります。
これが理想的な並列化です。
これに対して7分で作られるべきオムレツを作るのに7個のフライパンとコンロを用意しても1分で出来上がるわけではありません。
このような並列不可能な部分も存在します。
GPUで高速化できるのは前者のような並列化可能な計算だけです。
http://www.toffee.jp/streaming/gpgpu/gpgpu_basic/2015/gpgpu_basic08.pdf
https://matome.naver.jp/odai/2138974716185798201


ではよくある計算のうちで典型的な並列計算が得意とするものは何かということですが、
それは行列行列積と高速フーリエ変換などです。
高速フーリエ変換について
https://ie.u-ryukyu.ac.jp/k118589/2012/01/21/cuda-fft-vs-cpu-fft-using-tesla-c2050/
行列行列積(BLAS3)
https://news.mynavi.jp/article/20160125-nvidia/

CUDAを使うのならcuBLASというライブラリをご存知かと思います。

投稿2018/04/02 13:01

mkgrei

総合スコア8560

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

こんにちは。

gpuと並列処理を行うcpuの処理速度は画像処理と機械学習においてどちらが速いですか?

両方とも使うのがベストです。GPUは原理的に多量の単純処理が得意でしょう。CPUはGPUより複雑な処理を担えます。
ですので、基本的にはCPUで処理し、その内GPUに任せた方が高速化できるだろう処理をGPUに任せるのが妥当です。
つまり、もしも、GPUに任せた結果、全体の処理性能が落ちたなら、それは単なる設計ミスです。
従って、ご提示のような比較は意味がありません。

具体的にどんな処理ならGPUに任せた方が全体の性能が上がるのか?については、ごめんなさい。私はGPUへ処理分割した経験がないため、把握していません。
しかし、特定の処理について「GPU化することで高速化に成功した」のような報告は、恐らく学術論文で発表されるようなレベルだろうと思います。

投稿2018/04/02 04:48

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

carnage0216

2018/04/02 04:54

貴重なご意見どうもありがとうございます。 情報系の大学の論文を探してみます。
gm300

2018/04/02 07:29

>しかし、特定の処理について「GPU化することで高速化に成功した」のような報告は、恐らく学術論文で発表されるようなレベルだろうと思います。  NvidiaのGDCの発表を見ましょう。革ジャンのNvidiaの社長自らそういった例をガンガン説明してくれます。見ていて楽しいです。
carnage0216

2018/04/02 07:31

どうもありがとうございます。ようつべで探してみます。
carnage0216

2018/04/06 04:57

ちなみにGPUを使いこなすにもCPUのマルチプロセスを実装したりアルゴリズムや原理を学ぶことは役に立つと思うのですが、Chironianさんはどう思いますでしょうか?
carnage0216

2018/04/06 04:58

役に立つならばラズパイ3bで実装したり勉強したいと思います。C/C++の勉強も踏まえて。
episteme

2018/04/06 05:02

GPUとCPUのマルチスレッドはそのからくりがぜーんぜん違うんスよー。
carnage0216

2018/04/06 05:04

では、CPUの並列処理のアルゴリズムを勉強しても意味が無そうです。
Chironian

2018/04/06 07:35

carnage0216さん > ちなみにGPUを使いこなすにもCPUのマルチプロセスを実装したりアルゴリズムや原理を学ぶことは役に立つと思うのですが まずは普通にシングル・スレッド、次にマルチスレッド、そしてマルチコア(GPU)のステップを踏まないと厳しいかも知れませんね。そして、GPUはキャッシュやバス・アービトレーション云々のようなかなりハードウェアに近い部分の学習も必要になると思います。上から下まで全部カバーできる人って天才だろうと思います。そうでない人が手を出すと、全て中途半端で役に立たない人に成り下がる可能性を懸念します。 > 個人的にはCPUを並列化してもGPUに勝ち目はないように思えます。 回答にも書きましたように、ある意味当たり前ですが、CPUよりGPUの方が得意な処理は存在します(そうでなければそもそもGPUの存在意義がない)。 ですので、そのような処理はGPUに任せると性能は改善する筈ですよ。 そして、GPUに任せると効率が劣化するような処理をGPUに任せたら、やはり当たり前ですが性能は劣化します。 議論するまでもないと思います。適材適所はいつでも大事です。 議論するなら「どんな処理をGPUに任せたほうが良いのか?」などでしょう。 回答にも記載した通り、私はその議論には参加できませんが。
carnage0216

2018/04/06 07:50

>>シングル・スレッド、次にマルチスレッド、そしてマルチコア(GPU)のステップを踏まないと厳しいかも知れませんね。 天才云々より努力します。 アドバイスありがとうございます。
carnage0216

2018/04/06 07:52

>>GPUはキャッシュやバス・アービトレーション云々のようなかなりハードウェアに近い部分の学習も必要になると思います 楽しそうで、勉強するのが楽しみです。 ちなみに、上から下とはソフトからハードという意味ですか?
Chironian

2018/04/06 08:15

その通りです。GPUの性能をバリバリ引き出せ、かつ、アプリをバリバリ作れるような人は天才と思います。
carnage0216

2018/04/06 08:49

スティーブウォズニアックのような天才ですね。
carnage0216

2018/04/06 10:17

ⅭとC++の基礎を勉強した後でOPENCVなどいずれ解読したいと考えているのですが、OPENCVの関数の構造を理解して(OSに触れない程度に)どの関数とつながっているのかなどを細かく調べていき標準関数 (ⅭとC++の基礎に出てきた関数)が見えてくるまで掘り下げるのでしょうか? 標準関数がどのように働いて画像処理など行っているかなど深く理解したいと考えています。
guest

0

既に回答されている方と同じような回答に近いですが、
GPUと機械学習との組み合わせは相性が良いと思います。相性といっているのは、GPUの多数の演算ユニットへ分散処理させる環境が整っています(CUDA.とか)。当然CPUでも分散処理が可能ですが、CPU数が多くノードをまたいだクラスターレベルの分散には新たな環境設定が必要です。
特に機械学習時の逆伝搬を演算する再には時間管理がしやすいGPUが力を発揮します。

一方 画像処理は、得意不得意があります。ご存知レンダリングなどの浮動小数点演算はGPUが圧倒的にちからを発揮します。既にこれらのパワーを使ったLib&環境がたくさん出ています。しかし、画像処理において、条件を入れる・処理が細かく分解できない場合などは各CPUに処理をさせた方が早いです(SIFT処理など)。CPUにはメモリBuffが備わっているが通常なので、画像を一定の大きさで分割しここで一時的に蓄える事により複雑な条件処理を分散して処理する事が可能です。

皆さんプログラムの内容に従い、上手く使い分けて使用されているようです。

投稿2018/04/02 07:54

kuma1957

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kuma1957

2018/04/02 10:29

言い方を変えれば想定ほど大きな効果がないと考えています。負荷が大きいのは浮動小数点演算で8方向のベクトルを見て数値化してゆくところだと思います。OpenCVの中でどのようしているかは不明ですが、プリミティブな実装を教科書通りしていれば各点ごとの演算になります。まとめて各点のベクトルを演算をする方向でGPUの性能をフルに使っても、いずれも各点の判定に戻るはずです。以前似たような、画像演算をした事がありました。がGPUを使た場合と、画像を分離して分散処理し合成しなおした場合の方が効果があった記憶がありましたので今回の例に掲載しました。SIFTの言葉がひっかりるのであれば、SIFTの部分は取り下げます。
mkgrei

2018/04/02 14:21

kuma1957さん、コメントをありがとうございます。 実装にだいぶ依存するのですね。 上記で調べたリンクではトータルとして2~3倍程度の速度アップなので、GPUなしの実装を最適化することによって差はより縮まりそうです。 処理したい画像のサイズによっても変わりそうですね。 GPUでそれなりに高速化できるFFTですが、配列のサイズをメモリにのらないように大きくすると… https://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=6&cad=rja&uact=8&ved=0ahUKEwi29Ii14pvaAhXHUZQKHX5BATMQFghiMAU&url=https%3A%2F%2Fipsj.ixsq.nii.ac.jp%2Fej%2F%3Faction%3Drepository_action_common_download%26item_id%3D18188%26item_no%3D1%26attribute_id%3D1%26file_no%3D1&usg=AOvVaw1E6c4AjK6tTm5pH7u0TEA3 …計算できなくなります。 CPUの方が「はやい」ことの例でしたので、アルゴリズム的に自明なことではなく実装と実測によってわかるということを確認したかった、というのが上記の私のコメントの意図でした。 速いことは保証できませんが、早いことは間違いなさそうですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問