Smile Engineering Blog

ジェイエスピーからTipsや技術特集、プロジェクト物語を発信します

初めての git-prompt

はじめに

git-worktree で複数のブランチを渡り歩いていると、今どこのブランチにいるのか?どんな状態なのか?がわからなくなることが多々あります。

プロンプトにブランチ名、状態を色で表現させる方法をご紹介します。git-prompt.sh のコメントの他、下記サイトを多分に参考にさせていただきました!

続きを読む

信号処理とMIPS・後編

ソフトウェアとMIPS

前編(信号処理とMIPS - Smile Engineering Blog)は、ハードウェアの性能を示すMIPS【Million Instructions Per Second 】について書きましたが、今回はソフトウェアのベンチマークとして書きたいと思います。

MIPS

コンピューターの処理能力を表す単位。コンピューターが1秒間に何百万回命令を実行できるかを示す。

前回も書きましたが、このような説明が多いです。

f:id:jspnet:20191015234008p:plain:left ソフトウェアの開発の要件として、信号処理では演算量(処理量)が必ず問われます。製品開発では、CPUをどれくらいのスペックにするかは言うまでもなく重要で、製品のコンセプトといっても過言でないでしょう。そのコンセプトを実現できるCPUを選定するのですが、売れる商品にするめにはコスト面も重要です。この辺の事情に非常に絡んでくるのがソフトウェアのリソースで、具体的には演算量とメモリサイズになります。

MIPS計算

そのソフトウェアが何命令か、Million Instructions Per Second なので1秒間に何百万命令か?ということですが、デジタル信号処理のソフトウェアを考えたとき、MIPS計算は次の式になります。

MIPS =命令数 × サンプリング周波数 / フレームサイズ × 10^{-6}

この時のフレームサイズとはサンプル数です。 FFT高速フーリエ変換)を例にすると、FFT長(点数)がフレームサイズです。大きければ演算量もメモリも大きくなります。

続きを読む

思考のサルベージ(その5)

各工程で心がけたい思想を掘り起こしてみる

「ハードウェアインターフェースの確認」を取り上げましょう。 組み込み開発では、ハードウェアもオリジナルというのが普通ですね。ソフトウェア開発側の視点でハードウェア機能の確認について考えてみます。

どんな機能が欲しいですか

開発のかなり早い段階で、ソフトウェアチームからハードウェアチームにどんな機能が欲しいか、どのように使いたいかを整理して伝える必要があります。まだ機能設計もできない状態でソフトと相性のいいハードウェアインターフェースを考えなければいけません。システム全体で「必要かもしれない」と思う機能については、遠慮なく要求しましょう。満額OKとならないかもしれませんが、要求を出さなければ、要不要の議論もできません。 ここで徹底的に議論しておかないと、こんな機能があればよかった、この機能はいらなかったと後で後悔することになります。

インターフェースの確定

ハードウェアのインターフェースが確定したら、念入りに確認しましょう。

  • 実装合意した機能が記載されているか
  • 使い勝手のよいインターフェースになているか

ソフトウェアと違い、ハードウェアは後工程での改修はできなくなります。問題点に気が付いたら早めに声をあげましょう。各種制約についてもしっかり確認しておきましょう。ハードウェアの制約でよくあるのは - 同時起動の制約 - レジスタ参照タイミングの制約 とかですかね。制約違反をしてしまうと、ハードを動かせなかったり、想定外の値をレジスタから読み込めなかったり、システムが正常に動作しなくなります。

逐次確認

設計工程、実装工程ではインターフェースを逐次確認しながら進めましょう。レビューの場で突き合わせをして、インターフェース違反、制約違反を発見し、バグを早期段階でつぶしておきましょう。テスト工程でハードウェアの絡んだ不具合を踏むとかなり厄介です。

何か掘り起こせた?

  • 初期段階で徹底的に議論する
  • ハードチーム、ソフトチーム間で常に情報交換できる環境を作る。

おしまい

組み込み開発は、ハード開発、ソフト開発の共同作業です。両者の関係が風通しの良いものになっているとやりやすいです。そのうえで、互いの主張を建設的に議論できると、より良いものができるんでしょうね。

Pythonで機械学習(kaggle入門その4)

はじめに

以前取り組んだ「House Prices: Advanced Regression Techniques」のモデルの構築、予測について、 XGBoostを試してみました。

XGBoostとは

勾配ブースティングとランダムフォレストを組み合わせたアンサンブル学習モデルのフレームワークです。
アンサンブル学習は、複数の学習器を使用してそれらの予測結果を統合することで、汎化性能(精度)を向上させます。
Kaggle内でも安定して良い精度を期待できるとして非常に多く使用されています。

続きを読む

オープンソースの勉強会&イベントに参加してみよう!

突如現れたハッシュタグ #KOF2019 って一体何!??

先週末、Twitterを何気なく覗いていると、突如『#KOF2019』などという謎のハッシュタグを見かけた方がいらっしゃるのではないでしょうか?

はて、格闘ゲームのイベント!?? ……などと思われる方が圧倒的多数ではないかと思いますが、実はこれ、毎年大阪で開かれているIT系イベント 『関西オープンフォーラム』 の略称だったりします。特に某格闘ゲームの大会が開かれていたわけではないってことですね……

今年の関西オープンフォーラムの写真は迂闊にも撮り忘れてしまいましたが(実行委員の皆さんごめんなさい)、関西オープンフォーラムに限らず、IT系のイベントや勉強会は日本各地で頻繁に開催されています。

f:id:jspnet:20191110214242j:plain

上の写真は、オープンソースカンファレンス浜松行われていたデモの写真です。
雑誌で見かけたことがある方はいらっしゃると思いますが、きゅうりの選別をTensorFlowを使って行うというものですね。こんな展示を生で見れたり、その開発者と生で話ができたりと、IT系イベントに参加すると新しい発見が見つかることも多いと思います。

今回はそんなオープンソースのイベントや勉強会についてご紹介します。

続きを読む

Marp CLI による PDF 作成

はじめに

ここ最近、技術発表などのスライドは [Marp] を使って作成することが多いです。編集には Visual Studio Code の Extension([Marp for VS Code])を用いますが、commit したタイミングで PDF が自動生成されると便利なのではないかと思い、前段階として CLI による PDF 作成の方法を調べました。

続きを読む

信号処理とMIPS

MIPS 【 Million Instructions Per Second 】 とは

信号処理や組み込みの分野では、アルゴリズムを提供するソフトウェア(ファームウェア)が、どれくらいの処理量(演算量)が必要なのか問われます。例えば、信号処理の性能を示すものには、処理された結果の品質があると思います。良い品質が提供できるとした時、もう一つ重要な指標に演算量があります。高品質な結果を提供するソフトウェアでも、スーパーコンピューターが必要では非現実的になってしまいます。

信号処理のソフトウェアの演算量を示す指標として、MIPSが良く使われています。

MIPS

コンピューターの処理能力を表す単位。コンピューターが1秒間に何百万回命令を実行できるかを示す。

MIPSとは、このように説明されていることが多いです。確かにこの通りなのですが、ハードウェアの性能を示すものとして説明されている場合がほとんどです。

分かりやすいところでは、CPUのデータシートに、動作クロック100MHz, 100MIPS などと書かれていた場合は、CPUの処理性能を示しています。

動作クロック100MHzで100MIPSとは 1サイクルで1命令実行できる
100,000,000命令 / 100,000,000Hz = 1命令 100MHz × 1命令 = 100MIPS
続きを読む