pypy.com/

Python、Unity、FX自動化などを勉強しています。あと、コーラと車も好きです。そこらへんについて、たまに記事を書きます。

Unityで並列処理(cpu)をしてみた

こんにちは。

今回はUnityでCPUを使った並列処理をやっていきたいと思います。

わざわざCPUを使ったって書いているのは、前回の記事で、GPUを使った並列処理をやったからです。

興味のある方は、以下のリンクから、前回の記事を見ることができます。

UnityでGPUを使って並列処理をしてみた(GPGPU) - pypy.com/

前回はGPUを使ってやっていますが、むしろCPUを使うことのほうが多いと思いますし、CPUのほうが使いやすいので、今回の記事を書こうと思いました。

それではやっていきます。



書いていく

CPUを使った並列処理の場合は、GPUの時のように、前準備がいりません。

強いて言うなら、初っ端にusing System.Threading.Tasks; を入れるのを忘れないようにするくらいです。

コード自体はGPUを使うときと、ほぼ同じように書きます。

以下のような感じです。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Threading.Tasks;

public class test : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        int[] array = new int[100];
        Parallel.For(0, 100, i =>
        {
            array[i] = i;
        });
        
        for(int i = 0; i < 100; i++)
        {
            Debug.Log(array[i]);
        }
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

見てもらえばわかりますが、普通のfor文とほぼ同じような感覚で使えます。

一応、適当なゲームオブジェクトにアタッチして、実行してみると以下のようになりました。

ちゃんと動いているのがわかります。

f:id:SaidaTaisei:20200414201421p:plain

ただ、Unity特有の機能(レイキャストなど)は並列処理の中では、使えません(コンパイルは通っても、実際に動かす時にエラーが出ます)。

そうはいっても、普通の計算処理なんかは、シングルスレッドでやる場合よりもそれなりに速くなるので、なんか遅いなって感じるときに使ってみるといいと思います。

ということで、今回はUnityでCPUを使って並列処理をする方法について書いてみました。

機会があったら、CPUのシングルスレッドとマルチスレッド、GPUの並列処理による計算時間の違いなんかも見ていきたいと思います。