スレッド: [cppll:10107] SIMD用のベクトル・クラスで遊んでみました

スレッド

[cppll:10107] SIMD用のベクトル・クラスで遊んでみました

[ | ▲ / | ]
Subject:
[cppll:10107] SIMD用のベクトル・クラスで遊んでみました
From:
Tadakazu Nagai <nagai@...>
Date:
Fri, 9 Jan 2004 00:49:51 +0900
X-Mailer:
Microsoft Outlook Express 6.00.2800.1158
Message-Id:
<002101c3d5ff$0fd3a050$696585d3@nagaiss>
皆様こんばんは。永井です。

IntelのC++コンパイラに

 『MMX, SSE/SSE2用のベクトル・クラス』

が付いていたので遊んでみました。以下、簡単にまとめてみました。

http://www.kt.rim.or.jp/~nagai/opendoc/simd_vec.html
( http://www.kt.rim.or.jp/~nagai/opendoc/ )

まだ少し使っただけですが、「なるほどべんりだなぁ」と感じました。

# ここしばらく「Intelのコンパイラいいかも」とか思っています。

ただ、例えばg++から使おうとして失敗したのですが、、、
このようなベクトル・クラスは、ポータブルなライブラリとしては
存在しないのでしょうか?

それと、3DNow!とか、AltiVecとか(他、色々)にも対応できていると
さらに嬉しそうですが。。。

以上です。

--
自由のプログラマー
永井 忠一(ながい ただかず)
http://www.kt.rim.or.jp/~nagai/

[cppll:10112] < 救 > MKL 日本語まにある (was: SIMD 用のベクトル・クラスで遊んでみました )

[ | / | ]
Subject:
[cppll:10112] < 救 > MKL 日本語まにある (was: SIMD 用のベクトル・クラスで遊んでみました )
From:
FUKUDA Fumiki <fukuda.fm@...>
Date:
Fri, 09 Jan 2004 10:24:40 +0900
X-Mailer:
WeMail32[1.42] ID:NTES00
Message-Id:
<200401090126.i091Q2F11168‐at‐mailsv.nec.co.jp>
In-Reply-To:
10107
επιστημηです。

# スレッド切るべきなのかも。関連するんでご容赦を。

--- "[cppll:10107] SIMD用のベクトル・クラスで遊んでみました" / Tadakazu Nagai ---

>IntelのC++コンパイラに
> 『MMX, SSE/SSE2用のベクトル・クラス』
>が付いていたので遊んでみました。以下、簡単にまとめてみました。
>...
>まだ少し使っただけですが、「なるほどべんりだなぁ」と感じました。
># ここしばらく「Intelのコンパイラいいかも」とか思っています。

C++BuilderX(developer-ed.)にIntel C++がバンドルされてて、
さらに数値演算パッケージMKL(Math Kernel Library)もオマケに。
ちょこちょこっと遊んでみたけど、std::valarray<T>との親和性がよさげです。

で、MKLの日本語マニュアルがどこぞに落ちてないかと探しています。
# Quick-referenceが英語だとちーともQuickじゃないのよ僕はお箸の国の住人だから。

お心当たりの方、是非ご一報を。

-----:-----:-----:-----:-----:-----:-----:-----:-----:-----
FUKUDA (episteme) Fumiki -- magical, but never a magic...

[cppll:10114] Re: < 救 > MKL 日本語まにある (was: SIMD 用のベクトル・クラスで遊んでみました )

[ | / | ]
Subject:
[cppll:10114] Re: < 救 > MKL 日本語まにある (was: SIMD 用のベクトル・クラスで遊んでみました )
From:
Takahiko TAMURA <takat@...>
Date:
Fri, 9 Jan 2004 10:48:11 +0900
X-Mailer:
Microsoft Outlook Express 6.00.2800.1158
Message-Id:
<004201c3d652$a34ada80$9c0109c0‐at‐esdd.shimaseiki.co.jp>
References:
10112
田村です。

> で、MKLの日本語マニュアルがどこぞに落ちてないかと探しています。
> # Quick-referenceが英語だとちーともQuickじゃないのよ僕はお箸の国の住人だか
ら。
>
> お心当たりの方、是非ご一報を。

前のバージョン(5.2)のならエクセルソフトにあるです。
http://www.xlsoft.com/jp/products/intel/perflib/mkl.html


(株)島精機製作所 システム開発部
田村孝彦 (Takahiko TAMURA)
takat@...


----- Original Message -----
From: "FUKUDA Fumiki" <fukuda.fm@...>
To: <cppll@...>
Sent: Friday, January 09, 2004 10:24 AM
Subject: [cppll:10112] < 救 > MKL 日本語まにある (was: SIMD 用のベクトル・ク
ラスで遊んでみました )


> επιστημηです。
>
> # スレッド切るべきなのかも。関連するんでご容赦を。
>
> --- "[cppll:10107] SIMD用のベクトル・クラスで遊んでみました" / Tadakazu
Nagai ---
>
> >IntelのC++コンパイラに
> > 『MMX, SSE/SSE2用のベクトル・クラス』
> >が付いていたので遊んでみました。以下、簡単にまとめてみました。
> >...
> >まだ少し使っただけですが、「なるほどべんりだなぁ」と感じました。
> ># ここしばらく「Intelのコンパイラいいかも」とか思っています。
>
> C++BuilderX(developer-ed.)にIntel C++がバンドルされてて、
> さらに数値演算パッケージMKL(Math Kernel Library)もオマケに。
> ちょこちょこっと遊んでみたけど、std::valarray<T>との親和性がよさげです。
>
> で、MKLの日本語マニュアルがどこぞに落ちてないかと探しています。
> # Quick-referenceが英語だとちーともQuickじゃないのよ僕はお箸の国の住人だか
ら。
>
> お心当たりの方、是非ご一報を。
>
> -----:-----:-----:-----:-----:-----:-----:-----:-----:-----
> FUKUDA (episteme) Fumiki -- magical, but never a magic...
>
> --[PR]------------------------------------------------------------------
> ━‥・Apure豪華3大ブランドプレゼント!      │*。.:*:・'゜
>        │ ┏━━━━━━━━━━━━━━━ 人
>         人 ┃ ヴィトン・エルメス・シャネル ‾Y‾
>        ‾Y‾━━━━━━━━━━━━━━━┛ │
>  .*:・'゜゜*│ >http://ad.freeml.com/cgi-bin/ad.cgi?id=c0hSN ・‥━
> ------------------------------------------------------------------[PR]--
> <GMO GROUP> Global Media Online  www.gmo.jp
>
>

[cppll:10115] Re: < 救 > MKL 日本語まにある

[ | / | ]
Subject:
[cppll:10115] Re: < 救 > MKL 日本語まにある
From:
FUKUDA Fumiki <fukuda.fm@...>
Date:
Fri, 09 Jan 2004 10:53:40 +0900
X-Mailer:
WeMail32[1.42] ID:NTES00
Message-Id:
<200401090155.i091t2F19350‐at‐mailsv.nec.co.jp>
In-Reply-To:
10114
επιστημηです。

--- "[cppll:10114] Re: < 救 > MKL 日本語まにある (was: SIMD 用のベクトル・クラスで遊んでみました )" / Takahiko TAMURA --
-

>> で、MKLの日本語マニュアルがどこぞに落ちてないかと探しています。
>...
>前のバージョン(5.2)のならエクセルソフトにあるです。
>http://www.xlsoft.com/jp/products/intel/perflib/mkl.html

早速ありがとうございます。 道化師さんも(BBS@したらば経由)。
そか、素直にIntelのページ覗けばよかった。
ちっ、ぐぐりまくってたぜ(汗

# 鶴亀算でも解いてみんべ

-----:-----:-----:-----:-----:-----:-----:-----:-----:-----
FUKUDA (episteme) Fumiki -- magical, but never a magic...

[cppll:10116] Re:< 救 > MKL 日本語まにある

[ | / | ]
Subject:
[cppll:10116] Re:< 救 > MKL 日本語まにある
From:
FUKUDA Fumiki <fukuda.fm@...>
Date:
Fri, 09 Jan 2004 11:39:08 +0900
X-Mailer:
WeMail32[1.42] ID:NTES00
Message-Id:
<200401090240.i092eUL00682‐at‐mailsv3.nec.co.jp>
In-Reply-To:
10115
επιστημηです。

--- "[cppll:10115] Re:< 救 > MKL 日本語まにある" / FUKUDA Fumiki ---

>>前のバージョン(5.2)のならエクセルソフトにあるです。
>>http://www.xlsoft.com/jp/products/intel/perflib/mkl.html
>...
># 鶴亀算でも解いてみんべ

せんせぇ、できましたー

/* 鶴と亀が8匹います。
* 足は全部で22本です。
* 鶴と亀はそれぞれ何匹ですか? */

#include <iostream>
#include <valarray>
#include <cassert>
#include <mkl.h>

int main() {
 const int N = 2;

 /* 1 2                  1 1
  * 1 4 なのが気になる。 2 4 だったらいいのに。 */
 std::valarray<double> A(N*N);
 A[0] = 1; A[1] = 2;
 A[2] = 1; A[3] = 4;

 std::valarray<double> B(N);
 B[0] = 8;
 B[1] = 22;

 int n = N;
 int nrhs = 1;
 int pivot[N];
 int info;
 // 一次連立方程式 AX = B を解く。答は B に上書き。
 dgesv(&n, &nrhs, &A[0], &n, pivot, &B[0], &n, &info);
 assert( info == 0 );

 std::cout << "  鶴:" << B[0]
           << "  亀:" << B[1] << std::endl;
 return 0;
}

-----:-----:-----:-----:-----:-----:-----:-----:-----:-----
FUKUDA (episteme) Fumiki -- magical, but never a magic...

[cppll:10155] Re:< 救 > MKL 日本語まにある

[ | / | ]
Subject:
[cppll:10155] Re:< 救 > MKL 日本語まにある
From:
Tadakazu Nagai <nagai@...>
Date:
Wed, 14 Jan 2004 23:09:25 +0900
X-Mailer:
Microsoft Outlook Express 6.00.2800.1158
Message-Id:
<011a01c3daa8$063085b0$8f6585d3@nagaiss>
References:
10116
こんばんは。永井です。

MKLって、LAPACK, BLASだったのですね。

では私も試して、、、って、線形代数のリハビリが必要ですが。。。f^^;;;

でも、ちょっと頑張ってみようかナ

連立一次方程式のほかに、固有値問題、最小二乗法、特異値問題や
行列の分解など、色々計算できるようですねぇ。

それでは。

--
プログラマー
永井 忠一(ながい ただかず)
http://www.kt.rim.or.jp/~nagai/

[cppll:10159] Re:< 救 > MKL 日本語まにある

[ | / | ]
Subject:
[cppll:10159] Re:< 救 > MKL 日本語まにある
From:
FUKUDA Fumiki <fukuda.fm@...>
Date:
Thu, 15 Jan 2004 10:40:48 +0900
X-Mailer:
WeMail32[1.42] ID:NTES00
Message-Id:
<200401150142.i0F1gHF26477‐at‐mailsv.nec.co.jp>
In-Reply-To:
10155
επιστημηです。

--- "[cppll:10155] Re:< 救 > MKL 日本語まにある" / Tadakazu Nagai ---

>MKLって、LAPACK, BLASだったのですね。

うん。FFTなんかもお持ちのようです。

>では私も試して、、、って、線形代数のリハビリが必要ですが。。。f^^;;;
>でも、ちょっと頑張ってみようかナ

元がreferenceを引数とするFORTRANライブラリをC/C++から使うことになるので、
引数の食わせ方がめんどいす。

f(1) と書ければ楽なのにわざわざ int n = 1; f(&n); せんならん。
Cに合わせた関数も用意されてはいますが、全部ではなさそうだし。

そうそう、いまだに引っ掛かっておるのですが、

>  /* 1 2                  1 1
>   * 1 4 なのが気になる。 2 4 だったらいいのに。 */
>  std::valarray<double> A(N*N);
>  A[0] = 1; A[1] = 2;
>  A[2] = 1; A[3] = 4;

FORTRANてば二次元配列の並びってCとは逆なのかしら。
教えてください > 知ってるひと

-----:-----:-----:-----:-----:-----:-----:-----:-----:-----
FUKUDA (episteme) Fumiki -- magical, but never a magic...

[cppll:10161] Re:< 救 > MKL 日本語まにある

[ | / | ]
Subject:
[cppll:10161] Re:< 救 > MKL 日本語まにある
From:
Shin-ichi TAKAYA <takaya-shinichi@...>
Date:
Thu, 15 Jan 2004 11:46:33 +0900
X-Mailer:
Becky! ver. 2.07.04 [ja]
Message-Id:
<20040115114254.F286.TAKAYA-SHINICHI‐at‐tepsys.co.jp>
In-Reply-To:
10159
References:
10155 10159
たかやです、お初です。

Date   : On Thu, 15 Jan 2004 10:40:48 +0900
From   : FUKUDA Fumiki <fukuda.fm@...>
Subject: "[cppll:10159] Re:< 救 > MKL 日本語まにある"

> FORTRANてば二次元配列の並びってCとは逆なのかしら。
> 教えてください > 知ってるひと

Fortranでは、メモリに置かれる順番はboo(1,1)の次にboo(2,1)が来
ます。で、C/C++では、boo[0][0]の次はboo[0][1]ですよね。

ということではないでしょうか。

[cppll:10163] Re:< 救 > MKL 日本語まにある

[ | / | ]
Subject:
[cppll:10163] Re:< 救 > MKL 日本語まにある
From:
FUKUDA Fumiki <fukuda.fm@...>
Date:
Thu, 15 Jan 2004 11:51:10 +0900
X-Mailer:
WeMail32[1.42] ID:NTES00
Message-Id:
<200401150252.i0F2qaL16004‐at‐mailsv3.nec.co.jp>
In-Reply-To:
10161
επιστημηです。

--- "[cppll:10161] Re:< 救 > MKL 日本語まにある" / Shin-ichi TAKAYA ---

>たかやです、お初です。
よろしうに。

>> FORTRANてば二次元配列の並びってCとは逆なのかしら。
>> 教えてください > 知ってるひと
>
>Fortranでは、メモリに置かれる順番はboo(1,1)の次にboo(2,1)が来
>ます。で、C/C++では、boo[0][0]の次はboo[0][1]ですよね。
>
>ということではないでしょうか。

ということでしょうねぇ。かなり違和感あるなぁ。
行列演算のたんびに転置せなあかんのか。

-----:-----:-----:-----:-----:-----:-----:-----:-----:-----
FUKUDA (episteme) Fumiki -- magical, but never a magic...

[cppll:10165] < 救 > 転置行列のつくりかた (was: MKL 日本語まにある )

[ | / | ]
Subject:
[cppll:10165] < 救 > 転置行列のつくりかた (was: MKL 日本語まにある )
From:
FUKUDA Fumiki <fukuda.fm@...>
Date:
Thu, 15 Jan 2004 14:45:43 +0900
X-Mailer:
WeMail32[1.42] ID:NTES00
Message-Id:
<200401150547.i0F5l8F27907‐at‐mailsv.nec.co.jp>
In-Reply-To:
10163
επιστημηです。ついでに質問(相談?)

--- "[cppll:10163] Re:< 救 > MKL 日本語まにある" / FUKUDA Fumiki ---

>>Fortranでは、メモリに置かれる順番はboo(1,1)の次にboo(2,1)が来
>>ます。で、C/C++では、boo[0][0]の次はboo[0][1]ですよね。
>...
>行列演算のたんびに転置せなあかんのか。

で、転置行列を作ってみる:

template<typename T>
std::valarray<T>
transpose(const std::valarray<T>& m, size_t col) {
 std::valarray<T> r(m.size());
 size_t row = m.size() / col;
 for ( size_t i = 0; i < row; ++i ) {
   for ( size_t j = 0; j < col; ++j ) {
     size_t t = i*col + j;
     size_t u = i + j*row;
     r[u] = m[t++]; // r(j,i) = m(i,j)
   }
 }
 return r;
}

まぁ、どってことないです。
けど、要素数が多くなると valarray<T> を返すのが重たくなりそう。
転置行列の大きさは元と変わらないのだから、

template<typename T>
void
transpose(std::valarray<T>& m, size_t col);

として、mそのものを転置したいのです。
エレガントなアルゴリズムはありませんかしら?
# 要素の交換を繰り返すわけなんだろうが…

-----:-----:-----:-----:-----:-----:-----:-----:-----:-----
FUKUDA (episteme) Fumiki -- magical, but never a magic...

[cppll:10166] Re: < 救 > 転置行列のつくりかた (was: MKL 日本語まにある )

[ | / | ]
Subject:
[cppll:10166] Re: < 救 > 転置行列のつくりかた (was: MKL 日本語まにある )
From:
FUKUDA Fumiki <fukuda.fm@...>
Date:
Thu, 15 Jan 2004 14:49:12 +0900
X-Mailer:
WeMail32[1.42] ID:NTES00
Message-Id:
<200401150550.i0F5oda07422‐at‐mailsv4.nec.co.jp>
In-Reply-To:
10165
επιστημηです。ちとチョンボ

--- "[cppll:10165] < 救 > 転置行列のつくりかた (was: MKL 日本語まにある )" / FUKUDA Fumiki ---

>      r[u] = m[t++]; // r(j,i) = m(i,j)

'++'は余計、つか無駄でした。

-----:-----:-----:-----:-----:-----:-----:-----:-----:-----
FUKUDA (episteme) Fumiki -- magical, but never a magic...

[cppll:10167] Re: < 救 > 転置行列のつくりかた

[ | / | ]
Subject:
[cppll:10167] Re: < 救 > 転置行列のつくりかた
From:
K.Takahashi(kcrt) <kcrt@...>
Date:
Thu, 15 Jan 2004 15:02:42 +0900
Message-Id:
<40062D02.1030909‐at‐sings.jp>
In-Reply-To:
10165
References:
10165
高橋と申します。初投稿です。

> επιστημηです。ついでに質問(相談?)

> けど、要素数が多くなると valarray<T> を返すのが重たくなりそう。

むかし、何の本だったか忘れましたが、アイテムに行番号と列番号をつけて、行
を使ってソートし、そのあとに列を使ってソートしたあと行番号と列番号をはず
す、というものを見た事があります。
見当違いならすみません。

--
K.Takahashi(kcrt)

[cppll:10168] Re:< 救 > 転置行列のつくりかた

[ | / | ]
Subject:
[cppll:10168] Re:< 救 > 転置行列のつくりかた
From:
FUKUDA Fumiki <fukuda.fm@...>
Date:
Thu, 15 Jan 2004 15:12:57 +0900
X-Mailer:
WeMail32[1.42] ID:NTES00
Message-Id:
<200401150614.i0F6ESa08853‐at‐mailsv4.nec.co.jp>
In-Reply-To:
10167
επιστημηです。

--- "[cppll:10167] Re:< 救 > 転置行列のつくりかた" / K.Takahashi(kcrt) ---

>> けど、要素数が多くなると valarray<T> を返すのが重たくなりそう。
>
>むかし、何の本だったか忘れましたが、アイテムに行番号と列番号をつけて、行
>を使ってソートし、そのあとに列を使ってソートしたあと行番号と列番号をはず
>す、というものを見た事があります。

うーん、そもそもが空間計算量を減らすのが目的なのに、
番号振る空間が必要だし、ソートしちゃうと時間計算量まで増加するですぅ。

-----:-----:-----:-----:-----:-----:-----:-----:-----:-----
FUKUDA (episteme) Fumiki -- magical, but never a magic...

[cppll:10169] Re:< 救 > 転置行列のつくりかた

[ | / | ]
Subject:
[cppll:10169] Re:< 救 > 転置行列のつくりかた
From:
K.Takahashi(kcrt) <kcrt@...>
Date:
Thu, 15 Jan 2004 15:34:35 +0900
Message-Id:
<4006347B.3050606‐at‐sings.jp>
In-Reply-To:
10168
References:
10168
FUKUDA Fumiki wrote:

> επιστημηです。
>
>
> うーん、そもそもが空間計算量を減らすのが目的なのに、
> 番号振る空間が必要だし、ソートしちゃうと時間計算量まで増加するですぅ。

あかんかー。忘れてください笑


--
K.Takahashi(kcrt)
wiz Nanoseconds Hunter "http://hp.vector.co.jp/authors/VA020032/"
WinKeyLauncherPlus v.2.2 is available for download.
ktNovel v.0.1 is under-developped.

[cppll:10170] Re:< 救 > 転置行列のつくりかた

[ | / | ]
Subject:
[cppll:10170] Re:< 救 > 転置行列のつくりかた
From:
shock8 <shock8@...>
Date:
Wed, 14 Jan 2004 15:43:37 +0900
X-Mailer:
Microsoft Outlook Express 6.00.2800.1158
Message-Id:
<033401c3da69$bd135d50$504b10ac@H0X65XCYEVOP5RU>
References:
10168 10169
新参者の尺八です。

あんまり、エラソーなことを言うのも何なんですが

C++でFortran系のライブラリを使う場合は
議論のとおり
・多次元配列のメモリ配置の違い
・配列の基点が0or1の違い
があるので

ややこしい変換コードを書かないで直接
ニューメリカルレシピCでもごちゃごちゃ書かれていますが
Fortran流儀の配列の使い方をするのが吉だと思います。

それが、いやなら
boost:uBLAS
を使ったほうがなんぼか建設的だと思います

[cppll:10171] Re:< 救 > 転置行列のつくりかた

[ | / | ]
Subject:
[cppll:10171] Re:< 救 > 転置行列のつくりかた
From:
FUKUDA Fumiki <fukuda.fm@...>
Date:
Thu, 15 Jan 2004 15:57:42 +0900
X-Mailer:
WeMail32[1.42] ID:NTES00
Message-Id:
<200401150659.i0F6x8F02495‐at‐mailsv.nec.co.jp>
In-Reply-To:
10170
επιστημηです。

--- "[cppll:10170] Re:< 救 > 転置行列のつくりかた" / shock8 ---

>あんまり、エラソーなことを言うのも何なんですが
いえいえ

>ややこしい変換コードを書かないで直接
>ニューメリカルレシピCでもごちゃごちゃ書かれていますが
>Fortran流儀の配列の使い方をするのが吉だと思います。

いや、もうとっくにMKLは眼中になくて、
転置行列をこさえるナイスな方法が知りたいのです。

>それが、いやなら
>boost:uBLAS
>を使ったほうがなんぼか建設的だと思います

うん、そう思ってuBLASのmatrixをざっくり眺めてみたんだけど、
転置行列をこさえるメソッドはあるんだけど、自分自身を転置する
てのが見当たらんのですわ。

-----:-----:-----:-----:-----:-----:-----:-----:-----:-----
FUKUDA (episteme) Fumiki -- magical, but never a magic...

[cppll:10172] Re:< 救 > 転置行列のつくりかた

[ | / | ]
Subject:
[cppll:10172] Re:< 救 > 転置行列のつくりかた
From:
enra <enra@...>
Date:
Thu, 15 Jan 2004 16:13:30 +0900
X-Mailer:
Becky! ver. 2.06.02
Message-Id:
<20040115160519.E050.ENRA‐at‐mail.interq.or.jp>
In-Reply-To:
10171
References:
10170 10171
こんにちは、炎羅です。

On Thu, 15 Jan 2004 15:57:42 +0900
At [cppll:10171] Re:< 救 > 転置行列のつくりかた
FUKUDA Fumiki <fukuda.fm@...> Wrote:

> うん、そう思ってuBLASのmatrixをざっくり眺めてみたんだけど、
> 転置行列をこさえるメソッドはあるんだけど、自分自身を転置する
> てのが見当たらんのですわ。

あるデータを上書きするときに、その上書き先を一旦コピーしておいてから
上書きして、そのコピーしておいたものを上書きするとき、
その上書き先をを一旦コピーしておいてから・・・(以下続く)

というアルゴリズムでいける気がします。

ただしメモリ上を縦に書いていく事が必要なため、プロセッサによっては
パフォーマンスが出ないかもしれません。

■ Written by 炎羅 (enra@...) ■

[cppll:10173] Re:< 救 > 転置行列のつくりかた

[ | / | ]
Subject:
[cppll:10173] Re:< 救 > 転置行列のつくりかた
From:
FUKUDA Fumiki <fukuda.fm@...>
Date:
Thu, 15 Jan 2004 16:20:19 +0900
X-Mailer:
WeMail32[1.42] ID:NTES00
Message-Id:
<200401150721.i0F7Lja07434‐at‐mailsv4.nec.co.jp>
In-Reply-To:
10172
επιστημηです。

--- "[cppll:10172] Re:< 救 > 転置行列のつくりかた" / enra ---

>あるデータを上書きするときに、その上書き先を一旦コピーしておいてから
>上書きして、そのコピーしておいたものを上書きするとき、
>その上書き先をを一旦コピーしておいてから・・・(以下続く)

そうなるんでしょうねぇ。
問題は"すべてを漏れなく辿ったかをどうやって判定するか"ではないかな、と。

>ただしメモリ上を縦に書いていく事が必要なため、プロセッサによっては
>パフォーマンスが出ないかもしれません。

うん。どっちみち x(i,j) -> x(j,i) なんやから読み/書きのどちらか
は飛び飛びのアクセスになるわけで、どんなアルゴリズムでも不連続
アクセスは避けられないようにも思えるですが。 # ちゃうかな? ^^;

-----:-----:-----:-----:-----:-----:-----:-----:-----:-----
FUKUDA (episteme) Fumiki -- magical, but never a magic...

[cppll:10174] Re:< 救 > 転置行列のつくりかた

[ | / | ]
Subject:
[cppll:10174] Re:< 救 > 転置行列のつくりかた
From:
藤本 純 <j-fujimoto@...>
Date:
Thu, 15 Jan 2004 17:25:01 +0900
Message-Id:
<40064E5D.1020409‐at‐nsg-kk.co.jp>
References:
10173
藤本ともうします

タイトルに合わないかもしれませんがライブラリを作るとき
掛け算の順番が逆になってれば置換しなくていいのに
なんて思ったりして

[cppll:10175] Re:< 救 > 転置行列のつくりかた

[ | / | ]
Subject:
[cppll:10175] Re:< 救 > 転置行列のつくりかた
From:
藤本 純 <j-fujimoto@...>
Date:
Thu, 15 Jan 2004 17:29:31 +0900
Message-Id:
<40064F6B.1040501‐at‐nsg-kk.co.jp>
References:
10173 10174
置換->転置の間違いです

[cppll:10176] Re:< 救 > 転置行列のつくりかた

[ | / | ]
Subject:
[cppll:10176] Re:< 救 > 転置行列のつくりかた
From:
Takao Ono <takao@...>
Date:
Thu, 15 Jan 2004 17:33:03 +0900
X-Mailer:
mnews [version 1.22PL5] 2001-02/07(Wed)
Message-Id:
<040115173303.M0127200‐at‐flame.hirata.nuee.nagoya-u.ac.jp>
In-Reply-To:
10173
小野@名古屋大学 です.

図を描いて遊んでました.

<200401150721.i0F7Lja07434@mailsv4.nec.co.jp>の記事において
fukuda.fm@...さんは書きました。
fukuda.fm> >あるデータを上書きするときに、その上書き先を一旦コピーしておいてから
fukuda.fm> >上書きして、そのコピーしておいたものを上書きするとき、
fukuda.fm> >その上書き先をを一旦コピーしておいてから・・・(以下続く)
fukuda.fm> そうなるんでしょうねぇ。
fukuda.fm> 問題は"すべてを漏れなく辿ったかをどうやって判定するか"ではないかな、と。
こんなんでどうでしょうか:

template <typename T>
void transpose(std::valarray<T> &m, size_t col)
{
   size_t mod = m.size() - 1;
   size_t row = m.size() / col;
   std::vector<bool> traversed(row+1);
   
   size_t start = 1;
   while (start < row) {
       T x = m[start];
       size_t i = (start * row) % mod;
       while (i != start) {
           std::swap(x, m[i]);
           i = (i * row) % mod;
           if (i < row) {
               traversed[i] = true;
           }
       }
       std::swap(x, m[i]);
       
       while (traversed[start]) {
           start++;
       }
   }
}

手元のテストでは動作している*ような気が*します.

fukuda.fm> >ただしメモリ上を縦に書いていく事が必要なため、プロセッサによっては
fukuda.fm> >パフォーマンスが出ないかもしれません。
fukuda.fm> うん。どっちみち x(i,j) -> x(j,i) なんやから読み/書きのどちらか
fukuda.fm> は飛び飛びのアクセスになるわけで、どんなアルゴリズムでも不連続
fukuda.fm> アクセスは避けられないようにも思えるですが。 # ちゃうかな? ^^;
驚異的にめちゃくちゃな順にメモリをアクセスしているので, パフォー
マンスは見ないでください.
--
名古屋大学大学院 情報科学研究科 計算機数理科学専攻
小野 孝男

[cppll:10177] Re:< 救 > 転置行列のつくりかた

[ | / | ]
Subject:
[cppll:10177] Re:< 救 > 転置行列のつくりかた
From:
FUKUDA Fumiki <fukuda.fm@...>
Date:
Thu, 15 Jan 2004 17:41:14 +0900
X-Mailer:
WeMail32[1.42] ID:NTES00
Message-Id:
<200401150842.i0F8gdL02604‐at‐mailsv3.nec.co.jp>
In-Reply-To:
10176
επιστημηです。

--- "[cppll:10176] Re:< 救 >  転置行列のつくりかた" / Takao Ono ---

>図を描いて遊んでました.

あ、やっぱり? ^^;

>fukuda.fm> 問題は"すべてを漏れなく辿ったかをどうやって判定するか"ではないかな、と。
>こんなんでどうでしょうか:
>...

わーい。ごちそうさまです。
ワケ有りな vector<bool> がげふんげふん ^^;

>手元のテストでは動作している*ような気が*します.

さんきゅーです。CppUnitでやってみんべ。
# とりあえず'転置の転置で元通り'を確認するかな。

>驚異的にめちゃくちゃな順にメモリをアクセスしているので, パフォー
>マンスは見ないでください.

見ない見ない。空間計算量をケチりたいだけですので。

-----:-----:-----:-----:-----:-----:-----:-----:-----:-----
FUKUDA (episteme) Fumiki -- magical, but never a magic...

[cppll:10178] Re:< 救 > 転置行列のつくりかた

[ | / | ]
Subject:
[cppll:10178] Re:< 救 > 転置行列のつくりかた
From:
Takao Ono <takao@...>
Date:
Thu, 15 Jan 2004 17:49:46 +0900
X-Mailer:
mnews [version 1.22PL5] 2001-02/07(Wed)
Message-Id:
<040115174946.M0127632‐at‐flame.hirata.nuee.nagoya-u.ac.jp>
In-Reply-To:
10177
小野@名古屋大学 です.

すんません. ボケてました.
# 正方行列を忘れるか....

出直してきます m(_._)m

<200401150842.i0F8gdL02604@mailsv3.nec.co.jp>の記事において
fukuda.fm@...さんは書きました。
fukuda.fm> >fukuda.fm> 問題は"すべてを漏れなく辿ったかをどうやって判定するか"ではないかな、と。
やっぱりここが問題ですね.
--
名古屋大学大学院 情報科学研究科 計算機数理科学専攻
小野 孝男

[cppll:10181] Re:< 救 > 転置行列のつくりかた

[ | / | ]
Subject:
[cppll:10181] Re:< 救 > 転置行列のつくりかた
From:
enra <enra@...>
Date:
Thu, 15 Jan 2004 19:07:15 +0900
X-Mailer:
Becky! ver. 2.06.02
Message-Id:
<20040115190304.E05F.ENRA‐at‐mail.interq.or.jp>
In-Reply-To:
10176
References:
10173 10176
こんにちは、炎羅です。

On Thu, 15 Jan 2004 17:33:03 +0900
At [cppll:10176] Re:< 救 >  転置行列のつくりかた
takao@... (Takao Ono) Wrote:

> 手元のテストでは動作している*ような気が*します.

5*2の行列の転置に失敗するようです。
巡回置換の積に表したとき、置換の項が2個あるためです。
#(2 6 8 9 5 3)(4 7)

巡回置換の積の数に何か法則は無いんですかね^^;

■ Written by 炎羅 (enra@...) ■

[cppll:10182] Re:< 救 > 転置行列のつくりかた

[ | / | ]
Subject:
[cppll:10182] Re:< 救 > 転置行列のつくりかた
From:
Takao Ono <takao@...>
Date:
Thu, 15 Jan 2004 20:02:28 +0900
X-Mailer:
mnews [version 1.22PL5] 2001-02/07(Wed)
Message-Id:
<040115200228.M0129174‐at‐flame.hirata.nuee.nagoya-u.ac.jp>
In-Reply-To:
10181
小野@名古屋大学 です.

<20040115190304.E05F.ENRA@mail.interq.or.jp>の記事において
enra@...さんは書きました。
enra> 5*2の行列の転置に失敗するようです。
enra> 巡回置換の積に表したとき、置換の項が2個あるためです。
enra> #(2 6 8 9 5 3)(4 7)
5*2 の時点で死んでます m(_._)m
# 多分逆 (2*5) なら動くのがくやしい. いずれにしても n*n で動かん
# というボケをかましてますんで使えないのは同じですが.

enra> 巡回置換の積の数に何か法則は無いんですかね^^;
あったとしても (今回の) 役には立たない, に 1票.
--
名古屋大学大学院 情報科学研究科 計算機数理科学専攻
小野 孝男
P.S.
0-origin で考えると置換そのものは
i → (i * row) % (row*col - 1)
という構造を持っている (と思う) んですが, row*col - 1 が素数だっ
たとしても row の位数を計算するのに時間がかかってしょうがないと思
います.

row*col - 1 が合成数だったらどうしようもないような.

[cppll:10179] Re:< 救 > 転置行列のつくりかた

[ | / | ]
Subject:
[cppll:10179] Re:< 救 > 転置行列のつくりかた
From:
enra <enra@...>
Date:
Thu, 15 Jan 2004 18:03:55 +0900
X-Mailer:
Becky! ver. 2.06.02
Message-Id:
<20040115170615.E053.ENRA‐at‐mail.interq.or.jp>
In-Reply-To:
10173
References:
10172 10173
お疲れさまです。炎羅です。

On Thu, 15 Jan 2004 16:20:19 +0900
At [cppll:10173] Re:< 救 > 転置行列のつくりかた
FUKUDA Fumiki <fukuda.fm@...> Wrote:

> そうなるんでしょうねぇ。
> 問題は"すべてを漏れなく辿ったかをどうやって判定するか"ではないかな、と。

置換を巡回置換に変換する問題と似ているようです。

例)4*3の行列を転置して3*4にする
行列のメモリ空間を一次元で見たときの添え字の置換は以下の通り
(1 2 3 4 5  6 7 8  9 10 11 12)
(1 5 9 2 6 10 3 7 11  4  8 12)
頭とケツは動かさないので実際は以下の置換になる。
(2 3 4 5  6 7 8  9 10 11)
(5 9 2 6 10 3 7 11  4  8)
これは巡回置換の積(2 4 10 6 5)(3 7 8 11 9)で表されるので、
2番目を4番目に代入して、4番目にあったものを10番目に代入して…(以下続く)

肝はこの巡回置換への変換で、このアルゴリズムが高速かどうかで、
パフォーマンスの優劣が決しそうです。
巡回置換(2 4 10 6 5)を求めた後、次の目標である添え字3を見つけるのに、
5回の比較操作が必要になります。
もちろん(2 4 10 6 5)なんてものを馬鹿正直に確保するとメモリの無駄なので、
事前に10bit用意してそこにswap済みかフラグを立てて、巡回置換を見つけ
ながらswapする事になります。

私も図を書いて遊んでましたが、これでいけるかな?(;´Д`)

■ Written by 炎羅 (enra@...) ■

[cppll:10180] Re:< 救 > 転置行列のつくりかた

[ | / | ]
Subject:
[cppll:10180] Re:< 救 > 転置行列のつくりかた
From:
Takao Ono <takao@...>
Date:
Thu, 15 Jan 2004 18:17:44 +0900
X-Mailer:
mnews [version 1.22PL5] 2001-02/07(Wed)
Message-Id:
<040115181744.M0128259‐at‐flame.hirata.nuee.nagoya-u.ac.jp>
In-Reply-To:
10179
小野%まだ出直してません@名古屋大学 です.

<20040115170615.E053.ENRA@mail.interq.or.jp>の記事において
enra@...さんは書きました。
enra> 肝はこの巡回置換への変換で、このアルゴリズムが高速かどうかで、
enra> パフォーマンスの優劣が決しそうです。
enra> 巡回置換(2 4 10 6 5)を求めた後、次の目標である添え字3を見つけるのに、
enra> 5回の比較操作が必要になります。
enra> もちろん(2 4 10 6 5)なんてものを馬鹿正直に確保するとメモリの無駄なので、
enra> 事前に10bit用意してそこにswap済みかフラグを立てて、巡回置換を見つけ
enra> ながらswapする事になります。
う〜ん, やはり正直に全部に対してフラグを用意するしかないのかなぁ....

どうにかして本質的に減らせないものでしょうかねぇ.

enra> 私も図を書いて遊んでましたが、これでいけるかな?(;´Д`)
へい, これなら確実にいけます.
--
名古屋大学大学院 情報科学研究科 計算機数理科学専攻
小野 孝男

[cppll:10273] Re:< 救 > 転置行列のつくりかた

[ | / | ]
Subject:
[cppll:10273] Re:< 救 > 転置行列のつくりかた
From:
Tadakazu Nagai <nagai@...>
Date:
Sat, 31 Jan 2004 13:29:19 +0900
X-Mailer:
Microsoft Outlook Express 6.00.2800.1158
Message-Id:
<005601c3e7b2$ce033ee0$0664a8c0@nagaiss>
References:
10168 10169 10170
尺八さんへ

こんにちは。永井です。

> ・配列の基点が0or1の違い

これに関しては、Fortranで

 array(N)
 array(0:N-1)

と書くことができます。

以上です。

P.S.
(少し話がそれますが、)うろ覚えなのですが、何処かで

 『Cの配列の要素0番目を使わないで*あまらせておく*』

というのを見かけたのですが、f2cが吐き出したコード
だったでしょうか。

--
プログラマー
永井 忠一(ながい ただかず)
http://www.kt.rim.or.jp/~nagai/

ソフトベル
http://www.softbell.jp/

[cppll:10275] Re:< 救 > 転置行列のつくりかた

[ | / | ]
Subject:
[cppll:10275] Re:< 救 > 転置行列のつくりかた
From:
KOIE Hidetaka <hide@...>
Date:
Sun, 01 Feb 2004 12:53:26 +0900 (JST)
X-Mailer:
Mew version 4.0.64 on Emacs 21.1 / Mule 5.0 (SAKAKI)
Message-Id:
<20040201.125326.00450984.hide‐at‐koie.org>
In-Reply-To:
10273
References:
10168 10169 10170 10273
Message-Id: <005601c3e7b2$ce033ee0$0664a8c0@nagaiss>
 Date:       Sat, 31 Jan 2004 13:29:19 +0900
 From:       "Tadakazu Nagai" <nagai@...>
 Subject:    [cppll:10273] Re:< 救 > 転置行列のつくりかた

 | P.S.
 | (少し話がそれますが、)うろ覚えなのですが、何処かで
 |
 |  『Cの配列の要素0番目を使わないで*あまらせておく*』
 |
 | というのを見かけたのですが、f2cが吐き出したコード
 | だったでしょうか。

Numerical Recipes in Cでみたような気がします。

--
鯉江英隆 <hide@...>

[cppll:10183] Fortranの二次元配列の並びは逆

[ | / | ]
Subject:
[cppll:10183] Fortranの二次元配列の並びは逆
From:
Tadakazu Nagai <nagai@...>
Date:
Thu, 15 Jan 2004 21:53:31 +0900
X-Mailer:
Microsoft Outlook Express 6.00.2800.1158
Message-Id:
<015201c3db66$978be220$998ddbca@nagaiss>
References:
10159
こんばんは。永井です。

# ネットワーク環境に不自由していまして、タイミングを逸していますが。

> 元がreferenceを引数とするFORTRANライブラリをC/C++から使うことになるので、
> 引数の食わせ方がめんどいす。
>
> f(1) と書ければ楽なのにわざわざ int n = 1; f(&n); せんならん。
> Cに合わせた関数も用意されてはいますが、全部ではなさそうだし。

LAPACKはFORTRAN 77の頃に書かれたそうで、そうするとこうなってしまいますね。

Fortran 90/95ならば近代的な言語になっているのですが。

> そうそう、いまだに引っ掛かっておるのですが、
>
> >  /* 1 2                  1 1
> >   * 1 4 なのが気になる。 2 4 だったらいいのに。 */
> >  std::valarray<double> A(N*N);
> >  A[0] = 1; A[1] = 2;
> >  A[2] = 1; A[3] = 4;
>
> FORTRANてば二次元配列の並びってCとは逆なのかしら。
> 教えてください > 知ってるひと

はい、多次元配列のメモリ中のレイアウトは逆ですね。

これは、『エキスパートCプログラミング』では

 ・行優先アドレッシング = C言語
 ・列優先アドレッシング = FORTRAN言語

と名前を付けていましたね。

(なんか、これってエンディアンみたいですね)

それでは。

P.S.
10年ほど昔、FORTRANの教科書とOSのマニュアルが一冊ずつ机の上にあれば
飯が食えていた頃が懐かしい。。。

--
自由さプログラマー
永井 忠一(ながい ただかず)
http://www.kt.rim.or.jp/~nagai/

[cppll:10184] Re: Fortranの二次元配列の並びは逆

[ | / | ]
10184
Subject:
[cppll:10184] Re: Fortranの二次元配列の並びは逆
From:
Tietew <tietew@...>
Date:
Thu, 15 Jan 2004 22:08:29 +0900
X-Mailer:
Becky! ver. 2.07.04 [ja]
Message-Id:
<20040115220404.82D6.TIETEW‐at‐tietew.net>
In-Reply-To:
10183
References:
10159 10183
Tietew です。

On Thu, 15 Jan 2004 21:53:31 +0900
In article <015201c3db66$978be220$998ddbca@nagaiss>
[[cppll:10183] Fortranの二次元配列の並びは逆]
"Tadakazu Nagai" <nagai@...> wrote:

> > FORTRANてば二次元配列の並びってCとは逆なのかしら。
> > 教えてください > 知ってるひと
>
> はい、多次元配列のメモリ中のレイアウトは逆ですね。

ここもご覧下さい。
http://boost.cppll.jp/HEAD/libs/multi_array/doc/user.html#sec_storage
general_storage_order を使う場面は思いつかないのですが :)

> P.S.
> 10年ほど昔、FORTRANの教科書とOSのマニュアルが一冊ずつ机の上にあれば
> 飯が食えていた頃が懐かしい。。。

今は Google さえあれば飯が食え…???


—[ Tietew ]——— tietew@... / tietew@... ——————
■Tietew Windows Lab.                        http://www.tietew.net/
★C++:language&librariesログ&なまず     http://www.tietew.jp/cppll/
PGP fingerprint: 26CB 71BB B595 09C4 0153  81C4 773C 963A D51B 8CAA

[cppll:10205] Re: Fortran の二次元配列の並びは逆

[ | / | ]
Subject:
[cppll:10205] Re: Fortran の二次元配列の並びは逆
From:
FUKUDA Fumiki <fukuda.fm@...>
Date:
Mon, 19 Jan 2004 10:39:30 +0900
X-Mailer:
WeMail32[1.42] ID:NTES00
Message-Id:
<200401190140.i0J1exL03948‐at‐mailsv3.nec.co.jp>
In-Reply-To:
10183
επιστημη@ちょっと道草 です。

--- "[cppll:10183] Fortranの二次元配列の並びは逆" / Tadakazu Nagai ---

>> 元がreferenceを引数とするFORTRANライブラリをC/C++から使うことになるので、
>> 引数の食わせ方がめんどいす。
>>
>> f(1) と書ければ楽なのにわざわざ int n = 1; f(&n); せんならん。
>> Cに合わせた関数も用意されてはいますが、全部ではなさそうだし。
>
>LAPACKはFORTRAN 77の頃に書かれたそうで、そうするとこうなってしまいますね。
>Fortran 90/95ならば近代的な言語になっているのですが。

僕がFortranと決別(?)して長いので、今時のFortranはよぅわからんですが、
つまりこの、きょうびのFortranは値渡し/参照渡しが選べるですか?
# 参照返しとかもできたりすんだろか?

>> FORTRANてば二次元配列の並びってCとは逆なのかしら。
>> 教えてください > 知ってるひと
>はい、多次元配列のメモリ中のレイアウトは逆ですね。

IntelのC++/Fortranコンパイラは相性がいい(そらそーだろ)らしいけど、
ここらへん、どうなってんでしょね。Fortran側にレイアウト反転オブション
とかあるんだろか?

-----:-----:-----:-----:-----:-----:-----:-----:-----:-----
FUKUDA (episteme) Fumiki -- magical, but never a magic...

[cppll:10207] Re: Fortran の二次元配列の並びは逆

[ | / | ]
Subject:
[cppll:10207] Re: Fortran の二次元配列の並びは逆
From:
Takao Ono <takao@...>
Date:
Mon, 19 Jan 2004 17:14:51 +0900
X-Mailer:
mnews [version 1.22PL5] 2001-02/07(Wed)
Message-Id:
<040119171451.M0102432‐at‐flame.hirata.nuee.nagoya-u.ac.jp>
In-Reply-To:
10205
小野@名古屋大学 です.

<200401190140.i0J1exL03948@mailsv3.nec.co.jp>の記事において
fukuda.fm@...さんは書きました。
fukuda.fm> 僕がFortranと決別(?)して長いので、今時のFortranはよぅわからんですが、
fukuda.fm> つまりこの、きょうびのFortranは値渡し/参照渡しが選べるですか?
fukuda.fm> # 参照返しとかもできたりすんだろか?
さすがに普段使わないのでおぼろげな記憶でしかないのですが,
Fortran95 には値渡しはなかったような気がするなぁ.

ただ, INTENT って属性があって, 引数の読み書きを制御することができ
ます. INTENT(IN) だと読み込みのみ (書き込み不可) で const T& みた
いな感じ, INTENT(INOUT) だと読み書きが両方OKの T& みたいなやつ.
INTENT(OUT) は読めない (初期化されていないかもしれない) けど書け
るってこと.

まぁ Fortran90 にもなれば構造体は作れるし再帰関数は書けるし演算子
のオーバーロードはおろか新しい演算子すら作れてしまうので, もはや
旧来の FORTRAN とは別物と思った方がよろしいかと.
# Fortran2000 はどこへ....

fukuda.fm> IntelのC++/Fortranコンパイラは相性がいい(そらそーだろ)らしいけど、
fukuda.fm> ここらへん、どうなってんでしょね。Fortran側にレイアウト反転オブション
fukuda.fm> とかあるんだろか?
ifc --help を見た限りではなさそう.

でも, C++ library とリンクしてるみたいだし C90 ってオプションもあ
るから, なんかしてるのかなぁ.
--
名古屋大学大学院 情報科学研究科 計算機数理科学専攻
小野 孝男

[cppll:10208] Re: Fortran の二次元配列の並びは逆

[ | / | ]
Subject:
[cppll:10208] Re: Fortran の二次元配列の並びは逆
From:
Tadakazu Nagai <nagai@...>
Date:
Mon, 19 Jan 2004 20:50:05 +0900
X-Mailer:
Microsoft Outlook Express 6.00.2800.1158
Message-Id:
<001901c3de82$63f15160$e58ddbca@nagaiss>
References:
10205
こんばんは。永井@Fortranは嫌いじゃない です。

# 小野さんが既に書かれている内容と同じですが。

> >> 元がreferenceを引数とするFORTRANライブラリをC/C++から使うことになるので、
> >> 引数の食わせ方がめんどいす。
> >>
> >> f(1) と書ければ楽なのにわざわざ int n = 1; f(&n); せんならん。
> >> Cに合わせた関数も用意されてはいますが、全部ではなさそうだし。
> >
> >LAPACKはFORTRAN 77の頃に書かれたそうで、そうするとこうなってしまいますね。
> >Fortran 90/95ならば近代的な言語になっているのですが。
>
> 僕がFortranと決別(?)して長いので、今時のFortranはよぅわからんですが、
> つまりこの、きょうびのFortranは値渡し/参照渡しが選べるですか?
> # 参照返しとかもできたりすんだろか?

すみません、ここ嘘を書きました。(T T

Fortran 90/95においても、参照渡しが基本なのは変わりませんでした。

Fortranで『%VAL』などを使った値渡しを行うための方法は、相変らず
非標準な手段のままです。

Fortran 90/95では、仮引数の修飾のために以下のキーワードが

 ・INTENT(IN)    // 入力専用
 ・INTENT(OUT)   // 出力専用
 ・INTENT(INOUT) // 入出力両用

増えているのですが、これは今回の話とは(当然)無関係です。
(ちょっと勘違いしてしまいました)

# 新しいFortranは『モジュール、構造体、演算子定義、動的な配列』などなど
# ができるようになり、ちょっとモダンな雰囲気に酔っておりました。m(_o_)m

> >> FORTRANてば二次元配列の並びってCとは逆なのかしら。
> >> 教えてください > 知ってるひと
> >はい、多次元配列のメモリ中のレイアウトは逆ですね。
>
> IntelのC++/Fortranコンパイラは相性がいい(そらそーだろ)らしいけど、
> ここらへん、どうなってんでしょね。Fortran側にレイアウト反転オブション
> とかあるんだろか?

私もifort(コマンド名変わったのですね)のmanを見てみましたが、
それらしいオプションは見付かりませんでした。

昔、DECのミニコン上で、純正のコンパイラを使ってFORTRANとCを
ちゃんぽんした開発をしていましたが、その時にも反転オプションは
見ませんでしたねぇ。

# それと、Cと縁が深そうなf2cでも、吐き出されるCのコードは
# Fortranのレイアウトをしていたような覚えもあります。
# これはそのうちRPMを見付けてインストールしたいと思っているので、
# manが読めるようになったらもう一度確認してみたいですル。

それでは、お騒がせしました。m(_o_)m

--
自由よプログラマー
永井 忠一(ながい ただかず)
http://www.kt.rim.or.jp/~nagai/

[cppll:10209] Re: Fortran の二次元配列の並びは逆

[ | / | ]
Subject:
[cppll:10209] Re: Fortran の二次元配列の並びは逆
From:
Shin'ya MORINO <smorino@...>
Date:
Tue, 20 Jan 2004 01:48:03 +0900
X-Mailer:
Datula version 1.51.04 for Windows
Message-Id:
<200401191648.BAA09325‐at‐dsmtp6.dion.ne.jp>
In-Reply-To:
10208
References:
10205 10208
森野@Fortranは書いたことない....(^^;;;; です

Tadakazu Nagaiさんの<001901c3de82$63f15160$e58ddbca@nagaiss>から
>こんばんは。永井@Fortranは嫌いじゃない です。
ちっす。

># それと、Cと縁が深そうなf2cでも、吐き出されるCのコードは
># Fortranのレイアウトをしていたような覚えもあります。
この前、FortranのプログラムとC++をf2c経由でリンクしました。
FotranとCのシンボルうまくつなげて、リンクしてやるような仕掛けですよ
ね。 >> f2c

反転ナシだった覚えアリです。

# C++ -> extern "C" -> f2c -> f77 です。
# たずねて三千里まで、あと一息。



--
Shin'ya MORINO mailto:smorino@...

[cppll:10214] Re: Fortran の二次元配列の並びは逆

[ | / | ]
Subject:
[cppll:10214] Re: Fortran の二次元配列の並びは逆
From:
Takao Ono <takao@...>
Date:
Wed, 21 Jan 2004 16:36:52 +0900
X-Mailer:
mnews [version 1.22PL5] 2001-02/07(Wed)
Message-Id:
<040121163652.M0118354‐at‐flame.hirata.nuee.nagoya-u.ac.jp>
In-Reply-To:
10209
小野@名古屋大学 です.

ふと思って Fortran2003 の Final Committee Draft を見てみました.
# Fortran2000 の予定だったのに (笑). 最終的に Fortran2005 とかに
# なってたりして (苦笑)

なんと, Interoperability with C というセクションがあります!!
ISO_C_BINDING というモジュールを使うことで, C で書いた関数を
Fortran から使ったりできるようです. ちゃんと C の型に対応した
Fortran の型パラメータまで定義されてます.
# しかも C_INT_LEAST_32_T なんて名前まで....

<200401191648.BAA09325@dsmtp6.dion.ne.jp>の記事において
smorino@...さんは書きました。
smorino> ># それと、Cと縁が深そうなf2cでも、吐き出されるCのコードは
smorino> ># Fortranのレイアウトをしていたような覚えもあります。
smorino> この前、FortranのプログラムとC++をf2c経由でリンクしました。
smorino> FotranとCのシンボルうまくつなげて、リンクしてやるような仕掛けですよ
smorino> ね。 >> f2c
smorino> 反転ナシだった覚えアリです。
配列の interoperability については NOTE 15.18 に

Fortran の
INTEGER :: A(18, 3:7, *)
は C の
int b[][5][18];
と interoperable だよ

と書いてあるので, やっぱりプログラマが反転しないといけないようで
す.
--
名古屋大学大学院 情報科学研究科 計算機数理科学専攻
小野 孝男

[cppll:10120] Re: < 救 > MKL 日本語まにある

[ | / | ]
Subject:
[cppll:10120] Re: < 救 > MKL 日本語まにある
From:
Wraith the Trickster <wraith@...>
Date:
Fri, 9 Jan 2004 21:47:39 +0900
X-Mailer:
Microsoft Outlook Express 6.00.2800.1158
Message-Id:
<004901c3d6ae$ce1ebb80$0100a8c0@WindStone>
References:
10112
道化師@帰宅しますたです。

[cppll:10112] < 救 > MKL 日本語あにまる (was: SIMD 用の...】
>で、MKLの日本語マニュアルがどこぞに落ちてないかと探しています。

 http://www.intel.com/jp/developer/download/

...BBS のほうにも書き込みますたが、一応 ML にも。
ここには多くの優良なドキュメントがありますのでまだ見てない方は
一度ぐらいはどんなドキュメントがあるのか一通り見ておいた方が
いいです。

で、いま、ここのドキュメントを参考にして CPU まわりの情報を洗い
ざらい取得する為のコードを書いてます。仕上がったら tricklib.com
にアップしますんで、よろ。

# こっちでもアナウンスするつもりだけど。


[cppll:10107] SIMD用のベクトル・クラスで遊んでみました】
># ここしばらく「Intelのコンパイラいいかも」とか思っています。

おいらも正直あなどってたけど、いまお仕事で書いてるコードを各種
コンパイラでコンパイルし実行した時の処理時間が以下のようになっ
て驚きますた。

 Compiler:Visual C++(ver.1310)
 time:12890ms

 Compiler:g++(ver.3.2 (mingw special 20020817-1))
 time:11532ms

 Compiler:Borland C++(ver.0x0564)
 time:10984ms

 Compiler:Intel C/C++ Compiler(ver.800)
 time:2719ms

...インテル、鬼っぱや!

# コンパイルオプションは基本的にデフォルトで試しますた。

# ...ちなみに CodeWarrior(ver.6) はコンパイル時に内部エラーが
# 出たので失格。これだけ古いバージョンだから不公平だけど。
# ...最新版を(ネットで)購入したからそろそろ届くハズなんだけどなぁ。

□■□■                  Wraith the Trickster                  □■□■
■□■□ 〜I'll go with heaven's advantage and fool's wisdom.〜 ■□■□
[cppll ML] http://www.trickpalace.net/cppll/
[cppll BBS] http://jbbs.shitaraba.com/computer/5651/cppll.html

[cppll:10131] Re: < 救 > MKL 日本語まにある(valarray)

[ | / | ]
Subject:
[cppll:10131] Re: < 救 > MKL 日本語まにある(valarray)
From:
Tadakazu Nagai <nagai@...>
Date:
Sat, 10 Jan 2004 18:31:40 +0900
X-Mailer:
Microsoft Outlook Express 6.00.2800.1158
Message-Id:
<03b901c3d75c$93db6d20$0664a8c0@nagaiss>
References:
10112
こんばんは。永井です。

----- Original Message -----
From: "FUKUDA Fumiki" <fukuda.fm@...>
To: <cppll@...>
Sent: Friday, January 09, 2004 10:24 AM
Subject: [cppll:10112] < 救 > MKL 日本語まにある (was: SIMD 用のベクトル・クラスで遊んでみました )


> επιστημηです。
>
> # スレッド切るべきなのかも。関連するんでご容赦を。

いえいえ。

> --- "[cppll:10107] SIMD用のベクトル・クラスで遊んでみました" / Tadakazu Nagai ---
>
> >IntelのC++コンパイラに
> > 『MMX, SSE/SSE2用のベクトル・クラス』
> >が付いていたので遊んでみました。以下、簡単にまとめてみました。
> >...
> >まだ少し使っただけですが、「なるほどべんりだなぁ」と感じました。
> ># ここしばらく「Intelのコンパイラいいかも」とか思っています。
>
> C++BuilderX(developer-ed.)にIntel C++がバンドルされてて、
> さらに数値演算パッケージMKL(Math Kernel Library)もオマケに。
> ちょこちょこっと遊んでみたけど、std::valarray<T>との親和性がよさげです。

偶然にも、次のお題に『valarray』を考えていました。

http://www.kt.rim.or.jp/~nagai/opendoc/valarray_complex.html
( http://www.kt.rim.or.jp/~nagai/opendoc/ )

このクラスってあまり意識していなかったのですが、いつ頃増えたのでしょうか。

それではデス。

--
自由ヶプログラマー
永井 忠一(ながい ただかず)
http://www.kt.rim.or.jp/~nagai/

[cppll:10141] Re: < 救 > MKL 日本語まにある( valarray )

[ | / | ]
Subject:
[cppll:10141] Re: < 救 > MKL 日本語まにある( valarray )
From:
FUKUDA Fumiki <fukuda.fm@...>
Date:
Tue, 13 Jan 2004 09:58:32 +0900
X-Mailer:
WeMail32[1.42] ID:NTES00
Message-Id:
<200401130059.i0D0xuL07806‐at‐mailsv3.nec.co.jp>
In-Reply-To:
10131
επιστημηです。

--- "[cppll:10131] Re: < 救 > MKL 日本語まにある(valarray)" / Tadakazu Nagai ---

>> C++BuilderX(developer-ed.)にIntel C++がバンドルされてて、
>> さらに数値演算パッケージMKL(Math Kernel Library)もオマケに。
>> ちょこちょこっと遊んでみたけど、std::valarray<T>との親和性がよさげです。
>
>偶然にも、次のお題に『valarray』を考えていました。
>...
>このクラスってあまり意識していなかったのですが、いつ頃増えたのでしょうか。

何時頃だったかなぁ…accumulate, inner_product などの数勘定に絡んだ
アルゴリズムは、はじめは <algorithm> にあったんです。それが <numeric> に
分かれた頃、<complex> と <valarray> も同時期に導入されたと記憶しています。
# いささか自信ナシ

-----:-----:-----:-----:-----:-----:-----:-----:-----:-----
FUKUDA (episteme) Fumiki -- magical, but never a magic...

[cppll:10142] Re: < 救 >MKL 日本語まにある( valarray )

[ | / | ]
Subject:
[cppll:10142] Re: < 救 >MKL 日本語まにある( valarray )
From:
FUKUDA Fumiki <fukuda.fm@...>
Date:
Tue, 13 Jan 2004 10:38:52 +0900
X-Mailer:
WeMail32[1.42] ID:NTES00
Message-Id:
<200401130140.i0D1eMF03223‐at‐mailsv.nec.co.jp>
In-Reply-To:
10141
επιστημηです。

--- "[cppll:10141] Re: < 救 >MKL 日本語まにある( valarray )" / FUKUDA Fumiki ---

>>偶然にも、次のお題に『valarray』を考えていました。
>>...
>>このクラスってあまり意識していなかったのですが、いつ頃増えたのでしょうか。

1997年のpublic-review(いわゆるCD2)ではすでに追加されちょりました。

-----:-----:-----:-----:-----:-----:-----:-----:-----:-----
FUKUDA (episteme) Fumiki -- magical, but never a magic...

[cppll:10113] Re: SIMD用のベクトル・クラスで遊んでみました

[ | / | ]
Subject:
[cppll:10113] Re: SIMD用のベクトル・クラスで遊んでみました
From:
Takahiko TAMURA <takat@...>
Date:
Fri, 9 Jan 2004 10:39:37 +0900
X-Mailer:
Microsoft Outlook Express 6.00.2800.1158
Message-Id:
<003e01c3d651$71084bd0$9c0109c0‐at‐esdd.shimaseiki.co.jp>
References:
10107
田村です。

> IntelのC++コンパイラに
>
>  『MMX, SSE/SSE2用のベクトル・クラス』
> ...
> まだ少し使っただけですが、「なるほどべんりだなぁ」と感じました。

ベクトルクラスは確かに便利ですが僕はあんまり使わんです。
IntelC++ に激しく依存してしまいますし、どちらかといえば
「SIMD関数」を使います。これなら少なくとも VC6 ではプロセッサ・
パックを組み込むことで、同名、同機能の関数が使えるからです。

> # ここしばらく「Intelのコンパイラいいかも」とか思っています。

でも、本当にいいのは、コンパイラ・オプションをちょいと調整
するだけでコンパイラが勝手にSIMDを使ってくれたりする点で、
こっちの方がパフォーマンスが強烈に向上することがあります。
declspec(align(16)) を使って、変数を16Byte境界にアライメント
したほうがよいなどという制約はありますが、これはマクロを作って
おけば何とかなるレベルですし。

それから、x87 に比べて計算精度がビミョーに違うというデメリットが
あります。(FPUは80bit、SIMD用は64Bit×2なんで)

> それと、3DNow!とか、AltiVecとか(他、色々)にも対応できていると

聞いた話ですが、AMD のプロセッサでもそれなりに動くそうです。

# パフォーマンスについてのレポートが大昔のCマガにあったような
# 気がしますが、是非、まとめて公開していただけると非常に
# 嬉しかったりします。

田村孝彦 (Takahiko TAMURA)
takat@...

[cppll:10119] Re: SIMD用のベクトル・クラスで遊んでみました

[ | / | ]
Subject:
[cppll:10119] Re: SIMD用のベクトル・クラスで遊んでみました
From:
UCHIYAMA, Hiroyoshi <uttiee@...>
Date:
Fri, 09 Jan 2004 20:57:24 +0900
X-Mailer:
Becky! ver. 2.06.02
Message-Id:
<20040109205018.42A4.UTTIEE‐at‐mbk.nifty.com>
In-Reply-To:
10113
References:
10107 10113
皆さん、はじめまして。うっちーと申します。
一応プログラマの端くれです。
Intelのコンパイラ欲しいなぁ・・。


> IntelC++ に激しく依存してしまいますし、どちらかといえば
> 「SIMD関数」を使います。これなら少なくとも VC6 ではプロセッサ・
> パックを組み込むことで、同名、同機能の関数が使えるからです。

ベクトルクラスはVC6+ProcessorPackでも使えます。
#include <ivec.h>
#include <fvec.h>
#include <dvec.h>
あたりですね。
gccで使えるかどうかは知りません。


> 聞いた話ですが、AMD のプロセッサでもそれなりに動くそうです。

これは、AMDのCPUでSSEを動かす場合の話ですね。
AMDのCPUはSSE2にはまだ対応していなかったと思います。

Intelのベクトルクラスは3DNow!は吐いてくれないですが、3DNow!の組込関数は
VC6+ProcessorPackにあるので、同じようなベクトルクラスを作ることは難しく
ないのではないでしょうか?


///////////////////////////////////////////////////
うっちー <uttiee@...>
GnuPG fingerprint =
315A BD55 8098 0FD7 ACEF  C775 0F58 0CAF F294 BC8D
///////////////////////////////////////////////////

[cppll:10123] Re: SIMD用のベクトル・クラスで遊んでみました

[ | / | ]
Subject:
[cppll:10123] Re: SIMD用のベクトル・クラスで遊んでみました
From:
Tadakazu Nagai <nagai@...>
Date:
Fri, 9 Jan 2004 23:11:40 +0900
X-Mailer:
Microsoft Outlook Express 6.00.2800.1158
Message-Id:
<003401c3d6ba$8305c380$87d4e9ca@nagaiss>
References:
10107 10113 10119
こんばんは。永井です。

----- Original Message -----
From: "UCHIYAMA, Hiroyoshi" <uttiee@...>
To: <cppll@...>
Sent: Friday, January 09, 2004 8:57 PM
Subject: [cppll:10119] Re: SIMD用のベクトル・クラスで遊んでみました


> 皆さん、はじめまして。うっちーと申します。
> 一応プログラマの端くれです。
> Intelのコンパイラ欲しいなぁ・・。

無料で『Non-Commercial Unsupported Version』が使えると思いますよ。

では。

[cppll:10124] Re: SIMD用のベクトル・クラスで遊んでみました

[ | / | ]
Subject:
[cppll:10124] Re: SIMD用のベクトル・クラスで遊んでみました
From:
UCHIYAMA, Hiroyoshi <uttiee@...>
Date:
Sat, 10 Jan 2004 00:32:41 +0900
X-Mailer:
Becky! ver. 2.06.02
Message-Id:
<20040110003058.42B0.UTTIEE‐at‐mbk.nifty.com>
In-Reply-To:
10123
References:
10119 10123
皆さん、こん**は。うっちーです。

> 無料で『Non-Commercial Unsupported Version』が使えると思いますよ。

これってLinux版だけですよね。
私は基本的に窓使いなもので・・。

でもLinuxならフリーソフトの開発にIntelのコンパイラ使えるってことですね。
いいなぁ。


///////////////////////////////////////////////////
うっちー <uttiee@...>
GnuPG fingerprint =
315A BD55 8098 0FD7 ACEF  C775 0F58 0CAF F294 BC8D
///////////////////////////////////////////////////

[cppll:10122] Re: SIMD用のベクトル・クラスで遊んでみました

[ | / ▼ | ]
Subject:
[cppll:10122] Re: SIMD用のベクトル・クラスで遊んでみました
From:
Tadakazu Nagai <nagai@...>
Date:
Fri, 9 Jan 2004 23:08:43 +0900
X-Mailer:
Microsoft Outlook Express 6.00.2800.1158
Message-Id:
<003001c3d6ba$2e0f1f70$87d4e9ca@nagaiss>
References:
10107 10113
こんばんは。永井です。

> > # ここしばらく「Intelのコンパイラいいかも」とか思っています。
>
> でも、本当にいいのは、コンパイラ・オプションをちょいと調整
> するだけでコンパイラが勝手にSIMDを使ってくれたりする点で、
> こっちの方がパフォーマンスが強烈に向上することがあります。
> declspec(align(16)) を使って、変数を16Byte境界にアライメント
> したほうがよいなどという制約はありますが、これはマクロを作って
> おけば何とかなるレベルですし。

ちょうど、次にはこのお題をと思っていたところです。

以前に、CodeWarriorをその機能にあこがれて買ったのですが、
いまひとつどうしたらMMXとかを使ったコードを吐き出してくれるのか
分からずに挫折したことがあるので、今度こそIntel C++でリベンジと
思っていたところです。

それでは。

--
自由にプログラマー
永井 忠一(ながい ただかず)
http://www.kt.rim.or.jp/~nagai/

Navigation

検索

[検索ヘルプ]

Maintener: Tietew <www.tietew.jp>
Powered by Ruby on Rails, Mongrel, PostgreSQL, and Hyper Estraier.
click here