Размер видео: 1280 X 720853 X 480640 X 360
Показать панель управления
Автовоспроизведение
Автоповтор
マイコンで%演算は遅そうなので、バッファ長を2^nにしてビット演算にしたいですね〜
やるやる。割り込み部分だけアセンブラで書いたりしたもんだ
バッファ長の指定や制限が無ければそうしたいですよね。
最近授業でやってるようなところで面白い(情報学部生)
この技法は、ゲームを作る際にはよく使われており、というのは定かではありませんが、ゲーミングプログラムにおいては覚えておいたほうがいい技法なのです。使いどころとしましては、キーボード、マウス、ジョイスティックの入力部分でしょうかね。入力イベントはいつ発生するのかわかりませんので、イベント発生時にバッファにセットしてheadを動かし、1/60秒ごとに動くループの中で、それまでのイベントを取り出してtailを動かす、といったところですねぇ。特にマウスは、秒間8000回ものイベントを出すアホみたいな機種もありますので、そんなマウスで各座標を取り込む気なら、そのバッファサイズも注意が必要だったりするのです。
どんなレイヤーにおいてもパフォーマンスを意識することは大事ですからね。
プロセス間で共有するリンクバッファのindex更新でバグあってやばかった思い出
Head, tailは逆のパターンが多い気がするHeadが読み出しで、tailが書き込み
非常に良い
SHとかH8で組んでた時はそんな風にしてたかな。けど割算器が無いcpuでは%は使いたくないですね。高速化を狙ってるとバッファ長の折り返しに条件分岐を使うのが嫌だったので、カウンタにマスク掛けたり、バッファ長を256にしてuint8で数えたりしました。けど、コンパイル後にアセンブラを見ても大した事が無かったので、途中で飽きちゃった。Arduino始めた時にSHのソースを移植したけど、Arduinoは内部でシリアルをバッファリングしてる感じがしたので、面倒なループはやめて単純にしちゃいました。割り込みレベルとかソフト割り込みが使えないっぽいしコンパイラも何だか不気味なので、昔みたく凝ってもメリットが全然無さそうなので簡単に済ましてます。
キューを実装する時にリングバッファを使うのは、決して組み込みに限らない話のような気がします。バッファを越えたら次のバッファを確保、とはしたくありませんし、かと言って取り出す度にデータを移動するなんて言語道断。組み込みのリングバッファとの違いは「バッファが一杯になったらバッファを増やせる」くらい?
カーネルが持ってるIO用のキューとかもリングバッファですもんね
C++やC#の標準ライブラリのキューも拡張可能なリングバッファですね。
プログラミングやったことないんで当てずっぽうなんですけど、LISPってこういう処理得意だったりするんですかね。
カメラの画像取込でも使いますね🥺
CD焼いてた世代はバッファアンダーランエラーでおなじみ
基本情報技術者試験を思い出します
最近のシリアル通信チップってよくバッファ機能まで内蔵してくれてるけどさ、あれ、待機パケットを『ちょっとだけ弄る』が出来ないせいで結局ビットバングすることになったり、逆に不便になる場面多くないですか?なんか余計なお世話って印象がさぁ…💢
6:52 Unityのシェーダースクリプト書くとき、if文使うとバカ重くなるから無理やり三項演算子使ってたの思い出した
三項演算子ってif文のエイリアスだと思ってたんですけどUnityでは違うんですか?!ブロックを生成しない、ってことなのか…?そしてシェーダースクリプトってCPUでコンパイルしてGPU処理するもの、って認識で合ってます?じゃあ、コンパイル時点で0/1との積算に書き換えている…?Unityに興味があるので気になります!もしよかったら教えて欲しいです!!
私もこれ,昔聞いたことがあって三項演算子を使ってました...でも技術的根拠isどこ...?( ´∀` )
そんな遅いマイコン今時使うか?
組み込み系わからないんですが…。客「あれもしたい!これもしたい!もっとしたい!もっともっとしたい~♪処理速度には余裕がある~♪」プログラマー「ハードにミスがある~♪ソフトで逃げれないかだと!想定外なバグがある~♪対応で行数が増える!」結果としてカツカツに……。あると思います。
6:15 モジュロ演算で%はあめえ(H/Wで除算サポートしてないなら)&でマスク取った方が早い(ぇ7:44 よく「読込側はメインtaskだから割り込み禁止しましょう」って見るけど、このリングバッファはFIFOだから割込禁止しなくても(仮にどのタイミングでプリエンプティブな書込割込が入ったとしても)基本的に影響無いとボクは思うんだいずれにしても聞き齧りでそのまま動画にするのやめようぜ
マイコンで%演算は遅そうなので、バッファ長を2^nにしてビット演算にしたいですね〜
やるやる。割り込み部分だけアセンブラで書いたりしたもんだ
バッファ長の指定や制限が無ければそうしたいですよね。
最近授業でやってるようなところで面白い
(情報学部生)
この技法は、ゲームを作る際にはよく使われており、というのは定かではありませんが、ゲーミングプログラムにおいては覚えておいたほうがいい技法なのです。
使いどころとしましては、キーボード、マウス、ジョイスティックの入力部分でしょうかね。
入力イベントはいつ発生するのかわかりませんので、イベント発生時にバッファにセットしてheadを動かし、1/60秒ごとに動くループの中で、それまでのイベントを取り出してtailを動かす、といったところですねぇ。
特にマウスは、秒間8000回ものイベントを出すアホみたいな機種もありますので、そんなマウスで各座標を取り込む気なら、そのバッファサイズも注意が必要だったりするのです。
どんなレイヤーにおいてもパフォーマンスを意識することは大事ですからね。
プロセス間で共有するリンクバッファのindex更新でバグあってやばかった思い出
Head, tailは逆のパターンが多い気がする
Headが読み出しで、tailが書き込み
非常に良い
SHとかH8で組んでた時はそんな風にしてたかな。けど割算器が無いcpuでは%は使いたくないですね。
高速化を狙ってるとバッファ長の折り返しに条件分岐を使うのが嫌だったので、カウンタにマスク掛けたり、バッファ長を256にしてuint8で数えたりしました。けど、コンパイル後にアセンブラを見ても大した事が無かったので、途中で飽きちゃった。
Arduino始めた時にSHのソースを移植したけど、Arduinoは内部でシリアルをバッファリングしてる感じがしたので、面倒なループはやめて単純にしちゃいました。割り込みレベルとかソフト割り込みが使えないっぽいしコンパイラも何だか不気味なので、昔みたく凝ってもメリットが全然無さそうなので簡単に済ましてます。
キューを実装する時にリングバッファを使うのは、決して組み込みに限らない話のような気がします。バッファを越えたら次のバッファを確保、とはしたくありませんし、かと言って取り出す度にデータを移動するなんて言語道断。組み込みのリングバッファとの違いは「バッファが一杯になったらバッファを増やせる」くらい?
カーネルが持ってるIO用のキューとかもリングバッファですもんね
C++やC#の標準ライブラリのキューも拡張可能なリングバッファですね。
プログラミングやったことないんで当てずっぽうなんですけど、LISPってこういう処理得意だったりするんですかね。
カメラの画像取込でも使いますね🥺
CD焼いてた世代はバッファアンダーランエラーでおなじみ
基本情報技術者試験を思い出します
最近のシリアル通信チップってよくバッファ機能まで内蔵してくれてるけどさ、あれ、待機パケットを『ちょっとだけ弄る』が出来ないせいで結局ビットバングすることになったり、逆に不便になる場面多くないですか?なんか余計なお世話って印象がさぁ…💢
6:52 Unityのシェーダースクリプト書くとき、if文使うとバカ重くなるから無理やり三項演算子使ってたの思い出した
三項演算子ってif文のエイリアスだと思ってたんですけどUnityでは違うんですか?!
ブロックを生成しない、ってことなのか…?
そしてシェーダースクリプトってCPUでコンパイルしてGPU処理するもの、って認識で合ってます?じゃあ、コンパイル時点で0/1との積算に書き換えている…?
Unityに興味があるので気になります!もしよかったら教えて欲しいです!!
私もこれ,昔聞いたことがあって三項演算子を使ってました...
でも技術的根拠isどこ...?( ´∀` )
そんな遅いマイコン今時使うか?
組み込み系わからないんですが…。
客「あれもしたい!これもしたい!もっとしたい!もっともっとしたい~♪処理速度には余裕がある~♪」
プログラマー「ハードにミスがある~♪ソフトで逃げれないかだと!想定外なバグがある~♪対応で行数が増える!」
結果としてカツカツに……。
あると思います。
6:15 モジュロ演算で%はあめえ
(H/Wで除算サポートしてないなら)&でマスク取った方が早い(ぇ
7:44 よく「読込側はメインtaskだから割り込み禁止しましょう」って見るけど、このリングバッファはFIFOだから割込禁止しなくても(仮にどのタイミングでプリエンプティブな書込割込が入ったとしても)基本的に影響無いとボクは思うんだ
いずれにしても聞き齧りでそのまま動画にするのやめようぜ