タグ

C++に関するyou21979のブックマーク (43)

  • MKL-DNNで学ぶIntel CPUの最適化手法 - Cybozu Inside Out | サイボウズエンジニアのブログ

    初めに サイボウズ・ラボの光成です。 DNN(deep neural network : 深層学習)といえばGPUや専用プロセッサを使うのが主流です。 しかしIntelはCPUで高速にDNNをするためのライブラリ MKL-DNN を提供しています。 MKL-DNNはIntelの最新CPUに対応したオープンソースソフトウェアなのでコードを見ると勉強になります。 ここではMKL-DNNで使われているテクニックをいくつか紹介します。 概要 MKL-DNNの紹介 Xbyakの紹介 呼び出し規約 圧縮displacement ReLU exp 内積 vpdpbusd キャッシュコントロール 想定読者 C++11とx64 CPUのアセンブリ言語の知識をある程度仮定します。 機械学習についてはその知識がなくても最適化手法が理解できるよう、最小限の説明をします。 MKL-DNNの特長 まずMKL-DNNの

    MKL-DNNで学ぶIntel CPUの最適化手法 - Cybozu Inside Out | サイボウズエンジニアのブログ
    you21979
    you21979 2019/04/22
  • キャッシュフレンドリーな二分探索 ー データ構造を再考する | POSTD

    現代のコンピュータのアーキテクチャに搭載されている高速のキャッシュメモリは、 参照の局所性 に優れた(=一連のものとしてアクセスした要素が、互いに近いメモリのアドレスに配置されている)データ構造を好みます。これは、 Boost.Containerの平坦な(ツリー状ではない)連想コンテナ のようなクラスを陰で支えている理論的根拠です。要素を連続的に(かつ順序だてて)保存すると同時に、標準的なC++ノードベースの連想コンテナの機能性をエミュレートします。以下にあるのは、要素が0から30の範囲の時、 boost::container::flat_set の中で 二分探索 がどのように行われるのかを示した例です。 探索で目的の値を絞り込むにつれて、アクセスされる要素は次第に近くなっていきます。そのため、最初のうちは大きな距離を飛び越えていくような感じであっても、参照の局所性は このプロセスの最後の

    キャッシュフレンドリーな二分探索 ー データ構造を再考する | POSTD
  • C++11やemscriptenと付き合って1年間の振り返り

    DeClang 誕生!Clang ベースのハッキング対策コンパイラ【DeNA TechCon 2020 ライブ配信】 クライアントプロテクション技術には、パッキング、難読化、アンチデコンパイル、改ざん検知等様々なアプローチがありますが、発表ではこれらのアプローチの優劣について検討し、我々のコンパイラ型のクライアントプロテクションツール DeClang をご紹介します。

    C++11やemscriptenと付き合って1年間の振り返り
  • 歌舞伎座.tech#8「C++初心者会」 - 資料一覧 - connpass

    歌舞伎座.tech#8「C++初心者会」で「unique_ptrにポインタ以外のものを持たせるとき」というタイトルで発表したが、この記事ではそのまとめと、追加の話題について述べる。 発表資料はこ... Read more >>

    歌舞伎座.tech#8「C++初心者会」 - 資料一覧 - connpass
    you21979
    you21979 2015/05/21
  • Boost.Asioによるワーカースレッドパターン - Faith and Brave - C++で遊ぼう

    これを Boost.Asio を使ってかっこ良くしたいけどどうなんでしょうか。 URL 2011-04-08 15:11:35 via GD Tweet Boost によるデザインパターン - Worker Thread とのことだったので書いてみました。 #include <boost/asio.hpp> #include <boost/thread.hpp> #include <boost/bind.hpp> #include <boost/shared_ptr.hpp> class thread_pool { boost::asio::io_service& io_service_; boost::shared_ptr<boost::asio::io_service::work> work_; boost::thread_group group_; public: thread_po

    you21979
    you21979 2015/03/14
  • C++ と Visual Studio による Android 開発

    ABC 2014 Winter ( Android Bazaar and Conference 2014 Winter / 2014年12月21日 ) カンファレンス:次世代 Android トラック 16:15~ 「 C++ と Visual Studio による Android 開発 」 にて登壇させていただいた際のスライドです。 http://abc.android-group.jp/2014w/conference/next/ 【セッション概要】 Android の開発環境が、最新の Visual Studio でますます充実しています。JavaScript/ C#/C++ によるアプリ開発を始め、ついに Microsoft から Android Emulator も提供されました。このセッションでは Visual Studio が提供する Android アプリ開発環境の概要をご

    C++ と Visual Studio による Android 開発
  • でらうま倶楽部 : Eigen - C++で使える線形代数ライブラリ

    2014年12月03日12:00 カテゴリプログラム Eigen - C++で使える線形代数ライブラリ C++ Advent Calender 2014 絶賛協賛中!! みなさん、Eigenをご存知ですか?? EigenはC++のテンプレートで実装された線形代数ライブラリです。 私自身、配信中の2iPhoneアプリで使っており、「これはとても使いやすい!!」と感じています。 その経験から、「C++でベクトル・行列を扱うなら、Eigenオススメ!!」と推しまくってます!!!! 使うメリットライブラリのビルドが不要(使いたいソースでインクルードするだけ)高速(テンプレートが展開され、余計な変数が生成されない)直感的でシンプルなAPI(数式に近いコードが書ける)MPL2なライセンス(closed-source なソフトでも使える)そこで今回は、簡単ながら、ゲームアプリでよく使うであろうベクト

    でらうま倶楽部 : Eigen - C++で使える線形代数ライブラリ
  • RAII - Wikipedia

    RAII(Resource Acquisition Is Initialization)は、日語では「リソース取得は初期化である」「リソースの確保は初期化時に」「リソースの取得と初期化」などの意味を持ち、資源(リソース)の確保と解放を、クラス型の変数の初期化と破棄処理に結び付けるというプログラミングのテクニックである。特にC++とD言語で一般的であり、デストラクタをサポートしないC言語などに対する優位性や利便性のうちのひとつとなっている。 RAIIでは、資源の取得をクラス型変数の構築(初期化)時に、また返却を破壊時に行う。特にプログラムの制御フローが自動変数の属するブロックを抜けるとき、その変数のデストラクタが自動的に呼ばれるため、デストラクタを適切に記述したクラス型変数の寿命が終わるとすぐに資源が返却されることが保証できるようになる。これは例外が発生したときでも同様であるため、RAII

    you21979
    you21979 2014/11/03
  • 並列処理のためのC++ライブラリ拡張 ~C++17: 並列STLの概要

    C++11の標準ライブラリ<thread>を使った並列化 大量のデータを分割し、複数のスレッドに分担させて処理時間を稼ぐことを考えます。スレッドに関わるAPIは、WindowsならCreateThreadやWaitForNltipleObjectなど、Linuxならpthread_xxxxと、OSによって異なるのですが、C++11では標準ライブラリ<thread>がOSごとの差異を吸収してくれているのが嬉しいところ。大量のデータを詰め込んだvectorを2つのスレッドでソートしてみます。 #include <iostream> // cout, endl #include <thread> // thread #include <algorithm> // inplace_merge, etc. #include <chrono> // clock, time_point, duratio

    並列処理のためのC++ライブラリ拡張 ~C++17: 並列STLの概要
  • CEDEC2014 Live Coding in C++

    Note: download the slide will give your better experience. This talk was giving at PyConTW 2019. https://tw.pycon.org/2019/en-us/events/talk/839036452602904785/ Youtube video will be released later.

    CEDEC2014 Live Coding in C++
    you21979
    you21979 2014/09/11
  • C++ AMPを用いたGPUプログラミング

    コラムへ戻る 挨拶 必要なもの C++基礎(必須) C++AMP環境整備 C++AMP基礎事項 GPUを探してみよう!(acceleratorオブジェクト) GPUのメモリ(array) CPUからGPUのメモリへアクセス(array_view) 動的にメモリを確保(new array) array_viewのarrayの入れ替え GPUに計算させる(extent、ラムダ式) 2-3次元配列 GPUへの細かい値の転送(parallel_for_each()) arrayクラスの型を変更しよう(reinterpret_as(), view_as()) 特定の領域へアクセスできるarray_viewを作ろう(section()) 流行りのCPUメモリへのダイレクトアクセス(array) 共有メモリを使おう(tile_index) 自然対流への適応 どのくらい速くなるのか。 困ったときのQ&A

  • C++ AMPを用いたGPUプログラミング

    C++ AMP 目次へ 環境整備 環境整備はWindows7 , 8 でAMDGPUを搭載しているPCでの話です。 OSは7,8が必要要件となっていますが、GPUは最近のならどれでも構いません。コンパイル自体はVisual Studioがあればできるはずです。 C++ AMPはVisual Studio 2013でないとコンパイル出来ないと思います。Visual Studio 2013をインストールしてください。 Visual Studio 2013 http://www.microsoft.com/visualstudio/jpn/downloads のVisual Studio for Windows DeskTopを今すぐインストールでお願いします。リンクがなくなっていたら最新のやつでお願いします。 推奨GPU AMD R9 290X AMD R9 280X AMD HD 7990

  • C++ AMP Overview

    Note C++ AMP headers are deprecated starting with Visual Studio 2022 version 17.0. Including any AMP headers will generate build errors. Define _SILENCE_AMP_DEPRECATION_WARNINGS before including any AMP headers to silence the warnings. C++ Accelerated Massive Parallelism (C++ AMP) accelerates execution of C++ code by taking advantage of data-parallel hardware such as a graphics processing unit (GP

    C++ AMP Overview
  • C++ AMP (C++ Accelerated Massive Parallelism)

    This browser is no longer supported. Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support.

    C++ AMP (C++ Accelerated Massive Parallelism)
  • C++14 TS 並列アルゴリズムライブラリ - Faith and Brave - C++で遊ぼう

    N3724 A Parallel Algorithms Library C++14後のParallelism TSでは、並列アルゴリズムの導入が検討されています。 いま考えられているのは、アルゴリズムの実装を実行ポリシー(タグ)で分岐しようというもの。 std::vector<int> vec = ... // これまで通りの、シーケンシャルソート std::sort(vec.begin(), vec.end()); // 明示的なシーケンシャルソート std::sort(std::seq, vec.begin(), vec.end()); // 並列実行の許可 std::sort(std::par, vec.begin(), vec.end()); これは、CUDAのThrustライブラリが行っている設計を踏襲したものです。 このような作りにしておけば、今後の拡張がしやすいそうです(ベク

    C++14 TS 並列アルゴリズムライブラリ - Faith and Brave - C++で遊ぼう
  • C++14の言語拡張まとめ - Faith and Brave - C++で遊ぼう

    C++14は、C++11に対するマイナーアップデートです。仕様のバグ修正や、C++11の比較的小さめな機能不足を補うバージョンになっています。 細かすぎる変更はさすがに書きませんが、ある程度大きめの変更を以下にまとめます。 この内容は、正式に策定されるまでに変更される可能性があります。 コア言語 2進数リテラル 変数テンプレート 通常の関数の戻り値型を推論 ジェネリックラムダ 一般化されたラムダキャプチャ constexpr関数の制限緩和 どこからともなく現れる結果の規定(前半, 後半) [[deprecated]]属性 数値リテラルの桁区切り文字 サイズ付きのデアロケーション initializer-listによるaggregate初期化の制約緩和 ロックフリーの定義 シグナルハンドラでできることの制限緩和と明確化 ライブラリ make_unique() コンパイル時整数シーケンス tu

    C++14の言語拡張まとめ - Faith and Brave - C++で遊ぼう
  • C++14の仕様策定が完了しました - Faith and Brave - C++で遊ぼう

    We have C++14! - Standard C++ C++14のDIS(Draft International Standard)に対する各国の投票が行われ、満場一致で承認されました。各国から(主に日から)のコメントによる文面の細かな修正が残っていますが、その作業が完了次第、ISO/IEC 14882:2014(E) Programming Language C++、別名C++14の規格が発行されます。 C++14は、2011年に発行されたC++11に対するマイナーバージョンアップです。小さな機能追加、および文面のバグ修正が含まれます。 C++14の更新内容は、以下のエントリにまとめてあります: C++14の言語拡張まとめ コンパイラの実装状況(言語機能) 次はC++17です。そちらはメジャーバージョンアップになる予定で、その議論はすでに始まっています。

    C++14の仕様策定が完了しました - Faith and Brave - C++で遊ぼう
  • C++ mutable、volatileの使い方・速度 | 豆知識

    そもそもmutableという英語の意味は、goo辞書を参照して 変りやすい, 移り気の という意味のようだ。そもそも値を少しでも更新するならconstなど使うなという話でもあるが、パフォーマンスは向上させたいが、意味的にはconstなどという場合はやはりあるようでそんな場合には使えるのではないかと。 volatile volatileを変数に付け加えることで、コンパイラの最適化を無効にしレジスタではなく常にメモリにアクセスして変数を利用する。マルチスレッドなどでは、変数がどこでいつ変更されるかわからないので、このような指定が必要だとのこと。 ただ、CriticalSectionを利用してスレッドセーフにしておけばおそらくこのようなことは必要ないので、ここら辺はパフォーマンスの向上のため利用することとなるだろう。ということで次のようなコードで実験してみた。あるグローバル変数に対してvolat

    you21979
    you21979 2014/08/12
  • Ideone.com

    you21979
    you21979 2014/07/22
  • ネイティブ開発アンチパターン - 神様なんて信じない僕らのために

    ということで、最近はC++触ったりObjective-C触ったりJava触ったり、Lua触ったりしているわけですが、cocos2d-xに関してgumi Studyで話しました。とはいっても、中身は殆どcocos2d-xに関係ありません。 割と当たり前のことしか書いてないのですが、コンシューマゲームでも踏んだ「基的な罠」について書いてあります。 cocos2d-xを触っていると、かなりの人たちがC++を知らずにC++を書いているという現実に出くわします。そういうとき「動いているから」で突き進むのではなく、1度止まって、自分がそれを理解しているのかを考えて見てはどうでしょうか。 ネイティブ開発アンチパターン from Isoparametric !

    ネイティブ開発アンチパターン - 神様なんて信じない僕らのために