ムンペイ

最適化プログラミングにハマること30余年、ハードウェアの性能を引き出すことに魅力を感じ…

ムンペイ

最適化プログラミングにハマること30余年、ハードウェアの性能を引き出すことに魅力を感じてその界隈で仕事をしてきました。最近は社会で役に立つことをしたいと思い、中小企業向け支援やプログラミング教育の活動をはじめています。→ https://www.samurai-apps.com/

マガジン

  • プログラムを高速化するマガジン

    ソフトウェアプログラムを高速化するのが好きな人に、読んでほしいことをまとめました。

最近の記事

  • 固定された記事

高速なプログラムを書くためのコツ3選

プログラミング歴30年以上のムンペイです。 中学生のときに出会ったメガデモ(※1)に魅せられて高速なプログラムの追求にハマりました。就職後も、DSPの画像処理、ヘテロジニアスマルチコアプロセッサでの性能追求など、仕事でも高速プログラムの開発に携わってきました。 その経験で得た、基本的な高速化のコツを優先順に3つ挙げてみます。 ※1: GPUどころかまだGUIのOSも珍しかった時代に、16MHz程度のCPUによるリアルタイム演算で数分間の3D CG動画を再生するプログラムのこ

    • 【実践的スキル!?】最適化プログラミングがSTEM教育に効果的な理由3選

      30年以上プログラミングをしている、サムライアプスのムンペイです。 カメラで撮影した画像から製品の微細な傷を検出する処理をDSPという並列プロセッサ向けにプログラミングすることなどを行ってきました。 ソフトウェアというものは良い作り方をすると、同じハードウェアなのにずいぶんと性能が良くなるもので(いわゆる軽い)、時にはその比率は10倍、100倍になる場合もあります。このようなハードウェアの性能を引き出すプログラミングを最適化と呼んだりします。私はそんな最適化プログラミングを

      • 【高速化しない!?】高速化の観点3選

        30年以上プログラマーをしているムンペイです。学生時代に高速化プログラミングにハマり、そのまま仕事にしてしまいました。 高速化と一口に言っても、高速になってほしい部分によっていくつかに分類ができます。目的をしっかり分類することで適切なアプローチを選ぶ助けになります。私が高速化を考える場合に用いる観点を3つご紹介します。 1. 大量のデータ処理を短時間で処理する大量のデータを扱う場合は、データ並列のアプローチが効果的です。もっとも高速化の成果が出やすく、楽しく取り組めるパター

        • 【皆さんもある?】もうあまり読まないけど大事にしている本3選

          30年以上プログラミングをしているムンペイです。 若い頃に読んで影響を受け、いまはもう手に取ることはないけど、本棚には大事にしまってあるという本を3冊ご紹介します。 1. 自分で作れるパソコンゲーム最初はパソコンゲームの作り方の本で、中学生か高校生くらいの頃に買ったものです。 私もゲームをやりたくてプログラミングにハマっていったクチでして、プログラミングが自力でできるようになってくると、もっと複雑なものを作りたくなるものです。これはそう言う段階に入った非常に初期に買ったも

        • 固定された記事

        高速なプログラムを書くためのコツ3選

        マガジン

        • プログラムを高速化するマガジン
          20本

        記事

          【敢えてやる】JPEGを実装してみてその後のプログラミングに役立ったこと3選

          30年以上プログラマをしているムンペイです。 JPEGを勉強してほとんど自力で実装したことがあり、その経験から学んだ知見がいまでも生きています。どんな学びがあったか、3個紹介します。 1.現代的なデータ圧縮技術特に説明の必要はないと思いますが、JPEGとは非常にポピュラーな静止画の圧縮技術の1つの名称です。Joint Photographic Experts Groupという画像圧縮の規格を決める組織の名称でもあり、そこで決まった方式もJPEG方式と言われています。JPEG

          【敢えてやる】JPEGを実装してみてその後のプログラミングに役立ったこと3選

          【知ってる?】私が出会った変態プログラミング言語2選

          プログラミング歴30年以上のムンペイです。 BASICに始まり、C++時代が長く続き、ここ10年はPythonはメインになっている、といった感じで言語を変遷させていますが、プログラム言語というものはどれでも究極的にはコンピュータを動かすためのものという点で共通しているので、ある言語の知識を応用すれば他の言語でも短期間でそこそこキャッチアップできるケースは多いのですが、苦労する場合ももちろんあります。苦労した言語を2つ挙げて、苦労した点とそれはなぜかをご紹介します。 1.Fo

          【知ってる?】私が出会った変態プログラミング言語2選

          【やった!】ソフトウェア開発で達成感を味わった経験3選

          こんにちは、ムンペイです。 プログラミングを30年以上やっています。 プライベートで、仕事、多くのソフトウェア開発を経験してきましたが、特に達成感を味わった経験を3つ挙げてみたいと思います。 1.ダウンロード100万超のスマホアプリ私はお客様から依頼を受けてソフトウェアを開発する「受託開発」を行う会社に勤めています。もう10年近く前の経験になりますが、受託開発して納めたスマホアプリがダウンロード数100万を大きく超え、記憶に残る仕事になっています。 そのアプリは、大手電

          【やった!】ソフトウェア開発で達成感を味わった経験3選

          【まだ遅くない】学んでおけばよかったプログラミング技術3選

          30年以上の経験を持つプログラマのムンペイです。 プロセッサの性能を引き出すソフトウェア高速化や、組み込みプロセッサ向けのソフトウェア開発を主なフィールドとして経験してきましたが、部品にとどまらずアプリを作って世の役に立つために、もっと学んでおけば良かったと思う技術を3つ、ご紹介します。 (プロモーションを含みます) 1.データベースアプリケーションシステムの開発に欠かせないデータベース。 プログラムとはデータを処理するものであると考えると、データの格納とアクセスを担うデー

          【まだ遅くない】学んでおけばよかったプログラミング技術3選

          【学生に捧ぐ】30年プログラマが学生時代にしていたこと3選

          プログラミングを30年以上しているムンペイと申します。 サムライアプスという名前でチーム活動もしています。 私が小学5年生の時に、自営業で新し物好きの父が、仕事で使うために買ったPCを、日中の父不在の時間に借りるようになったことから、プログラミングにはまりました。そんな私が、入門期である学生時代に行っていたことを3つ挙げてみたいと思います。 1.ベーマガの写経やはり入門期に一番の原動力になったのは、ベーマガの写経です。 私がPCに触り始めた頃は、まだインターネットはなく

          【学生に捧ぐ】30年プログラマが学生時代にしていたこと3選

          【迷宮?謎解き?】デバッグに苦労した経験と学び3選

          こんにちは、ムンペイです。 プログラミングを30年以上しています。プログラム高速化に関する経験をnoteに吐き出しています。サムライアプスという名前で中小企業のIT活用向けの情報発信もしています。 さて、デバッグもたくさんしてきましたが、特に苦労した経験事例を得た学びも交えて3つ挙げてみたいと思います。 1.マルチスレッド 高速化を目指すなら必須技術であるマルチスレッドは、デバッグしにくいパターンの代表格です。複数のことが同時進行しているので、問題が起こった場合に何が原因

          【迷宮?謎解き?】デバッグに苦労した経験と学び3選

          【基礎】コードレベルの高速化で最初に取り組むこと4選

          高速化大好き、プログラミング歴30年のムンペイです。 プロファイリングを終え、アルゴリズム的な最適化も概ね問題ない状態で、実装方法による高速化に取り組む段階で、まず見直すところを4つ挙げてみます。 今回はソースコード例の作成を中心にChatGPTに手伝ってもらいました。 ループ内の無駄な処理の最適化まずは冗長な処理の削減に取り組みます。 ループの中で各イテレーションで値が変わらない計算は、ループの外に移動させることで計算回数を減らすことができます。 改善前: resu

          【基礎】コードレベルの高速化で最初に取り組むこと4選

          【速さだけじゃないの!?】プログラム高速化の実践的メリット3選

          ムンペイと申します。30年以上プログラミングをしています。学生時代に高速化の面白さにハマり、そのまま仕事でも同じようなことをすることになりました。 さて、高速化と一口に言いますが、メリットは高速になることだけではありません。高速化から得られるメリットを3つ、ご紹介します。 1. 処理が早く終わる処理が早く終わります。一番期待される効果はこれでしょう。 早く終わる事自体はわかりやすいと思うのですが、高速化の程度によって、得られるものは様々です。 数%~2倍までの高速化は、

          【速さだけじゃないの!?】プログラム高速化の実践的メリット3選

          【就活前に知りたい】高速化プログラマになるならクリアしておきたい経験3選

          プログラミング歴30年余のムンペイです。 ソフトウェアを高速化する会社で管理職をしており、採用面接なども担当します。 応募してくださる人は、出身大学も立派で会話から知性が滲み出る方々ばかりですが、高速化プログラマとしてDeep Diveして長くやっていけるだろうか、特に長期にわたる学習とアウトプットを前向きに続けられるだろうかと心配に感じるケースもあります。これをクリアしておいてくれればきっとそう感じないだろうと思うことを3つご紹介します。 1.プログラムが扱うのは一般の数

          【就活前に知りたい】高速化プログラマになるならクリアしておきたい経験3選

          ソフトウェア高速化するなら絶対マスターしておきたい理論3選

          プログラミングを30年以上やっているムンペイです。 30年前のPCに搭載されていたCPUは、コアはもちろん1つでスーパースカラーもないインオーダー実行、クロックも12MHz程度と、今と比べると恐らく10,000倍くらい遅かったかもしれませんが、それでも凄い3D CGやゲームを実現する人たちのプログラミング技術に魅せられ、高速化にハマっていきました。 高速なソフトウェアを目指すなら絶対に知っておきたい理論を3つ、紹介します。 1. ビッグO表記/オーダー最初は、ビッグO(オ

          ソフトウェア高速化するなら絶対マスターしておきたい理論3選

          【常識?非常識?】高速化プログラマの数値処理と文字列操作の感覚3選

          30年以上プログラミングしているムンペイです。 高速化にハマり、マルチコア、GPUなど向けにソフトウェアを書いてきました。 今は採用面接でプログラミング試験の実施を担当することもありますが、その中で若いプログラマの皆さんとの感覚の違いに気づくこともあります。数値処理と文字列操作の中で3つ紹介します。 1. 10進数、16進数、2進数は同一に見えている多くのプログラミング言語では数値データを、10進数だけでなく、16進数、2進数、8進数あたりでも扱えるものが多いですが、高速

          【常識?非常識?】高速化プログラマの数値処理と文字列操作の感覚3選

          ソフトウェアの高速化に取り組む前に行っておきたい作業3選

          30年以上プログラミングをしてきたムンペイです。 プログラム高速化が好きです。プログラムを高速化するとはつまりプログラムの実行が遅い部分を修正して改善するということですが、プログラム修正に先立ってぜひ行っておきたい作業を3つ選んでみました。 1. プログラムの目的を確認するまず、このプログラムが何をするものかを、確認しておきます。 プログラム修正の工程でどの程度まで変更してよいかを見極めるための材料となります。 この時、プログラム単体から得られる情報よりももっと広く、こ

          ソフトウェアの高速化に取り組む前に行っておきたい作業3選