5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

【最速へ】LowLevelVirtualMachine【LLVM】

1 :デフォルトの名無しさん:2008/05/23(金) 22:00:55
Native用言語向け仮想機械、LLVM(低水準仮想機械)について語りませう。
いくら探しても無いので立てました。

本家: ttp://llvm.org/
参照: ttp://ja.wikipedia.org/wiki/Low_Level_Virtual_Machine



35 :デフォルトの名無しさん:2008/07/30(水) 23:57:06
しばらく前だけど、LLVM2.3のベンチマークが載っていた。

http://journal.mycom.co.jp/news/2008/07/07/016/index.html
http://www.stefankrause.net/wp/?p=9

この結果はlliを使っているようなので、
llcを使ってネイティブコンパイルした場合の結果が
気になるところだ。

LLVM2.2のベンチマークはこちら。
http://lucille.atso-net.jp/blog/?p=430

それから、LLVMの勉強会が開かれるらしい。
場所は恵比寿なので、東京近郊の人は行ってみれ。

http://groups.google.co.jp/group/llvm_study/web/%E7%AC%AC%E4%B8%80%E5%9B%9E+llvm+%E5%8B%89%E5%BC%B7%E4%BC%9A



36 :デフォルトの名無しさん:2008/08/07(木) 21:08:11
ttp://llvm.org/devmtg/2008-08/

37 :デフォルトの名無しさん:2008/08/30(土) 11:05:57
ttp://www.cups.org/articles.php?L562+TNews+P1+Qlpd+ipp
>Removed unused variables and assignments found by the LLVM "clang" tool.
>Added NULL checks recommended by the LLVM "clang" tool.

ttp://lists.cs.uiuc.edu/pipermail/cfe-dev/2008-August/002670.html
>this is a basic idea of Blocks: it is closures for C.
>It lets you pass around units of computation that can be executed later.

38 :デフォルトの名無しさん:2008/10/05(日) 02:11:25
なんだか過疎ってるね
なんかネタない?

39 :デフォルトの名無しさん:2008/10/05(日) 19:14:38
ttp://llvm.org/devmtg/2008-08-23/

40 :デフォルトの名無しさん:2008/10/06(月) 02:35:16
寝る前にベンチでも取ってみようかと、Mingw32/x86のllvm-gccとllvm-ldでgzipコンパイルしたんですけど、
lliで実行すると

ERROR: Program used external function 'close' which could not be resolved!

というエラーが出ます。
ビルドがうまくいってないのかと思い、

#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fp;
fp = fopen("out.txt", "w");
if(fp == NULL) { fprintf(stderr, "error: fopen"); exit(1);}
fprintf(fp, "hello world\n");
close(fp);
return 0;
}

みたいなコードで試してみたんですが同じエラーが出ました。
close()をコメントアウトすると動いているようです。
mingw版は外部のライブラリとのリンクはまだうまくできないんですかね?

41 :デフォルトの名無しさん:2008/10/06(月) 02:50:29
fclose

42 :デフォルトの名無しさん:2008/10/06(月) 03:27:27
>>41
ですね・・・失礼しました;;

念のため
int main() { close(0); return 0;}
というコードでも試してみたんですが、やはりリンクはできないようでした。
gzipをfopen(), fclose()を使うように書き換えてみる or gzipはあきらめるなど
また今度試してみようかと思います。

43 :デフォルトの名無しさん:2008/10/06(月) 03:43:02
MinGWはmsvcrt.dllを使っていて、そこではcloseがANSI C標準に入っていないという理由で
_open/_closeという名前になっているのが原因か?
MinGWはろくに使ったことがないけど。

44 :デフォルトの名無しさん:2008/10/06(月) 08:34:03
>>39
第1回勉強会か。英語で紹介されるとカッコいいなw
第2回ってないの?あるなら行きたいんだけど

45 :デフォルトの名無しさん:2008/10/06(月) 17:28:24
>>42
>>43の言うとおり、Win32 CRTでは、ANSI C標準に入っていない関数(UNIXで言うところの
システムコールも含む)は先頭に_をつけた関数名になる。
だから、MinGWでビルドするならすべて名前を変更しなければならない。
たぶんストリーム関数を使うように書き換えるより、open, close, read, writeあたりを
_つきに置き換える方が楽だと思う。

46 :40:2008/10/08(水) 02:35:22
>>43 >>45
ありがとうございます。一部関数を'_'つきに変えたら何とかコンパイルはできました。
ただ挙動がかなりあやしげですが・・・。たとえば引数無しで実行すると反応がなかったり。
一応解凍はできるようになったみたいなんでベンチとってみました。
計測はtimeコマンドでやりました。
結果見るとllvmでいい結果がでてますが、gccでのコンパイル、llvm-gccでのコンパイルともに
完全ではないなので参考までということで。
ちなみに
llvm-2.3(gzip-1.2.4) はgzip-1.2.4をllvm-gccでコンパイルし、lliで実行したものです。
llcでのネイティブへの変換はうまくいきませんでした。
gcc-3.4.4(gzip-1.2.4) はgzip-1.2.4をcygwinのgcc-3.4.4でネイティブバイナリにコンパイルしたものです。
cygwin(gzip-1.3.12) は配布されているcygwinのバイナリです。
==== llvm-2.3(gzip-1.2.4)
user 0m0.031s
user 0m0.031s
user 0m0.015s
user 0m0.000s
user 0m0.015s
==== gcc-3.4.4(gzip-1.2.4)
user 0m5.085s
user 0m5.054s
user 0m5.054s
user 0m5.163s
user 0m4.897s
==== cygwin(gzip-1.3.12)
user 0m4.914s
user 0m5.413s
user 0m5.038s
user 0m5.163s
user 0m5.085s
正しく計測ができていなそうですが、せっかく測ったので。

47 :40:2008/10/08(水) 02:36:36
あと、
gzip-1.2.4をllvmでコンパイルするパッチを
http://codepad.org/doeKoAQi
に、(パッチ当てた後 BUILD.sh を実行すればコンパイルできるはずです)
テストに使用したスクリプトを
http://codepad.org/T4LSsUpK
に、このスクリプトの実行結果を
http://codepad.org/RZyAm3Tb
にはりました。


48 :デフォルトの名無しさん:2008/10/08(水) 09:38:16
gcc も -O3 だけじゃなくて最適化オプションいろいろ調整すれば
もうちょっとはやくなったりするので、何を持って llvm-gcc の速度というか疑問だったりするんですが。

49 :デフォルトの名無しさん:2008/10/10(金) 07:19:30
mingwのllvm-gccとcygwinのgccで比較しちゃダメでしょ。
cygwin gccのバイナリの方がが遅いのは当たり前。

50 :デフォルトの名無しさん:2008/10/10(金) 21:50:25
うお、よく見たらCygwinと比較してるのか。ダメすぎるぞ。
確かにCygwin版ならopen(2)とかclose(2)とかがそのまま使えたかも知れないが、
それはCygwinでそのあたりの関数群をエミュレーションしてるからだ。だからむちゃくちゃ
遅くなる。
llvm-gcc版と全く同一のコードでビルドできるから、MinGW-gccでもう一度やり直し。

51 :デフォルトの名無しさん:2008/12/02(火) 23:03:18
オレ言語コンパイラをllvm対応させるとどんなよいことがありますか?

52 :デフォルトの名無しさん:2008/12/02(火) 23:10:51
Alchemy使ってFlash化できるかもしれない。
いや、俺まだ触ってもいないけど。

53 :デフォルトの名無しさん:2008/12/03(水) 01:27:06
最適化とかを自分でやらなくて済むくらいかな
でもこれはgccでも一緒か。作業的にはC++で書かれてる分LLVMのが楽そうだけど

54 :デフォルトの名無しさん:2008/12/03(水) 07:33:37
いやgccは魔境らしいからLLVMやろうぜ

55 :デフォルトの名無しさん:2008/12/14(日) 02:54:18
一応書いておくと、LLVMの開発系MLは以下で読めるよ。

ttp://lists.cs.uiuc.edu/pipermail/llvmdev/

今月分
ttp://lists.cs.uiuc.edu/pipermail/llvmdev/2008-December/date.html

56 :デフォルトの名無しさん:2008/12/17(水) 18:05:00
clangとLLVMをベースにしたOpenCLの実装が開発中らしい。

http://lists.cs.uiuc.edu/pipermail/llvmdev/2008-December/018913.html

57 :デフォルトの名無しさん:2008/12/27(土) 19:51:36
これWindowsだとどう処理されるの?
一応実行中のバイナリは書き換えできないよね?

58 :デフォルトの名無しさん:2008/12/27(土) 19:57:26
>>57
実際のところ、実行時最適化は Windows 以外でも使われてない。

59 :デフォルトの名無しさん:2008/12/29(月) 09:28:27
やったとしても"バイナリ"を書き換える必要はないだろうけどね

60 :デフォルトの名無しさん:2009/01/13(火) 08:16:38
>>56
clangもLLVMもOpenCLも、Appleが主導してるようなものだからなぁ。
結局は積極的に利用するのはAppleくらいなものじゃないのかね。
LLVM-GCCもiPhoneくらいだろ?実際に使ってるの。

61 :デフォルトの名無しさん:2009/01/13(火) 10:56:42
その実装はAAPLとは全く別でしょ。
最近VMMに買収されたらしいよ。

62 :デフォルトの名無しさん:2009/01/13(火) 14:49:29
>>59
if(a<5&&b<10)break;
ってな条件があって成功しない
確率の方が多い時(ループ中のbreakとか)
実際の利用状況としてa<5は頻繁に成立しまう場合は
if(b<10&&a<5)break;
と書き換えてしまった方が早くならない?
とくにファイルに保存したデータの状況によって
b<10とa<5の成立頻度が変わる場合は便利な気がする。

63 :デフォルトの名無しさん:2009/01/13(火) 21:52:15
それならどのみち分岐予測が効くから違わんのでない?

64 :デフォルトの名無しさん:2009/01/14(水) 08:59:57
>>62
(直前のレスを読んだなら)>>59が言ってる"バイナリ"は、オンメモリの実行コードのことじゃないことはわかっていると思うが…
結局の所、実行ファイルを書き換える必要は無いよな

65 :デフォルトの名無しさん:2009/01/14(水) 13:49:10
そう?実行時に書き換える手間が減るからある程度は効果ありそうに思うけど

66 :デフォルトの名無しさん:2009/01/15(木) 09:33:51
実行ファイルとngenのキャッシュ的なものがごっちゃになってる気がする
独自のJITキャッシュデータの話なら、書き換えできるできないの話にはならないし
実行ファイルそのものを書き換えるという話なら、USBに入れて使えない

67 :デフォルトの名無しさん:2009/02/09(月) 19:39:06
llvm-gcc -emit-llvm -S で吐き出したコードの中に

%val = load i32* getelementptr (%struct.S* @b, i32 0, i32 0)

のような、load 命令の中で getelementptr 命令を使っている行がありました。

LLVM IR にこのような文法があるのでしょうか?
リファレンスマニュアルを見ましたがこの文法が見当たりませんでした。

68 :デフォルトの名無しさん :2009/02/09(月) 23:23:53
llvmを使って新しいカーネル作れないかな?

69 :デフォルトの名無しさん:2009/02/10(火) 18:20:42
LLVM の最適化は自動ベクトル化に対応しているでしょうか?

2つの4次ベクトルの要素をすべて取り出して、対応する要素を加算して、
加算の結果をまたベクトルに戻す処理を書いたのですが、opt -std-compile-opts
で最適化しても1つのベクトル加算に変換されていませんでした。

70 :デフォルトの名無しさん:2009/03/02(月) 14:08:49
>>67
亀レスだけど、ConstantExprのことかな?
マニュアルには載っていないので、ソースコードを読まないと分からない。
ExpressionをConstantとして扱う機能だから、
この場合はgetelementptr命令の返却値をload命令の引数にするという意味。
(ConstantExprの場合は括弧が追加される)

「include/llvm/Constants.h」と「lib/VMCore/Constants.cpp」にある
定義を読み「lib/VMCore/AsmWriter.cpp」でLLVM IRとしては
どんな文字列が出力されるのか確認すれば、分かるようになるかもね。

分からなければ、自分ではConstantExprを使わずに、
別のInstructionに分けて書けばいいと思ふ。
(この場合はgetelementptr命令の返却値を一度変数に代入する)



71 :デフォルトの名無しさん:2009/03/02(月) 14:10:14
第2回勉強会をやるみたいだね。
興味のある人は参加してみては。

http://atnd.org/events/381



72 :デフォルトの名無しさん:2009/03/02(月) 21:56:22
>>71
もう申し込んだよ。楽しみだー。

73 :デフォルトの名無しさん:2009/03/09(月) 19:22:48
HLVMのアルファ版が出たようだ。
コンパイラや言語を自作したい人は、これをベースにすると楽ができるのかも。

http://lists.cs.uiuc.edu/pipermail/llvmdev/2009-March/020729.html



74 :デフォルトの名無しさん:2009/03/14(土) 23:26:46
教えてもらいたいんだけど、
LLVMのJITって
lli + *.bcのビットコードの状態じゃないと有効じゃないの?
llcでネイティブなコードした実行ファイルの状態だと
普通のコンパイラがはいたバイナリと同じ?

75 :デフォルトの名無しさん:2009/03/15(日) 20:51:40
そう。
それにデフォルトの状態では特にJITであること生かした動作してない気がする。

76 :デフォルトの名無しさん:2009/03/16(月) 21:27:06
>>75
ありがとう。
llvm-ldで実行ファイルできるじゃん
って思ったら.bcをlliに渡すラッパーだったw

ところで、mingw用のインポートライブラリを
変換する方法ってないんですかね?


77 :デフォルトの名無しさん:2009/03/21(土) 00:11:46
勉強会age
このスレまだ100も行ってないのかyo

78 :デフォルトの名無しさん:2009/03/21(土) 00:45:56
>>73
軽く読んでみた限り思ったよりHighLevelじゃないしあんまりメリットが見えない。
OCamlはかじった程度なんで間違ってたら解説よろしく。

>>77
ユーザーの絶対数少なそうだし。
勉強会の懇親会で食中毒でも起こったら日本のLLVM関係者の1割ぐらい減るんじゃなかろうか。

79 :会場の人:2009/03/21(土) 12:37:18
>>77
もう明日か。
思いのほか人数増えちゃってgkbrしてます。入りきるかなー・・・。
色々不手際あるかと思いますがゴメンナサイ。と、今から誤っておくます。ヒー

電源タップの数がまずもって全然足りてないので、
ノートPC持ってくる人は満充電にしてきてね!

80 :デフォルトの名無しさん:2009/03/21(土) 13:55:22
>>79
電源タップもって行けば会場の電源の容量は足りますか?

81 :会場の人:2009/03/21(土) 15:01:47
電源容量は・・・調べてませんがノートくらいならまかなえると思います。さすがに。
もし火を吹いたら、消火のご協力をお願い致します。w

というか電源タップ持ってきて頂けると非常に有難い!ありがたやー!

82 :デフォルトの名無しさん:2009/03/22(日) 23:33:28
>>主催者&発表者各位
お疲れさまでした。なかなか楽しめました。ありがとう。
自分で触っている人あんまりいなかったのかなー。
>>81
おれ電源タップひそかに持っていったんだけど、いらなかったみたいねorz

83 :会場の人:2009/03/22(日) 23:52:12
>>82
ご協力頂き有難うございました!
思ってたより、ノートPC持ってきた人少なかったですねw


新しく買ったノートにLLVM入れたいんだけど、MinGWのインストーラが
ネットにつながってくれない・・・。('A`)

84 :デフォルトの名無しさん:2009/03/25(水) 01:42:48
海外出張と重なって勉強会に行けませんでした (泣
次回は参加するぞ〜。

25 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.02 2018/11/22 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)