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

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

ただいまの
回答率

89.20%

CPUとGPU(グラボ)について

解決済

回答 2

投稿 編集

  • 評価 0
  • クリップ 0
  • VIEW 1,369

tuyudaku

score 59

プログラミングに関しての質問ではないため
もしこの手の質問がガイドラインなどに違反している場合すぐに削除させていただきます
調べた限り大丈夫だと思って質問させてもらってはいるのですが...

GPUなどのことについて調べていたら
以下の質問サイトを発見しました。

https://oshiete.goo.ne.jp/qa/10595206.html
すこし長いため、時間がある時に見てくれると嬉しいです

個人的には質問している人と回答している人
どちらも間違ったことは言っていないのかな?と思ったのですが

おそらくOBSの中では1コアで処理している。残り3コアが遊んでいるのではないでしょうか?
と、答えたなら貴方は詳しい人だったと思います。
しかも1コア目はスト5も共有している、そこにOBSも1コア目の残りの余力で何とかしたがっているんです。

それが処理落ちの原因です。それが20%以上いかない20FPSでとまっている理由なんです。

この文章なのですが
確かに、それならCPU使用率が20%以上行かない理由にはなるのかなと思ったのですが
でもそんな極端な話なのでしょうか?
回答している人も書いていたのですが、OSってそんなに頭悪いのでしょうか?
そもそも使用するコアの指定は誰が行っているのでしょうか?

OSだと思っていたのですが
たまにネットで「マルチコアに最適化されていない」というようなことを見ます
そうすると、アプリケーションが使用コアを指定してる?と思ってしまったのですが
流石にそれはないか...と思います

わがままを言うと
この質問サイトに書いてあること、何が正しくて何が間違っているのかを知りたいのですが..w
疑問に思ったのは、CPUとグラボは何の処理をどのように分担しているのかということです
それを知りたくていろいろ調べたのですが
「映像はグラボ」というようなざっくりとしたものしか見つからず
もう少し詳しい説明を知りたいです。参考になるサイトや書籍を知っている方
また説明できる方がいらっしゃいましたらよろしくお願いします。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    上記に当てはまらず、質問内容が明確になっていない質問には「」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+5

件の20FPS以上行かないのはWindows7のAEROをオンにしているとロックされるという質問が英語のフォーラムで出てますね。原因はこれではないですか?

https://obsproject.com/forum/threads/locked-at-20fps.2910/

コアの指定はアプリから可能ですよ、アフィニティを設定することで。
SetProcessAffinityMaskでググってみてください。
ただ、今回の事とは関係ないとは思います。

最適化されていないというのは、マルチスレッドプログラムになっていないということでしょう。
DirectX11まではGPUへの命令はメインスレッドに限定的でした。DirectX12からは
マルチスレッドで可能になりました。
それ以外にもCPUのでやるべき仕事は多いです。

CPUはゲームプログラムを実際に処理しています。ユーザーからの入力を受け付けたり、それに基づいてGPUに送る描画用のコマンドを用意したり、テクスチャ画像を用意したり、GPUに転送したり、音楽やSEを用意したり、サウンドカード/チップに送ったり、通信を受け付けたり、送信したり。このあたりの処理をマルチスレッドに最適化できてないと、全部メインスレッドで処理することになります。これをマルチスレッドに最適化されてないといいます。

GPUはCPUからの命令をもとに実際に画面に表示しています。CPUから送られてくるキャラクタの頂点データとか位置、角度とかの情報から、画面上に表示するために計算しています。

投稿

Sugano

score 18

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • tuyudaku

    tuyudaku

    2018/07/11 11:46

    >原因はこれではないですか?
    なるほど、確かにこれの可能性は高いですね
    ただ、録画の解像度を下げたらちゃんと撮れたみたいなのですが
    AeroとフルHDだと重いということなのでしょうかね

    >SetProcessAffinityMaskでググってみてください。
    なるほど、こんなことも出来るのですね
    勉強になります!

    >DirectX11まではGPUへの命令はメインスレッドに限定的でした。DirectX12からは
    >マルチスレッドで可能になりました。
    なるほど、それはVisual Studioでメインスレッド以外からコントロールの操作が出来ないと
    同じ様なことなのでしょうかね(的外れなこといっていたらすみません..)

    意外とGPUの仕事の種類は少ないのですね
    ただ、その量が膨大だからコア数が多く並行処理が高速なのですね

    流石にキャプチャソフトがマルチスレッドに最適化されていないとも思えないので
    質問サイトの質問している人の主張が若干ずれている気が...

    とても参考になりました!ありがとうございます!

checkベストアンサー

+2

リンク先を見てみましたが、質問者がひどすぎですね。間違いと知らずに見当違いのことをあまりに自信満々で語っているので、回答者さんが弱気になってしまっています。情報量が少ないので的確に回答できないのは仕方のないことです。

まぁ、それはさておき、

確かに、それならCPU使用率が20%以上行かない理由にはなるのかなと思ったのですが
でもそんな極端な話なのでしょうか?
回答している人も書いていたのですが、OSってそんなに頭悪いのでしょうか?

あれはリンク先の質問者がそう思い込んでいるだけで、実際のところ、完全な間違いです。

リンク先の質問者は、CPU使用率が20%ということでコア1個だけを使っていると思い込んでいるようですが、実際のところ、複数の論理CPUで動作しているはずです。OBSは知らなかったのですが、ダウンロードして試してみたところ、録画中はすべての論理CPUの使用率が上がっていました(ソフトウェアエンコード時)。割と綺麗に負荷分散されているように見えます。エンコードをソフトウェア(x264)とハードウェア(NVENC = GPU使用)で比較しましたが、x264だとCPU使用率が20%台から時々30%超えですが、NVENCだと最大でも1.2%でした。
すでに答えが出た気が……(リンク先の回答者さんもそう言っているのに、質問者はあり得ないとか言い切ってるし)。

そもそも使用するコアの指定は誰が行っているのでしょうか? 

当然OSが適切に割り振っています。
Suganoさんが書かれているように、アプリが自前で制御することも可能ではありますが、パフォーマンス向上が目的で自前制御することは、まずないと思います。下手にやるとかえってパフォーマンス低下につながる可能性があるからです。そのため、そうしなければ困るよほどの理由がない限り、OSに任せるのが一番です。

疑問に思ったのは、CPUとグラボは何の処理をどのように分担しているのかということです

リンク先の質問者は「GPUはポリゴンを貼るだけ」という認識のようですが、それも完全な間違いです。そもそも「ポリゴンを貼る」が何を意味しているのかもよく判りません(座標計算を否定しちゃってますし)。
実際には3D処理に関わる多くの演算をGPUで行っています。一番判りやすいのは座標計算でしょうか。表示対象となる何十体ものオブジェクトのポリゴンデータをあらかじめGPU側のメモリに用意しておき、それらの何十万もの頂点座標一つ一つに対して座標変換(ローカル座標→ワールド座標→ビュー座標→プロジェクション座標→スクリーン座標)を行い、画面のピクセル位置に対応づけます。
また、GPUは画像処理以外の計算にも使えます。GPGPUで検索するといろいろ出てきますよ。GPUの得意分野とか。
前述の通り、動画のエンコードでは大活躍してくれます。

投稿

catsforepaw

score 5819

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • tuyudaku

    tuyudaku

    2018/07/17 17:38

    返事が遅れてしまい申し訳ありません

    >あれはリンク先の質問者がそう思い込んでいるだけで、実際のところ、完全な間違いです。
    ですよね!そんなにCPUの使い方が雑だとは思えなかったので分かったよかったです!

    >x264だとCPU使用率が20%台から時々30%超えですが、NVENCだと最大でも1.2%でした。
    やはり、CPU側の負荷を減らすといった点ではハードウェアエンコードが一番ですよね
    結局、質問者さんはハードウェアエンコードは行わずに
    PC画面のミラーリングとやらをやって実現(画質落としている時点で実現といえるかは疑問ですが)したみたいですが、これに関しても何のことかよく分かりませんが
    結局は負荷を減らしているだけのような気がしますから、だったらNVENCを使えば...って気がします...

    >実際には3D処理に関わる多くの演算をGPUで行っています。
    やはり、3D処理において多大な貢献をしていますよね
    というかそのためのパーツだから当たり前ですよね...w

    >GPGPUで検索するといろいろ出てきますよ。GPUの得意分野とか。
    なるほど!早速検索して勉強してみます!

    とても参考になりました!
    回答ありがとうございます!

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

  • ただいまの回答率 89.20%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる