タグ

Cに関するKazumi007のブックマーク (17)

  • PyTorchやPythonなしの純粋なC言語を使用した大規模言語モデルトレーニングツール「llm.c」がリリースされる

    AI体と言える大規模言語モデル(LLM)のトレーニングはほとんどの場合PyTorchPythonを使用して行われていますが、そうしたトレーニングを純粋なC言語のみで実装したツール「llm.c」が登場しました。まだ最適化が行われておらず従来の手法に速度面では敗北していますが、GPT-2のトレーニングを行う実装を約1000行のクリーンなコードで行えています。 GitHub - karpathy/llm.c: LLM training in simple, raw C/CUDA https://github.com/karpathy/llm.c 作者のアンドレイ・カルパシー氏はOpenAIの創設グループの一員で、テスラのAIディレクターだった事もある人物です。 llm.cを使用することで、245MBの容量を持つPyTorchや107MBの容量を持つcPythonを使用せずに大規模言語モデル

    PyTorchやPythonなしの純粋なC言語を使用した大規模言語モデルトレーニングツール「llm.c」がリリースされる
    Kazumi007
    Kazumi007 2024/04/13
    誰もが一度は考える実装だけど、AI専門家がやると説得力が増す気がする
  • a21_txt01 - essen-wiki

    (註)「.exeの大きさ」はWindows向けにgcc(MinGW)でコンパイルした時の大きさです。 しかしここで扱う言語処理系は、Windows専用というわけではなく、他のOSでも問題なく動作するようになっています。 純粋に言語処理系の規模の目安を示すために書いてあります。 基的には小さければ小さいほどシンプルで、教材として理解しやすいと思っています(可読性を下げてまでのコンパクト化をやらないとして)。 行数を書いているのも同じ意図です。行数だけだと、1行の文字数をうんと増やすことで、見かけ上の行数を減らすことができますが、そんなことをしても実行ファイルサイズは減らないので、 この二つを併記すれば、規模感の目安としては十分だと思っています。 「速度のめやす」は、C言語で10億回ループさせた場合と、この言語で10億回ループさせた場合の処理時間の比を書いています。数が大きいほうが遅いです。

    Kazumi007
    Kazumi007 2023/07/03
    自作言語入門。jitもある
  • Catch-23: The New C Standard Sets the World on Fire - ACM Queue

    Kazumi007
    Kazumi007 2023/04/02
    C23は以前のC標準よりもさらにC++から離れており、CはC++のサブセットとは言い難くなっている
  • ESP32のアセンブラを読み解く

    はじめに 前回の記事ではESP32を対象に、C/C++からインライン・アセンブラを使用する手順を説明しました。今回はもう少し踏み込んで、アセンブラの練習にお勧めの方法と、調べてもわかりづらい重要なポイントを説明していきます。 前提条件 XtensaコアのESP32シリーズ (ESP32/ESP32-S2/ESP32-S3) を使用していること。 ArduinoIDEまたはVSCode+PlatformIOでESP32用のプログラムを実行できること。 C/C++をある程度読書きできること。 ※ ESP32-C3などはXtensaコアではないため、記事の対象から外れます。 アセンブラコードのサンプルを手に入れる アセンブラを書くためには、どんな命令が用意されているかを把握しておく必要があります。それには 前回の記事 の冒頭で入手をお勧めした Instruction Set Architect

    ESP32のアセンブラを読み解く
  • Linuxにおけるデバイスファイルの仕組み

    Linuxにおけるデバイスファイルはデバイスをファイルという概念を通して扱えるようにしたものです。デバイスファイルは通常のファイルと同様に読み書きを行うことができます。しかし実際には、その読み書きはデバイスドライバを通じてデバイスの制御に変換されます。 この記事では、デバイスファイルへの読み書きがどのようにデバイスの制御に変換されるのかを説明します。デバイスファイルはデバイスドライバとファイルの2つのコンポーネントに依存したものであるので、最初にデバイスドライバ、次にファイルについて説明し、最後にデバイスファイルがどのようにデバイスドライバと結び付けられるかを解説します。 この記事の内容は主に詳解 Linuxカーネル 第3版及びhttps://github.com/torvalds/linux/tree/v6.1によります。 目次 デバイスドライバ デバイスドライバの実例 read_wri

    Linuxにおけるデバイスファイルの仕組み
  • C言語の正しいヘッダファイルの書き方 - saito’s blog

    最近、仕事でC言語での組み込み系の開発に携わっています。 開発中のコードを眺めていると、ヘッダファイル内にstatic関数のプロトタイプ宣言を記述していたり、ヘッダファイル内で不必要に他のヘッダファイルをインクルードしているなど、ヘッダファイルの書き方が分かっていないと思われる箇所が多々見られました。 実際、C言語の入門書でもヘッダファイルの書き方を詳しく説明しているものは、僕の知っている限りでは存在しないので、C言語を使っていてもヘッダファイルの正しい書き方を知らない人が少なくないのではないかと思われます。 そこで、このエントリでは、C言語のヘッダファイルの書き方について、僕が知っているテクニックをまとめてみました。 インクルードガードを書く ヘッダファイルファイルで他のヘッダファイルをインクルードしていると、いつの間にか同じヘッダファイルを2回インクルードしてしまうことがあります。 例

    C言語の正しいヘッダファイルの書き方 - saito’s blog
    Kazumi007
    Kazumi007 2023/03/04
    普通
  • DCL12-C. 抽象データ型は opaque な型を使って実装する

    DCL12-C. 抽象データ型は opaque な型を使って実装する 抽象データ型はオブジェクト指向言語であるC++Javaに限られたものではなく、C言語でも、作成し使用されるべきものである。抽象データ型が最も効果を発揮するのは、プライベート(opaque)データ型や情報の隠ぺいを実現するときである。 違反コード 以下のコード例は CERT が開発した managed string library に基づく。[Burch 2006]この例では、managed string 型およびこの型に対して演算を行う関数が、以下に示す string_m.h ヘッダファイルで定義されている。 struct string_mx { size_t size; size_t maxsize; unsigned char strtype; char *cstr; }; typedef struct strin

    DCL12-C. 抽象データ型は opaque な型を使って実装する
  • C言語でOpaqueポインタを使って構造体のメンバを隠蔽する - minus9d's diary

    C言語で、自作の構造体のメンバをユーザに開示しないテクニックとして、Opaqueポインタというものが知られています。今回は、書籍「C++のためのAPIデザイン」の3.1.6節を参考に、Opaqueポインタを使う簡単なサンプルを紹介します。 Opaqueポインタを使わない場合 人に関するデータを集めた構造体Personと、その構造体を使ったライブラリを作成することを考えます。以下にPerson.hのコードを示します。 #pragma once typedef struct _Person { int age; } Person; // 以下、Person構造体に関するAPI Person* createPerson(int age); // Person構造体のオブジェクトを生成 void printPerson(Person* ptr); // Person構造体を使った操作(メンバのプリ

    C言語でOpaqueポインタを使って構造体のメンバを隠蔽する - minus9d's diary
    Kazumi007
    Kazumi007 2023/03/04
    Opaqueポインタの例
  • マイコン入門 ウォッチドッグタイマの役割と機能の解説

    ウォッチドッグタイマとはどんな機能なのかウォッチドッグタイマって不思議な名前ですね。どのような機能なのかをイメージから知っていきましょう。 ウォッチドッグタイマの動作イメージウォッチドッグとは番犬のことなのですが、マイコンにおけるウォッチドッグタイマとは時間を利用したシステム異常を検知するための仕組みです。 タイマ機能に対してクロックが入力されるとタイマはカウントを行うのでした。ウォッチドッグタイマはカウンタ用のTCWDレジスタがオーバーフローするとシステムがリセット(再起動)します。 そのためオーバーフローしないように定期的にカウンタをクリアしてあげる必要があります。これはエサを一定期間与えないと吠える犬のようなものなのです。 ウォッチドッグタイマの役割なぜ、このようなシステムを再起動する仕組みが設けられているのでしょうか。 プログラムにおいて不具合というのは避けられないものです。組み込

    マイコン入門 ウォッチドッグタイマの役割と機能の解説
    Kazumi007
    Kazumi007 2023/02/22
    WDTの使い方。同じ値をレジスタに二回書くのが興味深い
  • DebianでH8用のGCCをビルドする(2020年版) - Qiita

    結論 以下の組み合わせでH8/300H用のツールチェインがビルド可能。(11/4 追記:ただしnewlibの動作を実機マイコンで確認していない。GCCはH8/3664Fでの動作を確認済み) Debian 10.6 binutils-2.30 gcc-8.4.0 newlib-2.5.0 はじめに Debian/UbuntuにはH8/300H用のパッケージ(gcc-h8300-hms 3.4.6,binutils-h8300-hms 2.16.1)が用意されているものの,既にバージョンが古くnewlibもない。 また,各所で紹介されている情報も古くなりつつあるため,最低限のアップデート情報を紹介する。 準備 以下のパッケージをインストールする。 apt install build-essential libgmp-dev libmpfr-dev libmpc-dev bison flex t

    DebianでH8用のGCCをビルドする(2020年版) - Qiita
    Kazumi007
    Kazumi007 2023/02/09
    クロスコンパイラインストールにporgを使う
  • A lock-free, concurrent, generic queue in 32 bits

    This article was discussed on Hacker News. While considering concurrent queue design I came up with a generic, lock-free queue that fits in a 32-bit integer. The queue is “generic” in that a single implementation supports elements of any arbitrary type, despite an implementation in C. It’s lock-free in that there is guaranteed system-wide progress. It can store up to 32,767 elements at a time — mo

  • memologue - シグナルハンドラを使わないでシグナルをハンドルする

    「シグナルハンドラの中でできることは非常に限られているんですよ」というお話を1年半くらい前に書きましたが、この話には続きがあって、ある特定の条件下ではこの制限を緩和することができます。今回はその方法についての解説です。sigwait(3)という関数を使います。 ※ この話、うっかり書き忘れていました。ちょっとしたきっかけで思い出したので、暇があるうちに書いておきます。 ■「シグナルを待つ」処理 〜従来の方法〜 皆様、「シグナルの到着を待つ」処理を、次のように書いてしまっていないでしょうか? // シグナルハンドラ void handler(int signo) { // この中で使って良いのは非同期シグナルセーフ(async-signal-safe)な関数のみ }を用意して、 sa.sa_handler = handler; sigaction(SIGHUP, &sa, NULL); ..

    memologue - シグナルハンドラを使わないでシグナルをハンドルする
  • ARM gcc バッドノウハウ集: EABI と legacy ABI

    次のページ 前のページ 目次へ 8. EABI と legacy ABI 8.1 ABI とは ここでいう ABI (Application Binary Interface) とは,C コンパイラにおいて 構造体への要素の詰め込みかた 関数呼出し時に どのレジスタを関数の引数として利用し,どのレジスタに戻り値が入るか どのレジスタを呼出元でスタックに退避し,どのレジスタは呼び出し先 で破壊しても問題ないか そもそもどのレジスタをスタックポインタとして利用するか などを定義したものです. 8.2 ABI の種類 現在,ARM Linux 上で使われている ABI には以下の2つの種類があります. 従来から ARM gcc で使用されている ABI. gcc でのコンパイルオプションは -mabi=apcs-gnu です. ARM EABI ARM holdings が定義 http://w

    Kazumi007
    Kazumi007 2019/09/21
    ABI
  • C/C++ から WebAssembly へのコンパイル - WebAssembly | MDN

    環境を設定した後は、C のサンプルコードを Wasm にコンパイルする方法を見てみましょう。 Emscripten でコンパイルするときにはいくつかのオプションがありますが、この記事でカバーする主な 2 つのシナリオは次のとおりです。 Wasm にコンパイルし、コードを実行するための HTML とウェブ環境上で Wasm を実行するための全ての JavaScript グルーコードを生成する。 Wasm にコンパイルと JavaScript の生成だけ行う。 2 つについて見てみましょう。

    C/C++ から WebAssembly へのコンパイル - WebAssembly | MDN
  • Xv6を使ってみる – dyama's page

    Xv6 というのは、マサチューセッツ工科大の院生向け教材として、UNIX V6 を ANSI の C で書き直し、x86 CPU 向けに書き直したオペレーティング・システムです。 講義用の資料とソースコード、ビルド環境( MakeFile や QEMU オプション )などの一式が、無料で公開・配布されています。 詳しい情報は、下記のページを参考にしてください。 Xv6, a simple Unix-like teaching operating systemxv6Wikipedia, the free encyclopedia なお、V6 を含む UNIX のソースコードは次の URL で BSD ライセンスのもと公開されています。 The Unix Tree クイック・スタート とりあえず動かしてみます。C の x86 コンパイラセットと、QEMU、Git 環境を整えます。最近の

  • GFWX

    Usage Examples Let's look at some code. I'm going to use OpenCV to load and save images, but please note you can use whatever libraries you want with GFWX because it has no dependencies. First let's load an image, and save it in GFWX format: That's a complete code example. How about decoding: You can also downsample the image by any power of two by changing a few lines: This produces the following

    Kazumi007
    Kazumi007 2018/11/10
  • ツイッターで出題した未定義問題のお詫びと調査と解説について - paiza times

    Photo by Alan Becker Capuyá 青木です。 先日、paizaのツイッターアカウント(@paiza_official)で出題した四択問題について、皆様からたくさんのご指摘・ご批判をいただいたので、その経緯と結論をお伝えします。 次のような問題を考えて出題しました。 int i = 0; のときに評価値が1になるのは— paiza[パイザ] (@paiza_official) 2016年12月26日 【補足】C言語,C++,Javaを想定しています— paiza[パイザ] (@paiza_official) 2016年12月26日 当初は、それぞれの評価値は順に2, 3, 1, 2となり、3つめの"i++ + i++"の選択肢が答えとなることを想定していました。 ですが、しばらくすると、次のようなリプライやツイートをいただきました。 全部C(たぶんC++/Javaも)だ

    ツイッターで出題した未定義問題のお詫びと調査と解説について - paiza times
    Kazumi007
    Kazumi007 2016/12/28
    こんなコード書かないと思うんだけど、この問題でスキルを評価できるんだろうか?
  • 1