"Draft of OpenMP C/C++ 2.0 Specification released for Public Comments"として
>Control of the number of threads for multi-level parallelism
なんていうのもあります。
クラスタマシンを主なターゲットにしているとはいえ、HT-Pen4では
ノード間/ノード内/CPU内と、スレッド発行でも様々なレベルの並列処理が
行われるので、並列レベルを一つのマクロ変数で定義するのではなくしたのは
場面によっては大きな効率化になるのではないかと。
The Intel C++ Compiler for Linux has substantially improved its source and binary compatibility with GNU C/C++, providing stronger C++ ABI conformance, wider gcc extensions support, and the ability to build the Linux kernel with fewer modifications.
#include <stdio.h>
typedef int int2int(int);
int g(int b, int2int* padd) {
return (*padd)(b);
}
int f(int a, int b) {
int add(int n) {
return n+a;
}
return g(b, add);
}
int main(void) {
printf("%d\n", f(1,2));
return 0;
}
でも GCC とちょっと違うんだよねぇ (スコア:2, 参考になる)
HT対応というから何か特別なことをするのか (スコア:1)
もやります、ってことらしい。それはただのスレッド対応でないの?
HT対応自動並列化というなら、片方のスレッドは浮動小数点演算ばかり、
もう片方は整数系演算ばかりにして内部の演算器を効率よく使ってくれるとかしてほしいな。
もちろんハードを作ってる会社のコンパイラが一番速いんだろうけど。
あぁ、「ン」が消えてるんですよ。「ビーフン・カレー」ね。
Re:HT対応というから何か特別なことをするのか (スコア:2, 参考になる)
2.0はまだ触ったことはないのですが、オフィシャルサイト [openmp.org]によると
"Draft of OpenMP C/C++ 2.0 Specification released for Public Comments"として
>Control of the number of threads for multi-level parallelism
なんていうのもあります。
クラスタマシンを主なターゲットにしているとはいえ、HT-Pen4では
ノード間/ノード内/CPU内と、スレッド発行でも様々なレベルの並列処理が
行われるので、並列レベルを一つのマクロ変数で定義するのではなくしたのは
場面によっては大きな効率化になるのではないかと。
>HT対応自動並列化というなら、片方のスレッドは浮動小数点演算ばかり、
>もう片方は整数系演算ばかりにして内部の演算器を効率よく使ってくれるとかしてほしいな。
それって細切れパイプラインのPen4で効果あるんでしょうか・・・・
kaho
Re:HT対応というから何か特別なことをするのか (スコア:0)
ただの自動スレッド対応ですね。
Linux版は (スコア:1)
しかし、「幅広gcc拡張子サポート」って……
原文は"wider gcc extention support"とかなんとかだと思いますが。
Re:Linux版は (スコア:1)
Re:Linux版は (スコア:0)
「より広範なGCCの拡張をサポート」
ってことですか?
#内容はよくわかんないのでAC
gccの拡張 (スコア:2, 参考になる)
こんなネストした関数も動きます。
intel のコンパイラではサポートしてなさそうですが(^^;
#include <stdio.h>
typedef int int2int(int);
int g(int b, int2int* padd) {
return (*padd)(b);
}
int f(int a, int b) {
int add(int n) {
return n+a;
}
return g(b, add);
}
int main(void) {
printf("%d\n", f(1,2));
return 0;
}
Re:gccの拡張 (スコア:2, すばらしい洞察)
Re:gccの拡張 (スコア:2, 参考になる)
いえいえ、ネストした関数を書くのはpascal(Oberon,Algol,Ada,等)では基本です。
いったん慣れると、コレ無しではいられません。
とゆーか、最初Cを見たとき
「ネスティング出来ないでまっとうにプログラム書けるのぉ?」
と思ったっす。
-----------------
#そんなワタシはOS/2ユーザー:-)
Re:gccの拡張 (スコア:1)
ネスト可能な関数は、Pascal サポートの副産物だそうですよ。
# Pascal 書くほうが問題だとかいうとフレームの元なので注意しよう
Re:gccの拡張 (スコア:1)
この例ではあまりに簡単すぎて有用性が分かりにくいのですが
という場合には便利です(私は多分互換性重視で使いませんが).
問題は, 伝統的なC言語にはファイルを分割する以外にクラスやモジュール(Modulaなんか)の様に明示的に名前空間を制御する機能が欠けていることだと思います.
Re:gccの拡張 (スコア:1)
この例の肝は、ネストされた関数addが親スコープの変数aの値を
参照しているということだったりします。
closure もどきなんですよね。(外には返せないので別物ですが)
実際に吐かれるコードを見ると、動的にラッパ関数を生成して
親スコープのスタックフレームへのポインタを関数に渡しています。
Re:gccの拡張 (スコア:0)
Javaのインナークラスや無名クラスの使い方と よくにている気がする。
無料バージョン (スコア:1, 参考になる)
Linux用は上記のアドレスで”Non-Commercial Unsupported Version”によりC++,Fortranとも無料で使えます。
Re:無料バージョン (スコア:1)
何か抜け道がないのかしらん