[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 09/03 07:28 / Filesize : 292 KB / Number-of Response : 1049
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C#, C♯, C#相談室 Part92



1 名前:デフォルトの名無しさん mailto:sage [2017/01/28(土) 16:46:53.58 ID:op86qfG/.net]
■Visual Studio 2015 Community & Express (無償の統合開発環境)等はこちら
www.visualstudio.com/downloads/

■コードを貼る場合はこちら
ideone.com/

■前スレ
C#, C♯, C#相談室 Part91
echo.2ch.net/test/read.cgi/tech/1467211515/

■次スレは>>970が建てる事。
建てられない場合は他を指定する事。

802 名前:デフォルトの名無しさん mailto:sage [2017/04/12(水) 07:57:27.76 ID:A6XRqe5e.net]
常識的に考えて、ボトルネックはNextBytesじゃないかなw

803 名前:デフォルトの名無しさん mailto:sage [2017/04/12(水) 11:23:50.73 ID:E1U6B9R0.net]
>>766, 767
なるほどメモリアクセスかー

Taskの切り替えや待ち時間などのオーバーヘッドはご存知よ
書いたとおり、Taskをふたつ待つ程度のオーバーヘッドは数msec

NextBytesを計測から外し、1GBで0クリアを試してみたら、150msec前後かかった
レートだと 6700MB/sec ぐらい
実行環境は DDR3-1333 なんだけど、理論値 10667MB/sec
途中GC入ってたし、こんなもんかー

804 名前:デフォルトの名無しさん mailto:sage [2017/04/12(水) 11:40:08.42 ID:7YKbJJVc.net]
byte(IntPtrじゃない)の配列のアクセスでそんなにHWの理論値に近い数字が
出る訳ないと思うよw

っていうか理論値はあくまで純粋にHWの転送能力であってCPUが介在する場合は
そんな値絶対出ないし

測定値、計算のどちらかまたは両方が間違いなく間違ってるw

805 名前:デフォルトの名無しさん mailto:sage [2017/04/12(水) 12:09:07.27 ID:E1U6B9R0.net]
>> 770
Array.Clear() って .NET Core の内部ではポインタ幅(64bit?)で0クリアしてたよ
端っこはバイト単位での0クリアだったけど

// now write pointer sized pieces
size_t nPtrs = (endBytes - memBytes) / sizeof(PTR_PTR_VOID);
PTR_PTR_VOID memPtr = (PTR_PTR_VOID) memBytes;
for (size_t i = 0; i < nPtrs; i++)
*memPtr++ = 0;

GC発生しないようにバッファ使い回してみたら、7000〜8000MB/sec くらいだった
理論値でるとも言ってないし、7〜8割なら測定値、計算ともに妥当じゃない?

806 名前:デフォルトの名無しさん mailto:sage [2017/04/12(水) 13:46:41.47 ID:PeioJu3J.net]
(byte配列ならnewした時点で既定値(則ち0)で埋められてるだろ、と言ったらあかんのか?)

807 名前:デフォルトの名無しさん mailto:sage [2017/04/12(水) 14:05:20.61 ID:OIzgc8H/.net]
>>772
そりゃ実験のためのコードだからね
何のためにこんなこと試すのかわかんないけど

808 名前:デフォルトの名無しさん mailto:sage [2017/04/12(水) 14:11:16.09 ID:E1U6B9R0.net]
>>772
LOH(約85000バイト以上のオブジェクト)は仮想メモリ空間のフラグメンテーションを発生させるので、
OutOfMemoryException が発生しやすくなる

巨大バッファをガンガン使いまわすアプリは OOMを防ぐため、
バッファをキャッシュして使いまわす必要があったのね

んで、キャッシュしてたバッファを使うときに高速

809 名前:ノ0クリアしたいってのが、今回の大元でした []
[ここ壊れてます]

810 名前:デフォルトの名無しさん mailto:sage [2017/04/12(水) 18:50:16.39 ID:IE9Tc5o9.net]
配列のメモリークリアみたいな物はマルチスレッド化しても高速化しないだろうね
原理的にサイズが大きくても高速化しないと思われる



811 名前:デフォルトの名無しさん mailto:sage [2017/04/12(水) 19:03:44.50 ID:0XMPUeTg.net]
15年前のシングルコアのプロセッサーが当たり前の時代ならその通りだけど、
今日的にはそんなこともないんじゃないの?

たとえ物理メモリーは排他的にしかアクセスできない制約があるにしろ、
並列化の効用がまったくないとも思えん

812 名前:デフォルトの名無しさん mailto:sage [2017/04/12(水) 19:08:41.74 ID:giyYheDf.net]
むしろCPUキャッシュに左右されんじゃねのか
環境でばらつきまくって計測の意味もなさげ

813 名前:デフォルトの名無しさん mailto:sage [2017/04/12(水) 19:51:51.86 ID:QhQPiH2H.net]
とりあえずWindowsマシン@4.6.2で色々試してみたら

[SuppressUnmanagedCodeSecurity, DllImport("kernel32")]
extern static void ZeroMemory(byte[] Destination, IntPtr Length);

[SuppressUnmanagedCodeSecurity, DllImport("msvcrt", CallingConvention = CallingConvention.Cdecl)]
extern static void memset(byte[] _Dst, int _Val, IntPtr _Size);

とかした方が雀の涙ほど速かった、CILだと

ldarg.0
ldc.i4.0
ldelema uint8
ldc.i4.0
ldarg.0
ldlen
initblk

あたりで漸く同等、しかも64bitに限った話、32bitだとどれも誤差レベル

814 名前:デフォルトの名無しさん mailto:sage [2017/04/12(水) 21:18:24.58 ID:u533e0uw.net]
>>776
ほとんどメモリーアクセスしかないのに高速化できるわけないだろ

815 名前:デフォルトの名無しさん mailto:sage [2017/04/12(水) 21:45:31.51 ID:0XMPUeTg.net]
>>779
高級言語のコード上はそうでもCPUの実際の動作はそうじゃないよw

816 名前:デフォルトの名無しさん mailto:sage [2017/04/12(水) 21:56:27.84 ID:5KMe1hi6.net]
どう動いてるんだ?

817 名前:デフォルトの名無しさん mailto:sage [2017/04/12(水) 23:32:44.30 ID:7AJloho+.net]
>>780
はあ?
メモリーアクセス以外のどんな動作があるんだよ w

818 名前:デフォルトの名無しさん mailto:sage [2017/04/12(水) 23:49:21.06 ID:fn4L3E2o.net]
仕組み判らないけどメモリをキャッシュしてる場合
同じキャッシュ単位内に同時に書き込みできるものなのか?

819 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 00:14:45.08 ID:Vv6BlwOK.net]
使うときに必要な分だけ0クリアじゃだめなんか?大量にバッファを0クリアする場面が思い付かん。

820 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 00:38:14.37 ID:px7lD0L1.net]
>>782
DMAでも使ってない限り、少なくともポインタのインクリメントとループの終了条件のチェックは入る



821 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 00:57:14.48 ID:G9tlFT6D.net]
>>785
x86にはストリング命令というチートが有ってだな

822 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 01:07:16.95 ID:px7lD0L1.net]
あ、ポインタは自動インクリメント付きの命令が使えるかも

823 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 01:22:49.09 ID:sVC5qkLg.net]
>>784
つ GC

>>783
Core i7 2600 4Core Sandy Bridge とかだと、CPU-Z とかのツールで見てみると
L3 キャッシュまで搭載していて、
・L2 は 256KB が 4コア分
・L3 は 8MBひとつ
なので、L2間でコア間のキャッシュコヒーレンシ(一貫性)を解決してるはず
キャッシュライン(64Byte)ごとに他のコアで書き込みがあるかとかをチェックしてる

同時の書き込みもちゃんと検知されている
キャッシュラインで競合すると書き戻しとかが発生するので、
重ならないようにするのがいいらしい

824 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 01:23:52.75 ID:DHabuNl5.net]
そもそもrep stosb云々とか以前に、命令のクロックサイクルなんかより
メモリレイテンシがデカすぎて取るに足らないって事よ、コヒーレンシの実装にも左右されそうだし
1つのバカでかいバッファより、バッファ自体を分割したほうが良いんでないか

825 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 01:44:29.44 ID:G9tlFT6D.net]
スレッドをいくつ作ろうが、単純な0クリアだからキャッシュ内のメモリーを処理する速度がキャッシュとメモリーの転送速度より早くなり
CPUはキャッシュが満たされるのを待つ必要があるから頭打ちになるってことかね

826 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 03:28:18.29 ID:NHsAQDrp.net]
WinFormsはif文やっと覚えましたってレベルでも
有名なサイトのコピペで目的のもの作れたが
WPFはデリゲートや非同期を熟知してないと一歩も進めない感じ
コピペしたくても自由度が高く手法が多すぎて無理

827 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 05:44:30.50 ID:FNNFGlTu.net]
今のCPUなら1CPUでも、連続0書き込みなんかしたらメモリーの速度を圧倒してしまうからな
マルチスレッドなんかにしたら、そのオーバーヘッドが邪魔してかえって遅くなるだろう

828 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 06:14:59.28 ID:wfOumNdE.net]
CPUの実際の動作がさっぱりわからん

829 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 06:22:05.68 ID:vvMMmk8r.net]
気にしなくていい

830 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 06:53:09.50 ID:DSZn496T.net]
>>785
おっさんいつの知識で語ってるんだよ w
そんなもん主記憶への書き込みに比べたらゴミにしかならんぞ



831 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 07:19:52.20 ID:FNNFGlTu.net]
>>793
CPUというよりも、CPUとメモリーのスピード差が決定的すぎるんだよ
メモリーにアクセスするとCPU命令で数千命令程度の待ちが入る
余りに待ちが長いので、その間に色々計算ができるようにCPUには工夫が入っていたり
マルチCPUにして、別のCPUが計算している間に書き込んでしまえといった方面で創意工夫がされているんだ。
境界チェックくらいなら、書き込み待ち時間で十分にできるから他のCPUにまで影響を与えないようにして
書き込みスレッドは一本にして、他のCPUは別のメモリーアクセス以外の仕事ができるように開けておいた方がトータル良い結果を出すって事。

832 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 08:39:19.14 ID:2TLG8dmE.net]
どうでも良いが、メモリーに書き込まないスレッドとかありえないと思うんだ・・・

833 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 10:17:04.48 ID:xhr4sxE5.net]
本当に小規模な計算ら、レジスタだけで解決できるだろう

834 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 13:14:58.98 ID:mVrmFNTT.net]
C++ならともかくC#で気にする必要のあることなんだろうか

835 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 13:31:22.91 ID:FNNFGlTu.net]
>>799
知っていれば無意味な並列化とかしなくて済むだろ
そうすればソースも分かりやすくすっきりするし
0フィル処理なんて詰まらない処理なら、効果はてきめんだ。

836 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 13:43:29.67 ID:xhr4sxE5.net]
無意味な並列化にかかる工数と、無意味な並列化は逆効果ということを検証する工数
どちらがよりコストがかかるんだろうか。

837 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 13:49:55.01 ID:FNNFGlTu.net]
高速化目的で並列化しなきゃならない程の状況なら、検証はするだろ。
で、並列化するときにどういう方向性が効果的かってのを知っておくことは
コードを手早く書く上での基本テクニックだよ
無意味なコードは、そもそも書かないし試さないというショートカットができるからね。
将棋の名人でもすべての手を読んでいる訳じゃない、効果的な枝だけを深読みしているみたいなもんだ。

838 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 14:09:41.46 ID:xhr4sxE5.net]
並列化をしたくなるのは、代替がそういう状況に陥る前の段階での思いつきなんだよねたとえば今回の0フィルとか。

839 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 16:09:48.66 ID:aK+zC0HQ.net]
並列化の基本はいかに粒度を上げるかだよ
極端な話、プロセスを2つに増やして2倍速くなるならそれでいい
ミクロな視点で考えるのはほとんどのケースにおいて時間の無駄

840 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 16:28:44.49 ID:FNNFGlTu.net]
>>803
こういうのってコンピュータの仕組みが分かってしまえば、高速化手法として頭に浮かぶことすらないですから。
考えるまでもなく除外なんですよ、脊髄反射。
よく似た物にページングのチューンなんかがあるね。
並列化したら、ずっと仮想メモリにページアウトページインばっかりするようになってしまうのが見え見えのコードとかね。
こういうケースが見えて居る時にマクロ視点でプロセス増やして・・・と考えることは無いねw



841 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 18:05:14.12 ID:sVC5qkLg.net]
>>805
コンピュータの仕組みなんて常に変わっていくもの
脊髄反射で手法を除外するのはよくない

あと一レス目で指摘するならともかく、問題点が整理されてから
後出しで手法をダメ出しするのはカッコ悪い

842 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 18:18:41.10 ID:xmE6C1ua.net]
>>796
それってCPUの実際の動作じゃなくて単なる考え方だよね・・・

843 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 18:34:37.22 ID:2TLG8dmE.net]
と、言うより>>796は思いっきり出鱈目ですわ
境界チェック云々はマルチCPUじゃなくてパイプラインで解決されるからプログラミング要らずだし

844 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 19:49:41.71 ID:woBc/tdN.net]
>>79
> メモリーにアクセスするとCPU命令で数千命令程度の待ちが入る
今時のメモリー(主記憶)のレイテンシーって10ns以下だと思うが10nsで1,000命令も実行できるCPU教えてくれ

845 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 20:53:44.12 ID:FNNFGlTu.net]
>>808
まぁ、その手の事を指摘したつもりだけれどそう読んではくれないみたいだね。
あと、最近のはパイプライン以外にも命令の並べ替えやら入っているからw

ホコポコ無意味に返信している内容は、多分自演なんだろうけど、そろそろやめたら。
こういうのはゲーム作ったことあるような人間なら常識の範囲なので、考えるまでもないような話の類。
俺以外のヤツもたくさん指摘しているが、それだけ普通に知っている人は多い話なのだよ。

846 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 21:04:00.56 ID:1tPgrneG.net]
いつの時代のどのハードのゲームだよ
アセンブラのバイトコード気にするとか20年前の話だろ

いっぽかたが計算してる間に他のCPUで書き込みするのは
同時にメモリに書き込もうとして競合するのを避けるためじゃないん

847 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 21:15:04.20 ID:FNNFGlTu.net]
しつこいねぇ
この手の話をゲーム屋が知ってるのは、何かの本で読んだとかではなくて
ソニーとか任天堂とかマイクロソフトとか今は逝ってしまっているセガとかハード屋が
セミナーで現在のハードの状況と止めた方が良いコードなんかのヒントとして教えてくれるからなんだよ。
その知識を持って、インテルの資料とかを読めば大体の事は分かるんよ。
もちろん素から勉強している人も居るだろうけどね。

今回の話はマシン語ではなく、最近のメモリー事情の話なんだよ。
連続アドレスの書き込みor読み出しには強いが、飛び飛びのアドレスにアクセスすると弱いダイナミックメモリー事情とかの話。
メモリフィルとか連続アドレスをアクセスしているのに、わざわざ壊すようなマルチスレッドはそういう点でも駄目なんだな。
決定的にはメモリーが遅いという点に尽きるが。
こんな風に駄目な理由に一つ以上のネタがあるんだよ、だからやるまでもないの。

848 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 21:29:31.37 ID:1tPgrneG.net]
ほんとに理解してるか?
パイプラインで境界チェックを解決って意味が分からん
どうやってんの

849 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 21:32:07.91 ID:3oML3qao.net]
そろそろ死ねよチンカス勢
これ以上口を聞くとスレを埋めるぞ

850 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 21:46:56.27 ID:2TLG8dmE.net]
>>813
パイプラインがRISC時代に進化して、レジスタが干渉しなければインストラクションを同時実行するようになったから
件の例だとメモリクリアと境界チェックを同時にヤるんだわ
だから一つのCPUは見かけ上メモリクリアを境界チェックの時間0で延々と実行する

コレを実行するのは一つのCPUだし、同時実行に人が介在すること



851 名前:無いのでプログラマーは何もヤることはありません
ホント>>796は酷い出鱈目ですわ
[]
[ここ壊れてます]

852 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 22:00:11.37 ID:oixKZUzL.net]
何を争ってるのかさっぱりわからんw
ただ昨日書いた>>776が間違ってることはよくわかった。
よく考えればこれ486の時代とかでも当たり前だw
すまんかった

853 名前:デフォルトの名無しさん [2017/04/13(木) 22:00:58.20 ID:FNNFGlTu.net]
>>815
>境界チェックくらいなら、書き込み待ち時間で十分にできるから他のCPUにまで影響を与えないようにして
これがパイプラインやらディレイスロットに相当する話として描いたんだよ
計算時間隠ぺいはパイプラインだけじゃないからな、不正確になるだろ。

854 名前:デフォルトの名無しさん [2017/04/13(木) 22:08:08.05 ID:FNNFGlTu.net]
ちなみに昨今のCPUは、機械語命令を別の内部用の命令に一旦変換することで互換を取っている
この変換で色々な隠ぺい処理がされる。
パイプラインの直接関与は無い。

855 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 22:55:07.48 ID:UJp3daw4.net]
そういうのはC++使いにやらせとけ

856 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 23:32:52.23 ID:ZueE7S//.net]
CPUの種類もいっぱいあるし実装すらmonoとかあるんだから考えても無駄だよ
ふつーにヤレ

857 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 23:35:00.21 ID:8HEXXOrW.net]
.NET 4.7でTupleも標準で使えるようになったと思ったら
Windows Server 2016でまだ使えない

858 名前:デフォルトの名無しさん mailto:sage [2017/04/13(木) 23:51:42.17 ID:qn5HP47l.net]
>>821
4.7がまだインストールできないってこと?

859 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 00:17:56.85 ID:SWEjH6Xz.net]
>>788
GCってガベージコレクタか?
メモリを回収するときにゼロクリアする必要はないんじゃね。痕跡を残したくないとかなら分からないでもないが。。

860 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 07:19:22.25 ID:KckXzUzz.net]
>>822
4。7って自動で入るのか?



861 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 08:29:17.03 ID:pJlkTYEJ.net]
.NET Framework 4.7 is part of Windows 10 Creators Update. What about other Windows versions?
You can start using .NET Framework 4.7 today on Creators Update. It will be available on other Windows versions soon. .
NET Framework 4.7 will support the same Windows versions as .NET Framework 4.6.2. It is an in-place update.

Windows10だけらしい

862 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 19:41:38.09 ID:zACr9/Dt.net]
4.7なんて何に使う気なんだ

863 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 19:57:13.78 ID:vwaM1ek4.net]
NuGetで取ってこなくても最新の機能が使えるとか
ValueTupleとかValueTaskとか

自分も試しにアップデートしてみたがまだ使えないみたいだね
もうちょっと纏めてからアップデートしてくれた方がいいんだけど
アップデートが細かすぎる

864 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 20:03:25.72 ID:znF0F+kk.net]
>>826
何に使うのかは知らんけどtupleを使いたいんだろ

865 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 20:10:48.82 ID:pJlkTYEJ.net]
知っていると思うけど、VSインストーラ立ち上げて4.7を追加インストールします
Windows10をCreatorsUpdateしてから処理したから、必須なのか不明ですが
多分それも必要です

866 名前:デフォルトの名無しさん mailto:sage [2017/04/14(金) 20:19:05.97 ID:bLw6Whqv.net]
Tuple<T>ってC#4.0からあったと思ったがそれじゃなく?

867 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 02:12:01.30 ID:aGMB9daN.net]
>>830
それとは違う

868 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 10:12:37.06 ID:iCdjVYwG.net]
>>818
ペンティアム2を昨今のCPUって言う人初めて見たw
てか、それらはx86のRISC化なんだが、
RISCっても

869 名前:のはパイプラインを高度に利用してトランジスタを増やさずに多重実行する技術だよ
パイプラインの関与と言うか、要です
[]
[ここ壊れてます]

870 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 10:16:28.45 ID:C33P0hB8.net]
アセンブラできない奴はまともに最適化はできない。これだけ。



871 名前:デフォルトの名無しさん [2017/04/15(土) 10:18:54.18 ID:3qBkA9st.net]
アセンブラとか老ガイジかな?

872 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 10:23:22.48 ID:C33P0hB8.net]
c#のデバッグでなんで機械語が表示できるようになってると思ってんだ? 低脳馬鹿デジタルネイティブさん >>834

873 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 10:35:26.60 ID:QicJR8ZP.net]
ValueTupleって最初はワクワクしたけど使い所あんましないな
どういう時に使うんだこれ

874 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 10:36:36.36 ID:qt9qpnGQ.net]
うわあ

875 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 10:43:55.01 ID:iCdjVYwG.net]
>>836
out 使って値を返しているやつを素直に書けるだろ

876 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 10:49:59.89 ID:3WGNKYp+.net]
>>832
まてまて、SIMDとパイプラインと並列処理は意味が違うぞ。

言いたいことはわかるけどなw

877 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 10:50:24.08 ID:iCdjVYwG.net]
>>835
C#のILをJITがマシン語に変換して、更にCPU内部でRISC形式の命令に変換
更に命令の順番を最適化して多重実行をするわけで、ILを見たところでどれが効率高いかなど判断するのは人間業じゃないな
せいぜいキャッシュサイズを意識する程度だろうが、2つのループを同時実行されることまで考慮したらどうすれば良いのやら・・・

878 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 10:57:05.83 ID:iCdjVYwG.net]
>>839
SIMDじゃなくて、通常のオペコードをRISC的な内部オペコードに変換するんだよ
で、10段とか15段に細分化されたパイプラインを使って、パイプラインに繋がった演算装置を
複数の実行ユニットが使いまわしをしてトランジスタ増やさずに見かけの同時実行数を5とかに増やす

まあ、それをどうやって実現しているのかさっぱり分からんけどな

879 名前: mailto:sage [2017/04/15(土) 10:57:43.50 ID:4VXj2s/u.net]
>>840
どこが効率悪いかはわからんか?
あー、アンボクシングかかっとるわ、とか、
これのせいでストールしよるな、とか。

880 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 11:00:42.88 ID:iCdjVYwG.net]
>>842
デバッグに使うのは当然なんだが、通常のソースレベルの効率以上の情報をILから探し出すのは至難の業です
最終的な実行環境は俺を含めてハードの素人には手を出せない神の領域かと



881 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 11:34:57.52 ID:QicJR8ZP.net]
>>838
outはそもそも使わないし
TryXxx系はValueTupleよりout varの方がスマート

882 名前: mailto:sage [2017/04/15(土) 11:39:27.67 ID:4VXj2s/u.net]
>>843
コーディング中はそりゃ、あんまりそこに固執すると目的地にたどり着きさえしなくなっちゃうもんな。
コンパイラが賢かったり、JITが地味に賢くなって要らない小技になったのも沢山あるし。
たまに見ると面白いよ。あ、これメモ化しちゃうんだ、とか。

883 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 11:39:28.67 ID:UPL5S+RA.net]
そうそう

pythonでやってたことをc#でもできるようになったものって
実際使ってみてもいまいちなんだよな
めんどくさいから欲しかった機能だけどc#流になるとそれ以上にめんどくさいしスマートじゃない

884 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 11:44:51.81 ID:eeh5f4V4.net]
>>832
ペン2には一言も言及してないのに勝手にそうするキチガイさんですか? >>839 これも自演でしょ
多分10年以上も前からここで、板が白けきるまで偉そうな事いいながら荒らしまくっていた人なんでしょうけれど。
そろそろ死んでください。

885 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 11:49:23.70 ID:iCdjVYwG.net]
今回の拡張の中で
ref var a = hoge

886 名前:();
と言う、参照戻り値ってのの使い方が難しいわ
[]
[ここ壊れてます]

887 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 11:51:55.21 ID:iCdjVYwG.net]
>>847
>、機械語命令を別の内部用の命令に一旦変換することで互換を取っている
コレはPen2とかK6辺りから始まりました
20年前の技術ですね

888 名前:デフォルトの名無しさん [2017/04/15(土) 11:52:06.28 ID:mE+AhP/n.net]
初心者です

C#はメモリ管理を気にしなくて良いと聞きました
本当でしょうか?

889 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 11:54:00.80 ID:eeh5f4V4.net]
たしかCore2以降は、VILW命令に変換していたと思った。
命令ストリームからVILW命令6スロット分に変換して
6命令ずつ同時実行する事で低クロックでも高速に動作とか。
x86系以外では、スーパースカラの採用も多いみたいだね。

890 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 11:55:39.30 ID:P11oDSMM.net]
本当だよ
2人くらい何か囀ってるように見えるけど、キチガイだから気にしてはいけないよ



891 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 12:00:32.47 ID:3WGNKYp+.net]
>>847
俺、死ぬんか?

892 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 13:12:21.09 ID:7hkWD0i5.net]
>>850
メモリ解放なんかは自動ってことになってるけど
メモリ確保やら初期化やらは気にしないとだめだし「メモリ管理」の内容による

893 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 13:18:16.99 ID:GC6K0tB8.net]
>>823
これ、まともに回答しようと思うとひどく大変なんだが……
823がGCの内部実装を把握しているうえでの指摘にも見えるし、
初心者の思いつきの質問にも見えるし……

初心者向け:
ヒープ確保したら0にクリアされてる
メモリを回収後、再利用されるまでに0クリアする必要があるってこと

把握してる人向け:
メモリコンパクション時にページングの機構使って0クリアしてるのかってことなら、
.NET Core のソースで確認しようと思ったけど
gc.cpp だけでも1.2MBあって挫折した

>>850
初心者のうちは気にしなくていいよ

894 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 13:43:04.38 ID:5VFPMUgC.net]
>>846
C#は式指向のシンタックスを目指してるから、あくまでステートメントに拘るPythonとはだいぶ方向性が違うよ
可能な限り全てのメソッドを式形式で定義する縛りでコーディングしてみたらいい
そうすればC#7の仕様の意図するところは簡単に理解できる

895 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 14:29:19.96 ID:56TRC7nM.net]
みんな詳しすぎ
頭いいんだな

896 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 14:40:07.25 ID:3WGNKYp+.net]
>>842
>>843
思ったけど、あのVTuneってそんな機能あるんかな?

897 名前:デフォルトの名無しさん [2017/04/15(土) 15:19:31.88 ID:A0YDVHHt.net]
昔Excelを弄ってた時、Excelのオブジェクト解放したはずなのに
単体テストし終わってからタスクマネージャー見るとExcelが一杯残ってた(通称ゾンビ)。
シートやらブックやら解放してから最後にExcel本体解放してってやってたけど
今は一発で解放できるんだよね?
メモリ管理とか気にしないけど、こういうのは気になる。

898 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 15:29:43.17 ID:8JN0d/j3.net]
所謂アンマネージリソースを閉じてないとC#であってもゾンビ化することはたまにある

899 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 15:39:12.33 ID:eeh5f4V4.net]
>>859
Excelは無理だよ、細かくReleaseComObjectしなきゃ駄目だし、しても残る時は残る。
残ってしまう事を前提に組むしかない

900 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 15:41:12.30 ID:aGMB9daN.net]
>>861
しても残る時は残る、はし足りないだけでは。



901 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 15:43:39.01 ID:eeh5f4V4.net]
>>857
自分の書いた内容が正しいという流れになるまでしつこく続ける自演キチガイが一匹いるだけ。
もう相当昔から粘着しているからいい年だと思うんだが、よく生活できてるなって感じだな。
それ以外の人は普通だよ。

902 名前:デフォルトの名無しさん mailto:sage [2017/04/15(土) 15:58:16.95 ID:3WGNKYp+.net]
ちなみに俺は違うからな






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<292KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef