タグ

Programmingとperformanceに関するWatsonのブックマーク (15)

  • 高速化プログラミング

    このサイトは管理者が仕事上、CAE(Computer Aided Engineering=コンピューターに支援された技術)ソフトウェアのソルバー開発をしている間に身に付けた数値計算のプログラムを高速化するためのテクニックを紹介するものです。 プログラムを高速化させるというと難しそうに思われがちですが、ちょっとしたことでプログラムを数倍高速化できたりするものです。高速化プログラミングができるようになるためには才能よりも経験が重要です。つまり高速化プログラミングのテクニックができるだけ知ることが高速化プログラミングへの一番の近道です。 ここに紹介された高速化プログラミングのテクニックを一度お読みいただければ、自然と誰でも高速なコードを書けるようになると管理者は信じています。 このサイトの構成を説明いたします。最初にプログラムの高速化の簡単な説明と管理者が使用したマシン環境をご紹介します。そして

  • Infographics: Operation Costs in CPU Clock Cycles - IT Hare on Soft.ware

    Another way of approaching the same question is to say that “hey, I’m calling virtual function once per piece of code which is like 10000 cycles, so virtualisation won’t eat more than 1% of the program time” – but you still need some kind of way to see an order of magnitude for the related costs – and the diagram above will still come in handy 🙁 . Preliminaries aside, let’s take a closer look at

    Infographics: Operation Costs in CPU Clock Cycles - IT Hare on Soft.ware
  • ゲーム パフォーマンス: データ指向プログラミング

    .app 1 .dev 1 #11WeeksOfAndroid 13 #11WeeksOfAndroid Android TV 1 #Android11 3 #DevFest16 1 #DevFest17 1 #DevFest18 1 #DevFest19 1 #DevFest20 1 #DevFest21 1 #DevFest22 1 #DevFest23 1 #hack4jp 3 11 weeks of Android 2 A MESSAGE FROM OUR CEO 1 A/B Testing 1 A4A 4 Accelerator 6 Accessibility 1 accuracy 1 Actions on Google 16 Activation Atlas 1 address validation API 1 Addy Osmani 1 ADK 2 AdMob 32 Ads

    ゲーム パフォーマンス: データ指向プログラミング
  • Software optimization resources. C++ and assembly. Windows, Linux, BSD, Mac OS X

    See also my blog Contents Optimization manuals Vector class library Object file converter and disassembler Subroutine library ForwardCom: An open standard instruction set for high performance microprocessors Test programs for measuring clock cycles in C++ and assembly code Floating point exception tracking through NAN propagation CPUID manipulation program Links Optimization manuals This series of

  • 64bit時代のバッファ処理

    プログラミングの「常識」は時代とともに変化します。そのひとつが、サーバプログラムにおけるバッファ処理です。 1990年代後半から2010年頃までは、メモリ空間の大きさ(32bitすなわち4GB注1)を超える大きさのファイルを扱う時代でした。このため、httpdなどのサーバプログラムにおいても、入出力データをいったんテンポラリファイルとしてバッファリングする必要がありました。ですが、ファイルI/Oはメモリアクセスと比べると低速です。このため、小さなサイズのデータについてはメモリアクセスする一方で、大きなサイズのデータについてはファイルI/Oを用いる、という煩雑なコードを書く必要がありました。 しかし、2014年も暮れとなる今 、サーバサイドにおいては64bit環境のみを考えれば良い時代に入りつつあります。 もちろん、64bit環境といったところで、64bit空間の全てをユーザプロセスが使える

  • 数独の高速化 - Cybozu Inside Out | サイボウズエンジニアのブログ

    「サイボウズ・アドベントカレンダー」の4日目です(これまでの記事一覧)。どうやら三日坊主は免れたようです(笑)。 (0) はじめに こんにちは。サイボウズ・ラボの川合秀実です。私は主にサイボウズ製品の高速化のお手伝いをしています。しかし先日、製品とは関係ないものを高速化したので、今日はそれを発表します。 サイボウズには社内勉強会がいくつかあって、その中にはC++の勉強会もあります。私はサイボウズの勉強会に参加するのが好きなので、このC++の勉強会に参加してみました。この勉強会では、「数独」というパズルを解くプログラムをC++で書いてみよう、というのが最初のテーマでした。参加者各自がプログラムを書き、翌週にお互いにレビューしあうということが行われました。 ここで私はやらかしてしまいました。ええ、そうです、高速化してしまったのです! 言うまでもないですが、誰もこんなことは望んでいません。そもそ

    数独の高速化 - Cybozu Inside Out | サイボウズエンジニアのブログ
  • perfでぺろぺろしていたら詰まった - くまメモ

    perfという大変優秀なプロファイラがあります。どう優秀かというと ・gprofと違い、-pgなど付けなくとも既存のバイナリに対して実行できます ・バイナリに対して実行できるという事はあらゆる言語の実行を観察できます sudo apt-get install linux-tools まずこれで必要なツールは入ります。 試しに何かのパフォーマンスを見てみましょう $ perf stat ruby -e'100000.times{|n|p n}' 実行にかかったCPUサイクル数、分岐の数、分岐予測ミス数、キャッシュ参照数、キャッシュミス数などがズラズラ出ます。IPCなども計算されてプログラムの性質がわかります。 これでは物足りない人は、自分の好みの通りにセッティングを変えることもできます。 $ perf list で観測可能なモノのリストが表示されるので、その中から好きなものをコンマで繋いで例

    perfでぺろぺろしていたら詰まった - くまメモ
  • 卜部昌平のあまりreblogしないtumblr - 最速の memset64 を求めて 今回のお題は char 幅じゃなくて word 幅の...

    今回のお題は char 幅じゃなくて word 幅の memset 、つまりプロトタイプだと void* memset64(void* destination, uint64_t image, int num_words); をどれだけ高速に行うかという話。なぜ高速化するかというと、塗りつぶす領域がけっこうでかいから。 候補 1: REP STOSvoid* memset64(void* d, uint64_t i, int n) { asm("cld; rep stosq;" :: "D"(d), "a"(i), "c"(n) : "memory"); return d; } 最近の CPU はクソ賢い。そのため、下手に手で loop unrolling するよりも、逆に CPU に「ここはループなんだぞおおお~」というのを明示的に指示してあげたほうが CPU 側が勝手かつ不気味に最適な

    卜部昌平のあまりreblogしないtumblr - 最速の memset64 を求めて 今回のお題は char 幅じゃなくて word 幅の...
  • Javaはスクリプト言語より速い・・・のか?

    『プログラミング言語人気TOP10の簡易解説』という記事が人気を呼んでいたのだが、軽快な語り口で面白い読み物だが、語弊がありそうな部分がある。その中で特に、「(Javaは)実行速度はCに及ばないもののスクリプト言語よりは数十倍速い」とある部分が気になったので、簡単な例で検証してみた。 1. PythonPHPJava、Cで不適切な速度比較を行う 最初にコーディングが不適切な場合にプログラミング言語の速度比較を行うと、通説と異なる結果になる事を示したい。 Ubuntu Linuxで、オブジェクトをなるべく使わずに、順列の整数を100万個生成し、ランダムにシャッフルし、クイックソートを行ったときの経過時間を、timeコマンドで計測したものだ。ソート前、ソート後に配列の内容を、", "で連結して標準出力に書き出している。また、PythonAPIをなるべく使ったもの(*無し)と、なるべく使わ

    Javaはスクリプト言語より速い・・・のか?
  • TheC10kProblem - 「C10K問題」(クライアント1万台問題)とは、ハードウェアの性能上は問題がなくても、あまりにもクライアントの数が多くなるとサーバがパンクする問題のこと

    TheC10kProblem - 「C10K問題」(クライアント1万台問題)とは、ハードウェアの性能上は問題がなくても、あまりにもクライアントの数が多くなるとサーバがパンクする問題のこと 目次 この文書について C10K 問題 関連サイト まず読むべき I/O フレームワーク I/O 戦略 1. 各スレッドが複数のクライアントを受け付ける. そしてノンブロッキング I/O と レベル・トリガ型の完了通知を利用する. 伝統的な select() 伝統的な poll() /dev/poll kqueue() 2. 各スレッドが複数のクライアントを受け付ける. そしてノンブロッキング I/O と 変更型の完了通知(readiness change notification)を利用する. kqueue() epoll リアルタイム・シグナル fd 単位のシグナル (Signal-per-fd)

  • 【レビュー】高性能ソフトウェアの開発方法、仮想メモリを活用 | エンタープライズ | マイコミジャーナル

    Queue is the ACM's magazine for practicing software engineers. 高いパフォーマンスを発揮するプログラミングに関する興味深い実験結果と考察をまとめたPoul-Henning Kamp氏の記事がACM QueueにおいてYou're Doing It Wrongというタイトルのもの掲載されている。同氏は超高速リバースキャッシュプロクシVarnishの開発者であるとともに、FreeBSD主要開発者のひとり。これまでの開発経験から現在のOSやH/Wの特性を活用したプログラミングについて言及している。 VarnishはFacebookをはじめWikia、Slashdot、Opera、VGなどさまざまなサイトで超高速リバースキャッシュプロクシとして採用されている。従来のリバースキャッシュプロクシと比較して徹底した高速化とOSの性能をフルに発

  • 処理並列は、必ず処理速度が向上するのか

    はじめに CPUは、コンピューターの頭脳です。単純に考えると、頭脳が2つあれば、1つの時と比べて、同じ時間でたくさんのことを考えることができそうです。10年ほど前、Intel製プロセッサーPentium IIの頃から、1枚のボードに複数のCPUを載せて高速化する試みがなされました。Intel製CPUでは2ユニットまででしたが、SUN Microsystems製のコンピューターでは、もっとたくさんのユニットを載せることができていました。今では、CPU自体に複数の「コア」を載せ、1ユニットで同時に別々のことを実行できるようになっています。 ハードウェアが、同時に複数のことを実行できるようになったため、ソフトウェアもそれに対応する必要が出てきました。記事では、昨今あちらこちらで声高に繰り返される、「並列処理化すれば速くなる」に疑問を持ったため、それを検証することにします。 対象読者 なんといっ

    処理並列は、必ず処理速度が向上するのか
  • マルチコア時代の高並列性IOアーキテクチャ Wavy - Blog by Sadayuki Furuhashi

    シングルスレッドではもう遅い。 以前にマルチコア時代の高速サーバーの実装で、「ネットワークIOはマルチスレッドで動かすが、その他の部分はシングルスレッドで動かす」というIOアーキテクチャの実装(mp::iothreads)を紹介しました。iothreadsはロジック部分をシングルスレッドで書けるため実装の手間を抑えることができ、ネットワークIOがボトルネックになるプログラムには特に適していると思われます。 しかし実際にiothreadsを使ってプログラムを書いてみると、非常に負荷が高い状況でシングルスレッドの部分の処理速度がボトルネックになってしまうことがありました。 そこでマルチコアCPUの性能を引き出すために、徹頭徹尾マルチスレッドで動かすIOアーキテクチャを実装してみました。 1つのスレッドが、ある時はepoll_wait()し、ある時はread(2)を行い、ある時はイベントを処理す

    マルチコア時代の高並列性IOアーキテクチャ Wavy - Blog by Sadayuki Furuhashi
  • IBM Developer

    IBM Developer is your one-stop location for getting hands-on training and learning in-demand skills on relevant technologies such as generative AI, data science, AI, and open source.

    IBM Developer
  • Google-perftoolsを使ってCPUプロファイリングをとる - PS3 Linux Information Site / Cell/B.E.のパワーを体験しよう

    google-perftoolsとは グーグル株式会社で開発、公開されている高速mallocやCPUプロファイリングと解析などを行うオープンソースのツール群です。 こここではサンプリングベースのCPUプロファイラーである cpu profiler を紹介します。 cpu profilerはアーキテクチャーに依存しないLinux用ソフトウェアなので当然Cellでも使用することが可能です。 ここでプロファイルの測定対象としたソースコードはこれです。 Media:Google-perftools-cpuprofile.tar.gz google-perftoolsのインストール google-perftoolsはこちらからダウンロードできます。http://goog-perftools.sourceforge.net/ バイナリパッケージ(*.rpm)はないのでソースをダウンロードしてコンパ

  • 1