簡単！マルチスレッドとGPGPUを非プログラマ向けに説明する

「プログラマじゃない人にもわかりやすい解説」を目標にしています。
分かりやすさとイメージを重視するため、正確じゃないことを書いています。ご理解ください。

#マルチスレッドとGPGPU
![character_program_fast (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597581/e3a66712-ca62-7700-4338-f9e974666055.png)![速い2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597581/0d38cae0-ca62-8c96-efc0-a184312de025.png)


どちらもプログラムを高速に動かすための方法です。

今回は話題になった「AIプログラムが手塚治虫の漫画を描く」というのを元に説明しようと思います。

#マルチスレッドとは

マルチスレッドとは、プログラム処理を分散させることを言います。

例えばAIが**マンガを３ページ描くのに12時間**かかるとします。
![internet_screenshot_computer - コピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597581/b70f504e-11ea-66ff-b5d7-75880c18de3d.png)![12時間.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597581/93b9c8b3-d53f-4b34-596e-7b819cc87d72.png)

これではかなり時間がかかってしまいます。
そこで**3台のPC**を用意して、**1台に1ページ描かせる**ことにしました。
![internet_screenshot_computer - コピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597581/0e2193a5-e883-5783-611c-9d8f9c138360.png)![internet_screenshot_computer - コピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597581/c63776c4-dd6e-2037-1dee-58fcae651853.png)![internet_screenshot_computer - コピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597581/5b04d467-1b83-3dd1-eb08-8d875fffc3ee.png)![4時間.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597581/6a12805c-666a-272f-af36-c19dd0d37434.png)

合計で12時間ですが、実際にかかる時間は4時間になります。
マンガを描く処理を分散させた分、PC1台で処理をするよりもかなり早くなりました。


ただし実際にはPCを3台用意する必要はありません。
PCには**「CPU」**と呼ばれる機械があり、**1台のPCで処理を分散させる**ことが可能です。

![internet_screenshot_computer - コピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597581/58e29dea-3253-1db1-e5bd-076dda22cc72.png)![computer_cpu_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597581/bb0c49f9-c906-3d7b-c296-4478d6f46a6d.png)![computer_cpu_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597581/118c856b-f2f4-342d-1af5-b2d06cf7e405.png)![computer_cpu_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597581/f30e9348-e4b9-7928-8b83-9c0d1d5d5b98.png)![4時間.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597581/08629017-54d4-9a24-9de6-4214f4b42658.png)

「CPU」を3つ用意することでPC3台と同じ性能にすることができます。
こういった分散処理のことを**「マルチスレッド」**と言います。

#CPUの弱点
マンガのページをたくさん、高速に描くためには、たくさんのCPUに処理を分散させれば良いように見えます。
しかし1台のPCにあるCPUは、多くても10個や20個しかありません。

そのため、一気に1000ページを描くための方法はないか？
ということで編み出されたのが「GPGPU」という方法です。

#GPGPU
PCには**「GPU」**という機械があります。
このGPUはなんと、1つで1000個の処理を分散することができる凄い機械なんです！
![computer_graphic_card.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597581/74a115b6-5e31-3c4f-5b6d-4c301d5f5c53.png)![1000個の分散処理.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597581/6fa15929-1fd5-f17d-2289-bc4b9ccdf7ca.png)

1000個に分散できるので、一気に1000ページも作れてしまいます！
それどころか、1000個も分散できるなら、1コマずつ描く描くことも可能ですね。

1ページに10コマあった場合、1ページ4時間かかっていた処理が24分で完了します！

![24分.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597581/0f453377-2fe1-3d84-d374-fa4e339ba539.png)

元々が12時間だったことを考えると、マルチスレッドやGPGPUって凄く高速になりますよね。

#終わりに
マルチスレッドとGPGPU、どちらも便利さが伝わったでしょうか。

どちらも凄く便利なのですが、現状では弱点もあります。

・専門性が高い（扱える人材が少ない）
・分散しやすいものにしか使えない

特にGPGPUは3Dプログラムのコアな知識が必要で、
まだまだ世に広まっていないと感じます。