コミュニティアイコン プチコン 非公式コミュニティ プレイ日記

アバター
Ryou Tanpo ◆AI5iRr9FjmkJ
2018/1/5 7:58
あまりやる機会ないけど、
配列の各要素に固定の数値を加算する場合に
ARYOP #AOPADD より速い方法を見つけました

コメント

アバター
Ryou Tanpo 2018/1/5 9:32 ◆AI5iRr9FjmkJ
BGLOAD の内蔵ヘルプ2ページ目にあるキャラ番号オフセットの引数を使うと簡単にできます。
アバター
Ryou Tanpo 2018/1/5 9:36 ◆AI5iRr9FjmkJ
ある配列 200000 個の要素すべてに 10 を足す処理を 30 回繰り返すのを
3つの方法で繰り返したのにかかった時間。数値は全てミリ秒

(1) FOR ループ
30回トータル : 23266
1回あたりの平均 : 775.533

(2) ARYOP #AOPADD
30回トータル : 509
1回あたりの平均 : 16.967

(3) BGLOAD
30回トータル : 416
1回あたりの平均 : 13.867

配列の大量の要素に固定の数値を足すならば
BGLOAD 、 ARYOP よりも速い
アバター
みなつ 2018/1/5 10:23 ◆hJTkStjweib1
おおおおおお、しゅごい@@;
アバター
Ryou Tanpo 2018/1/5 16:43 ◆AI5iRr9FjmkJ
入力配列 A
出力配列 B

(1) FOR ループ : 解説しなくてもわかりますね。自前で各要素に順番に 10 足していきます。
FOR I=0 TO LEN(A)-1
B[I]=A[I]+10
END

(2) ARYOP : 高度サウンドユニットで追加された命令です。配列の一括演算をめっちゃ高速にできます。配列だけじゃなくて数値も指定できるのでそれを使ってます
ARYOP #AOPADD,B,A,10
アバター
Ryou Tanpo 2018/1/5 16:49 ◆AI5iRr9FjmkJ
(3) BGLOAD : BGLOAD は配列のデータを BG のキャラ番号として BG に一括配置できる命令です。書式は
BGLOAD レイヤー,[左上X,左上Y,幅,高さ,]配列[,キャラ番号オフセット]
この最後の引数がポイントです。ここに数値を指定すると、そのぶん配列の各要素に足されてから配置されます。
使っていない適当なレイヤー番号を LAYER に入れておいて
W=LEN(A):H=1
BGSCREEN LAYER,W,H
BGLOAD LAYER,0,0,W,H,A,10
BGSAVE LAYER,0,0,W,H,B
でできます。
ソースコードに誤りがありましたらご報告ください
アバター
しんいち 2018/1/5 23:55 ◆lHy.hAWXbthn
発想が面白いですね(^o^)
BGLOADを使うということは、配列要素は16383(128*128-1)個まで、扱える数値は0〜4095(BGキャラ番号)の範囲、ということになるのかな。
それに収まるのであれば、ARYOP #AOPADD(#AOPSUBもいけるか)の代わりに使えそうですね(何より高度サウンドユニット必要ないのが良い)。
アバター
Ryou Tanpo 2018/1/6 2:44 ◆AI5iRr9FjmkJ
> しんいちさん
そうですね。使える機会はかなり限られてきそうですね〜
発見したはいいけど、誰が使うんだろう(笑)
アバター
こういち 2018/1/6 13:16 ◆ou0jbJnEJ0Kb
配列の初期化に使えそうですね。
そこそこ大きな数で初期化したり
負↔正として扱って
1で初期化したり

コメントを書く

この投稿にはコメントできません。

- WEB PATIO -