ムンペイ

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

ムンペイ

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

マガジン

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

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

最近の記事

  • 固定された記事

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

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

    • 【止まらない!】ベーマガの思い出4選

      30年以上プログラミングをしている、ムンペイです。 サムライアプスというサークル活動もしています。 先日2024年5月18日に、ALL ABOUT マイコンBASICマガジンⅢというトークイベントに行ってきました。観客には30年~40年前にベーマガを読んで育った当時子供だった人たちが1000人以上も集まり、全員が同じような思い出を共有しているというすごいイベントでした。 ベーマガは、正式には「マイコンBASIC Magazine」と言い、1982年に電波新聞社から創刊され

      • 【VLIWからマルチコアまで】MIMDの実例3選

        ムンペイです。ソフトウェアを高速化する仕事を中心に、30年以上プログラミングをしています。 別の作業に夢中になってしまい、毎週日曜公開を守れませんでした。すみません。 前回の続きで、MIMDについての経験と話題を3つご紹介したいと思います。 MIMDとはMultiple-Instruction Multiple-Dataの略で、並列実行モデルの分類の1つです。同じクロックサイクルで複数個のデータに対して違う処理をしようという手法のことです。 Single-Instruc

        • 【シムディーと読もう!】SIMDによる高速化の実装方法3選

          30年以上のプログラミング歴の半分は高速化をしてきました、ムンペイです。 複数のデータを同時に処理する並列化は、高速化の最重要テクニックの1つです。そのうち、1つのCPUコアの中で並列化を実現する命令レベル並列化について、SIMD演算を適用する方法について、私の経験をもとにしてご紹介します。 SIMDはシムディーと読もう!SIMDとは、Single Instruction, Multiple Dataの略で、1つの命令で複数のデータを処理する方式を指す言葉ですが。読み方は、

        • 固定された記事

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

        マガジン

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

        記事

          【挑戦するべき?】気になっている言語とフレームワーク3選

          ムンペイと申します。 30年以上、プログラミングをしています。 取り組めていないものの、個人的に現在注目しているプログラミング言語またはフレームワークを3つご紹介したいと思います。 1.Rust私はかつてはC++を長くメイン言語として使っていましたが、それはOSすら記述できる汎用性とCPU命令にコンパイルされることによる高速性が魅力だったからでした。そのメリットを享受するにはメモリアクセス違反をしないよう細心の注意を払ってコーディングする必要がありますが、昔の非力なPCで

          【挑戦するべき?】気になっている言語とフレームワーク3選

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

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

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

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

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

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

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

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

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

          【敢えてやる】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選