タグ

CPUに関するhiroyukimのブックマーク (33)

  • 低レイヤーの歩き方 - るくすの日記 ~ Out_Of_Range ~

    この記事は Kobe University Advent Calendar25日目の記事です。 低レイヤー技術(後述)をこれから学びたい人向けの入門記事です。 自身の経験を踏まえ、より多くの人達にこのレイヤーに興味を持ってほしくて書きました。 決して卒論がやばくてAdvent calendarのネタが作れなかったわけでは(ry なぜこんな記事を書いたか いわゆるシステムプログラミングのような低レイヤー(と言って差し支えない)ジャンルって一体何から始めれば良いのかいまいちピンと来ないし、何が面白いのかも分からないと思われている事が多いと思います。 にもかかわらず低レイヤーの魅力や学び方の指針みたいな物を示した、いわゆる入門記事ってかなり少ないんですよね。 記事はこれからシステムプログラミングを始めたい方や、既にかじってみたが中々先が見えてこない、将来何の役に立つのか不安という方達に読んでい

    低レイヤーの歩き方 - るくすの日記 ~ Out_Of_Range ~
  • CPUを複数持つアーキテクチャNUMAとnumactlの説明 - Qiita

    複数のCPUとメモリが一つのシステムに乗せられたNUMAアーキテクチャという構成が採用され始めている。 NUMAの目的はI/Oバスの並列化である。 極端に例えると、コア数が50個あった場合、一つのメモリバスを使った構成よりも、 25コア25コアの2CPUで2つのメモリバスを使った構成の方が早くなる。 14GB/sのメモリバスだった場合、メモリバスを2つにすれば28GB/sの性能がでる。 (1秒間に送れるデータ量が増える。) このようにNUMAは、コア数が増えることによるメモリバスネックの対策であり、マルチコア化も進んでいるため、今後NUMAにふれる機会が増えてくるはずである。 どんな時に考える? 多くのメモリ転送を使う計算をするときは、NUMAによる影響が発生するかもしれない。 設定によってはNUMAの影響を大きく受けてしまう可能性もある。 numaのメモリ割り当てを制御するコマンド [1

    CPUを複数持つアーキテクチャNUMAとnumactlの説明 - Qiita
  • 2日目: [半導体回路] トランジスタと論理ゲート - しかくいさんかく

    この記事はひとりでCPUとエミュレータとコンパイラを作る Advent Calendar 2017の2日目の記事です。 今日はトランジスタのスイッチング機能と、それを用いた論理ゲートの実装をまとめる。 トランジスタ この世には半導体と呼ばれる物質があり、n型とp型に分類されている。 n型半導体は電子をたくさん含み、p型半導体にはあまり含まれていない。 半導体と金属と絶縁体を以下のように接合したデバイスは、(nMOS型)トランジスタと呼ばれている。 一番目の図1を見て欲しいのだが、これは3の金属線の生えた半導体デバイスだ。 上段と下段の金属は、桃色で描かれたn型半導体に繋がっている。 2つのn型半導体の間にはp型半導体が存在するが、こいつは電子が少ない(あるいは、電子はp型半導体中に存在できない)ため、このままでは上段下段間に電子は流れない。 また中段の金属は絶縁体に繋がっているので、上下

    2日目: [半導体回路] トランジスタと論理ゲート - しかくいさんかく
  • プロセスのVSZ,RSSとfree,meminfo挙動を実機で確認 - のぴぴのメモ

    1.はじめに 1-1.この記事の要旨 1-2.(予習)メモリに関する指標とlinuxのメモリ挙動について 2.検証環境と検証方法 2-1.検証環境 2-2.検証方法 2-3.測定方法 (1)psコマンドによるVSZ,RSS情報の取得 (2)freeコマンドとmeminfo情報の取得 3.結果 3-1.全体の結果 3-2.プロセスのVSZ/RSS挙動 ポイント① malloc()した時の挙動→VSZのみ増加 ポイント② 1回目のデータread時→RSSは増えない ポイント③ データwrite→RSSが増加する 3-3.システムワイドな挙動(freeコマンド/meminfo) ポイント① malloc()した時の挙動→usedもAnonymousPageも増えない ポイント②1回目のデータread時→変化しない。 ポイント③ データwrite→used上昇、AnonymousPage上昇 4.

    プロセスのVSZ,RSSとfree,meminfo挙動を実機で確認 - のぴぴのメモ
  • CPUマスク | POSTD

    はじめに cpumasks は、Linuxカーネルが提供する特別な方法で、システム内のCPUに関する情報を格納します。 cpumasks 操作に関して、APIを含む関連のソースコードとヘッダファイルは以下のとおりです。 include/linux/cpumask.h lib/cpumask.c kernel/cpu.c include/linux/cpumask.h 内のコメントにあるように、CPUマスクは、システム内のCPUセットを表すのに適したビットマップ(CPU番号ごとに1つのビット位置)を提供します。CPUマスクについては、以前に カーネルのエントリポイント を扱ったパートの boot_cpu_init 関数を説明した部分で少し触れました。この関数は、最初のブートCPUをオンラインやアクティブなどにしたりする操作を行います。 set_cpu_online(cpu, true); s

    CPUマスク | POSTD
  • GitHub - cyring/CoreFreq: CoreFreq : CPU monitoring and tuning software designed for 64-bit processors.

    CoreFreq, a CPU monitoring software with BIOS like functionalities, is designed for the 64-bits Processors of architecture Intel Atom, Core2, Nehalem, SandyBridge and superiors; AMD Families from 0Fh ... up to 17h (Zen , Zen+ , Zen 2), 18h (Hygon Dhyana), 19h (Zen 3, Zen 3+, Zen 4, Zen 4c); Arm A64 CoreFreq provides a framework to retrieve CPU data with a high degree of precision: Core frequencies

    GitHub - cyring/CoreFreq: CoreFreq : CPU monitoring and tuning software designed for 64-bit processors.
  • x86とGCCと分岐と私 - mirichiの日記

    mrubyのVMはoptableに命令と実際のアドレスの変換テーブルをおいて、gotoのときにそれを使って変換→ジャンプをしているのでダイレクトスレッデッドじゃなくてトークンスレッデッドじゃないのかと思う今日この頃。識者の意見求む。 今回はCPUのアーキテクチャに深く依存する分岐予測の話。長いしわかりにくい。他人への説明用ではなく自分用の整理と考えられたし。 1.分岐とは アセンブラでいうJMP系、CALL系、RETを言う。プログラムカウンタを変更して任意の位置に実行位置を移動する。Cだと制御系の文(if、while、for、gotoなど)や関数呼び出しがそれらの命令に変換される。CPUのレベルでは条件無しのJMPも分岐と表現する。 CPUアーキテクチャ側から見ると分岐命令は大きくわけて4つ。 ・無条件分岐 ・条件分岐 ・間接分岐 ・リターン である。 2.分岐予測とは CPUはIntel

    x86とGCCと分岐と私 - mirichiの日記
  • CPU の system が妙に高いぞって時に犯人さがすには pidstat 使えば良い。 - tokuhirom's blog

    pidstat -h -u | sort -nr -k 5,5 | head すれば良い。 sudo yum install -y sysstat してインストール。 簡単に誰が system 消費してるかわかる [tokuhirom@centos-1gb-sgp1-01 ~]$ pidstat -h -u | sort -nr -k 5,5 | head 1462874412 0 27 0.00 0.22 0.00 0.22 0 kswapd0 1462874412 0 19281 0.16 0.09 0.00 0.25 0 cadvisor 1462874412 0 342 0.01 0.02 0.00 0.03 0 systemd-journal 1462874412 0 377 0.00 0.01 0.00 0.01 0 auditd 1462874412 0 262 0.00 0

  • いまどきのmatmul

    概要 経緯 : http://d.hatena.ne.jp/w_o/20141021#1413893835 Host 1700msec、Epiphany 170msecとかになって、さすが、16coreだから10倍速いみたいな話になったが、 経験的に、こういうのってナイーブCと比較してるから、普通にマルチスレッド & NEON使えば、10倍差ぐらいすぐはやくなんじゃね? と、思ってNEON + スレッド化matmulを探したのだけど、見当たらなくて、探すより書いたほうがはやそうだったので書いた。 というのがあって、今更matmulを実装したのでその話について書く。 1ノード Haswell 正方行列 単精度 サイズは128の倍数だとか制限付けてもよい という条件でどうやって効率上げていくかについて説明する。 今日の結果は N = 2000〜3000 で効率 80% ぐらい。 まあ多分もっと

    いまどきのmatmul
  • ゲーム パフォーマンス: データ指向プログラミング

    .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

    ゲーム パフォーマンス: データ指向プログラミング
  • 細粒度並列処理について - uehaj's blog

    JSR-166yはJava 7で導入が予定されている、細粒度並列処理を効率よく行うことができるようにするためのライブラリ群です。Java7でjava.util.concurrent.forkjoinパッケージで提供される予定ですが、実は今でもダウンロードして利用できます。記事ではこれが何のためのものでJava開発にどのようにかかわってくるか、を概要として解説します。JSR-166yの詳細およびfolk/joinアルゴリズムそのものについては解説しません。それらについては末尾の参考リンク先をどうぞ。 細粒度並行処理とは何か new Thread()とかExecutorServiceでいちいち、どっこいしょ、と処理を始める(往々にしてその処理はプログラムが終了するまで続く)というのを祖粒度並行処理と呼びます。そうではなく、1回のソート処理を複数スレッドで実行するとか(並行ソート)、forルー

    細粒度並列処理について - uehaj's blog
  • Linux - CPU プロセッサアフィニティ(親和性)の設定!

    mk-mode.com Linux, Debian, IT, Server, PG, Ruby, Rails, Python, C++, Fortran, PC, MariaDB, math, GIS, etc... こんにちは。 Linux 上で、実行中のプロセス(コマンド)が複数あるどの CPU プロセッサと親和性があるのか確認したり、親和性をとる CPU プロセッサを指定する方法についての記録です。 「CPU プロセッサアフィニティ」は、簡単に説明すると「あるプロセスがどの CPU プロセッサで実行されるか」ということです。 「アフィニティ(affinity)」は、 「親和性」、「関係」、「有縁性」などと呼ばれることもあります。 注意するのは、「CPU コア」ではなく「CPU プロセッサ」であるということです。 ここでの「プロセッサ」とは、物理的な CPU ではなく cat /pro

    Linux - CPU プロセッサアフィニティ(親和性)の設定!
  • 第6章 親和性

    システム内の各スレッドおよび割り込みソースには プロセッサー親和性 のプロパティがあります。 オペレーティングシステムのスケジューラーは、 この情報を使ってどの CPU でどの スレッドと割り込みを実行させるのかを判断します。 効率的なポリシーと優先度の設定と共に、プロセッサー親和性も設定すると最大限可能なパフォーマンスを得ることができます。 アプリケーションは常に他のプロセスと特に CPU タイムなどのリソースを獲得するため競争しなければならなくなります。 アプリケーションによっては複数の関連スレッドが同じコアで実行されることがよくあります。 代わりにひとつのアプリケーションスレッドをひとつのコアに割り当てることができます。 マルチタスクを行うシステムは必然的に非決定論になる傾向があります。優先度の高いアプリケーションは、実行が遅くなり、優先度が低いアプリケーションはクリティカルなコード

  • ”私の環境で”大きなテキストファイルをawkで処理するときにcatで投げ込むと速い理由 - ablog

    大きなテキストファイルをawkで処理するときにcatで投げ込むと速い理由 - ablog を書きましたが、awk file > file より cat file|awk > file が速い環境は稀なようなので、私の環境でなぜ cat file|awk > file のほうが速いのか調べてみました。プロセススケジューラが関係しているようです。 ↑はPerf + Flame Graphs で、awk file > file 実行時のコールスタックと所要時間を可視化したものです。 結論(たぶん) SSDの暗号化・復号をカーネルスレッドで行なっているのと、プロセススケジューラが awk とカーネルスレッドを同じ CPU にスケジューリングしていた(他に空いている CPU があるのに)。 awk file > file では暗号化データを復号するカーネルスレッドと awk のプロセスをプロセススケ

    ”私の環境で”大きなテキストファイルをawkで処理するときにcatで投げ込むと速い理由 - ablog
  • Etsukata blog: FreakOut DSP 入札サーバの CPU 使用率を 30% 削減する Performance Tuning

    はじめに 勤務先の FreakOut 社では RTB で広告枠を買い付ける DSP の開発・運用を行っています。RTB とは、インターネット広告のインプレッションが生じる毎に、広告枠の競争入札を行う仕組みです。 DSP とは、 RTB において、競争入札をする側のシステムになります。広告枠/広告を見ている人 に対し、最適な広告を、最適なタイミングで届ける機能を広告主に提供する仕組みです。 FreakOut DSP は最適な広告探索・入札価格調整のため、非常に多くのデータを参照し、沢山の演算処理を行います。広告を見ている人が過去にアクセスした Web ページの情報や検索ワード、さらに 広告がクリックされる予測確率(過去のログから機械学習で算出) などを参照し、入札価格を決定するのです。そのため、DSP で入札を担当するサーバは CPU がボトルネックになっており、台数も数百台に嵩んでいます。

  • http://www.marbacka.net/asm64/arkiv/undocumented_opcodes.html

  • SSE4.2の文字列処理命令の紹介

    1. SSE4.2の文字列処理命令の紹介 Cybozu Labs 2011/8/6 光成滋生(8/23加筆修正p3, p.25) x86/x64最適化勉強会#1 2011/8/6 /41 1 3. 説明とコード Intelプロセッサ最適化マニュアルを読もう http://homepage1.nifty.com/herumi/prog/intel-opt.html コード片 https://github.com/herumi/opti/ アライメントとページ境界に関する補足(必読) http://homepage1.nifty.com/herumi/diary/1108.html#8 2011/8/6 3 /41 4. SIMD向き/不向き SIMDは4個(or 8/16)個のデータを同時に同じよう に処理するためのもの SIMD向き 先程の最大値を求める場合,4個ずつやっ

    SSE4.2の文字列処理命令の紹介
  • 組み込み関数(intrinsic)によるSIMD入門

    6. 目標目標 OpenCVによりも高速なプログラムを簡OpenCVによりも高速なプログラムを簡 単につくれる書き方を覚えよう単 くれる書き方を覚えよう 出来るようになること ・高速コピー src.copyTo(dest);高速コピ src.copyTo(dest); ・高速な加減乗算 dest = src1 + src2; ・高速型変換 src.convert(dest,CV_16U); ・高速BGR2RGB cvtColor(src,dest,CV_BGR2RGB); ・高速BGR2Gray cvtColor(src,dest,CV_BGR2Gray); ※出来ないこと 整数演算だけ 浮動小数点の命令は使わない 比較演算は使整数演算だけ,浮動小数点の命令は使わない,比較演算は使 わない,水平演算は使わない,AVXは含まない(SSE4.1まで) 7. 目的目的 を使えば 化は難しくないよ

    組み込み関数(intrinsic)によるSIMD入門
  • C++ マルチスレッド 入門

    エラーハンドリングとはどうあるべきかについての考察。 Boost.勉強会 #3 関西 ( http://kokucheese.com/event/index/4335/ )にて発表。

    C++ マルチスレッド 入門
  • 前置インクリメント vs 後置インクリメント | 闇夜のC++

    後置インクリメントにはひと目で遅くなりそうな処理が見て取れますね。 前置インクリメントがインクリメント処理後、単純に自身の参照を返すのに対し、後置インクリメントではインクリメント前に一時オブジェクトの生成、そしてインクリメント後にはその前に生成した一時オブジェクトを値で返しています。 前置と後置では、単純にオブジェクトをコピーして返す分、普通に考えたら後置の方が遅いよね。というのが従来の認識でした。 「C++ Coding Standards -101のルール、ガイドライン、ベストプラクティス」の中でも、特に後置インクリメントの必然性が無い時は迷わず前置インクリメントを使うことが推奨されてきました。 元の値を必要としないときは前置形式の演算子を使おう __C++ Coding Standards (p50) 新たな主張 「ゲームエンジン・アーキテクチャ第二版」の中の一節を紹介します。 しか