Blenderの物理シミュやレンダリングはメモリ速度やRyzen X3Dの影響を受けるか

# はじめに
タイトルの通りです。
自身がBlenderのCloth Simulationを多用する為、環境作りの為に検証しました。
BlenderのClothシミュレーションやレンダリングに
メモリの転送速度やAMD Ryzen X3Dの影響を受けるか確認していきます。
特にFCLK=MEMCLOCK、FCLK=MEMCLOCK/2、どちらの方が早いのかなど
自身も気になる部分があったので参考になればと思います。

# 先に結論が知りたい人まとめ
・ゲームバーの「これをゲームとして記憶する」はBlenderに影響しない
・メモリの転送速度はレンダリング、物理シミュ共に速度へ影響しない
・FCLK=MEMCLOCK、FCLK=MEMCLOCK/2どちらも差はほぼない(※)
・CPU+グラボでレンダリングする場合X3Dモードのままでも問題無い
・CCDが二つある場合はCCD0のスレッドを指定する事で物理シミュ速度が少し改善する
　※Blender以外の性能だと処理内容にもよるが
　DDR8000CL40(1:2)とDDR6000CL26(1:1)はほぼ同等感

# 検証環境
OS: Windows 11 （24H2）
CPU: AMD Ryzen 9 9950X3D
MEM1: G.SKILL Trident Z5 Neo 32GBx2 (F5-6000J2636G32GX2-TZ5NRW)
DDR6000(1:1) CL26-36-36-96 EXPO ON
DDR4800(1:1) CL40-40-40-77 EXPO OFF
MEM2: G.SKILL Trident Z5 Neo 24GBx2 (F5-8000J4048G24GX2-TZ5NR)
DDR8000(1:2) CL40-48-48-128 EXPO ON
DDR5600(1:1) CL46-45-45-90 EXPO OFF
M/B: MSI MPG X870E Carbon WIFI
GPU: NVIDIA Geforce RTX4070
SSD: ADATA LEGEND 970 PRO SLEG-970P-2TCI-DP (Gen5)

Blender 4.4

CPUとメモリはOCしてます。具体的な設定は以下の通りです。
記載の無い項目はAUTOです。

CPU
    PBO+200
    CurveOptimizer CCD0 -15 CCD1 -23
    CurveShaper MedFreq~MaxFreq -7
    ThermalLimit 95

MEM
    EXPO有効
    メモリタイミングAUTO
    DRAM Volt 1.650
    VDDQ Volt 1.400
    CPU VDDIO 1.400

M/B
    BaseClock 101.0
    FCLK 2000
    

# X3Dモード、ゲーム指定、スレッド指定について
X3Dモードとは各マザーベンダーから提供されている
X3Dキャッシュの載っている半分のコア(CCD0)のみで動作させるモードで、
BIOSレベルで設定をして全てのプログラムに影響が出ます。

ゲーム指定についてはWin＋Gキーで出てくるゲームバーで
「これをゲームとして記憶する」にチェックを入れるとCCD0に処理が集中する様になるはずですが、
Blenderをゲームバーからゲームとして指定しても全てのコアが使用される様です。

またBlenderの起動オプションでスレッド数を指定出来ますが、スレッド番号は指定出来ません。
ですが下記のようにcmdで実行すればスレッド番号を指定出来る事が出来ますのでこれも試して行きます。
```Cmd: 0～15スレッド(8コア)のみで処理させる(9950X3D/7950X3D)
cmd /c start "" /affinity FFFF blender.exe
```
```Cmd: 0～11スレッド(6コア)のみで処理させる(9900X3D)
cmd /c start "" /affinity FFF blender.exe
```
※9800X3DはCCD0のみなので指定する必要ありません。

# ベンチについて
#### 物理演算
重めのClothシミュレーションをバックグラウンドモードでベイクします。

自前のスクリプトで時間を計測していきます。
https://qiita.com/niuind/items/548ee3a63558f4f1b004
ベンチサンプル
https://niuind.com/t/physics_bench_20250330_1.blend

#### レンダリング
Blenderサンプルでよく使われるClassroomのレンダリング時間を確認しました。

# ベンチ結果
スコアは１～３秒前後の揺れがありますが概ね下記の様になりました。
![スクリーンショット 2025-03-31 174637.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/802449/89b4b007-d9e9-4afb-9bec-66b8953fc460.png)


# 考察
#### X3Dモードについて
強制8コアのX3Dモードを使用すると処理速度が悪化しているのが分かります。
Blenderを使用するにあたってX3Dモードは避けた方がいいと思いますが、
CPU＋GPUでレンダリングするだけならばX3Dモード中でも差し支えない様です。

#### ゲームバー制御について
Blenderはゲームバーで「これをゲームとして記憶する」
にチェックを入れても全く影響無い事が分かりました。
実際のCPU負荷もバラバラにかかっていました。

#### メモリ速度について
これは想定外だったのですがメモリの転送速度は全く影響が無い事分かりました。
物理シミュレーションに多少影響出ると思っていたのですが全く影響無い様です。
なので物理シミュレーションの処理速度を上げようとすると
単純にCPUクロックを上げるしか無さそうです。
FlipFluidsなど流体シミュで数十GBメモリに格納する様な
超ヘビーな処理であれば変わるかもしれません。

### スレッド指定について
これは確認して初めて分かったのですが、16コアを使用出来る状態で
cmdのオプションでCCD0（スレッド0～15）を指定するのがベストな様です。
恐らくCCDまたぎの処理が減る為、効率的な処理が出来ているのだと推測されます。
ただ追検証した所あまり変化が無いケースや若干パフォーマンスが落ちる例もありました。
今回の検証は参考程度に留めご自身の環境で確認されるのを推奨します。
スレッド指定はBlenderを起動してからタスクマネージャの関係の設定で操作出来るほか、
下記の様にメモ帳に１行書いてblender.exeの場所を指定すれば
使用スレッドを指定して起動する事が出来ます。
```cmd: blender.bat
cmd /c start "" /affinity FFFF "C:\blender\4.4.0\blender.exe"
```

# レンダリングについて
CPUのみでレンダリングする人はあまりいないと思うのでCPU+GPUでレンダリングする場合、
メモリ転送速度やコア数やスレッド数の影響はほぼ無い事が分かりました。

これは余談ですがレンダリングの早さは
早い　CPU+OPTIX ＞ CPU+CUDA ＞ CPUのみ　遅い
で間違い無いですが、エラーの出にくさ（特にVRAM回り）は
安定　CPUのみ ＞ CPU+CUDA ＞ CPU+OPTIX　不安定
です。VRAMの少ないビデオカードはCUDAのが安定したりします。

# 検証を終えて
物理シミュレーションの速度を特に気にしていたので意外な結果となりました。
Blenderで物理シミュ速度を重視する場合CPUクロックを重視するべきだと思います。