こんにちは。 現役エンジニアの”はやぶさ”@Cpp_Learningです。 仕事の都合もあり「C言語 ⇒ C++ ⇒ Python」の順にプログラミング言語を習得しました。 最近は、PythonとC/C++両方を使って仕事をしています。 Pythonでプログラミングをしていると…
COLUMN 組み込みエンジニアの戸惑い PythonからC言語を呼び出してみる①(Python/C APIを使った場合) # Python # エンジニア # 組み込みエンジニアの戸惑いシリーズ Python編 # 言語 2019-07-26 FSI Embedded 組み込みソフトウェアエンジニアがPythonを始めてみました。そして、第5の戸惑い、今回は組み込みとは切っても切り離せない「C言語」に関しての話題です。 Pythonを扱っていて課題となり得る、処理速度の改善や過去資産の流用など、そんなときに役立つかもしれない、PythonからC言語を呼び出す方法についてのご紹介です。 PythonからC言語、またはC++を呼び出す方法には様々なものがあります。以前の記事でもPython/C API (Python.h)やSWIG、boost.pythonなどを使うことで実現可能とご紹介し
この記事では、双曲正接を計算する CPython 用の C++ 拡張モジュールをビルドし、Python コードからそれを呼び出す手順について説明します。 Python では最初にルーチンを実装して、C++ で同じルーチンを実装した場合の相対的なパフォーマンス向上を示します。 Python インタープリターの機能の拡張には、C++ (または C) で記述されたコード モジュールが一般的に使われます。 拡張モジュールの主要な種類は次の 3 つです。 アクセラレータ モジュール: パフォーマンスの高速化を実現します。 Python はインタープリター言語であるため、C++ でアクセラレータ モジュールを記述してパフォーマンスを向上させることができます。 ラッパー モジュール: 既存の C/C++ インターフェイスを Python コードに公開するか、Python から簡単に使用できる、より Py
概要 C++ で作成した処理を Python から使用するには以下を始めとした複数の方法があります。 Python.h SWIG Boost.Python Shiboken pybind11 どの方法を使用するかは状況によって変わりますが Boost.Python では C++ 内から Python を呼び出せる(今回の例とは逆)という利点があります。Python と C++ の間で相互に呼び出しを行えるので、C++ で作成されたアプリケーションにマクロ言語として Python を組み込む相互に呼び出しを行うといったことができるようになります。 ここでは Linux(Ubuntu 18.04)上で Boost.Python を使用して Python (Python 3)用ライブラリーを作成する方法について説明します。 Boost.Python のビルド まず以下のコマンドで必要なパッケージ
C言語でPythonのモジュールを作ってみる 環境 Python 3.4.6 gcc version 4.8.5 openSUSE Leap 42.3 概要 Python勉強しているときに拡張モジュールの作り方が出てきて自分でも作ってみようと思った次第です。 個人的に色々つまったので、ここにノート代わりに書いておきます。 ゴールまでの流れ C言語でPythonのモジュールを作成 ↓ Pythonを使ってCをビルドする ↓ PythonでimportしてCモジュールを使ってみる C言語でモジュール作成 まず、C言語でPythonのモジュールを作成していきます。 PyObject型を多用します。とりあえず、Hello_worldとpushとpop作りました。 #include <Python.h> //Cの方で作成してPythonで利用する関数はPyObjectを使う static PyObj
1. Extending Python with C or C++¶ It is quite easy to add new built-in modules to Python, if you know how to program in C. Such extension modules can do two things that can’t be done directly in Python: they can implement new built-in object types, and they can call C library functions and system calls. To support extensions, the Python API (Application Programmers Interface) defines a set of fun
ベクトル/行列演算の定番ライブラリEigen (日本語解説のサイトまとめと便利な機能紹介) Eigenとは C++の行列/ベクトルを扱うライブラリ(公式). Eigenの主な特長 行列演算を直感的に書くことが出来る. ヘッダーファイルのみのライブラリのため,ライブラリのビルドやリンクが必要なく組み込やすい. 高速.他のライブラリとの比較ベンチマークはこちら(公式) 解説サイト(すべて日本語) Eigen - C++で使える線形代数ライブラリ(でらうま倶楽部)- 基本的な使い方とも幾何変換,クォータニオンなどの解説もあり. Eigen ー C++で線形代数を!(singular point)- 3回のポストで,幅広い機能について解説している. Robotics/Eigen(NAIST::OnlineText)- 基本的な機能の他に行列分解についても解説あり. Eigenの使い方 Eigenは
C言語初心者です。 SIMD命令を使って8×8行列を計算するプログラムを書いたところ、"segmentation fault" が実行の度に起きたり起きなかったりする奇妙なことになってしまいました。 どこが間違いなのか、どう改善すべきなのか、教えていただけると幸いです。 またswitch文のところは、ポインタとiを使って計算すべき所だと思うのですが、なぜか変数を使うと "segmentation error" が起きてしまいます。これに関しても理由が知りたいです。 以下がコードです。 #include <math.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <x86intrin.h> void print_vec(__m256 m) { printf("{"); for(int i=0;i<8
まとめ 8×8 行列の乗算アルゴリズムと 16×16 行列の加算アルゴリズムの両方で、それぞれ 1.77 倍と 1.8 倍となり、インテル® AVX バージョンのほうがインテル® SSE よりも優れた結果となりました。これは、インテル® AVX のほうが、レジスターの幅を活用することで 1 命令あたり 2 倍のオペランドを処理し、インテル® SSE よりも高いスループットを達成できることを示した良い例です。 行列式アルゴリズムでは、8 つの行列の行列式の計算を同時に実行することでパフォーマンスが向上しました。ただし、行列式の計算の前の 2 つの 8×8 転置により、パフォーマンスはやや制限されます。 一般に、アプリケーションはメモリー集約型よりも計算集約型のほうが、より優れたパフォーマンス・スピードアップが得られます。 ソースコード 完全なソースコードは http://software.i
C++のメモ Visualization Tool Kit(VTK)など トップページページ一覧メンバー掲示板編集 SIMD 最終更新: sonogi1 2014年08月28日(木) 22:44:43履歴 Tweet SIMDはCPUが持っているベクトル演算機能である. ベクトル長は128bitや256bitと短いが,配列の個々の要素に同一の操作をする場合,2倍〜10倍程度の高速化が簡単に見込める. 組み込み関数が用意されているため,通常のC++でそのまま記述することができる. 命令についてはIntel Intrinsics Guideを参照. SIMDを用いた行列の積の高速化 アルゴリズム AVX(Sandybridge以降) AVX2(Haswell以降) ベンチマーク結果 SIMDを用いた行列の転置の高速化 アルゴリズム ベンチマーク SIMDを用いた行列の積の高速化 AVXのベクト
Your browser needs frames to access their site.
#include <stdio.h> #include <string.h> int main() { char str[] = "日本語サンプル"; int length = strlen(str); printf("1文字目: %c\n", str[0]); printf("長さ: %d\n", length); return 0; } このように、単なるchar型として扱うと日本語を上手く処理できない。まあ、日本語が2バイト以上で表現されているので当たり前といえば当たり前なんだけど。 そこで、C/C++で上手に日本語を処理するための方法を2通り紹介したい。 ワイド文字を使う ワイド文字は、16ビット固定長で表現される多言語文字体型のことである。 C言語では、wchar_t型を用いてワイド文字を扱うことができる。 しかし、ワイド文字を扱うには、ロケールの設定が必要である。日本語だけ扱い
Windows10 概要 Windows10上にC++を使ってmicro:bitの実行ライブラリ micro:bit runtime を直接利用するプログラムの開発環境を構築する。 手順 micro:bit runtimeインストール方法は Offline Development - micro:bit runtime に従う。 Mbed のビルドシステム yotta と、EPROM 用ファイルをつくるための SRecord を入れることになる。 Pythonを入れる yottaはPython2.7.9以降を要求している。 未確認だがPython3.7でも問題は無いようだ。 インストーラーで入れてCコンパイラも入れたが、Cコンパイラの必要性は不明。 参照: Python 2.7のインストール - python.jp CMake を入れる インストーラーで導入。 Download | CMa
本ページの資料は私 (金丸) が 2008 年度から工学院大学にて行っている講議「プログラミング演習 I」の資料に基づいています。 機械系学生が対象であるので、細かな文法にこだわることより画像処理などの具体例を用いて プログラミングの本質をつかんでもらうことを重視しています。 そのため内容はある程度限定せざるを得ませんが、このページで学んだ内容を足掛かりにして、 各自が C/C++ の自習を継続するための実力をつけてくれればよいと思います。 なお本講義の内容を、ブラウザ上で動作するオンラインコンパイラで学べるよう 若干簡略化した「オンラインコンパイラで C/C++ を自習しよう」も公開していますのでお好みでどうぞ。 2020.07: Visual Studio 2019 で演習を行えるよう加筆しました。
Windowsサービスから現在のログオンユーザを取得するプログラム。 サービスから取得するには、通常のGetUserNameとかでは取得できないっぽい。。 色々と調べた結果、下記で取得できそう。 まぁ、自己責任でお願いします。 ソース #include "wtsapi32.h" #pragma comment(lib, "wtsapi32.lib") void CTest::GetActUserName() { PWTS_SESSION_INFOW pStSesInf = NULL; DWORD dwCount = 0; DWORD dwSesId = 0; DWORD dwSize = 0; LPTSTR lpNameTmp = NULL; // ログオンユーザのセッションリストを取得する if( ::WTSEnumerateSessionsW( NULL, 0, // 予約(必ず0を指
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く