いてつくブログ

2ちゃんねるのスレッドをコピペしてまとめてみるブログ

プログラム技術

PC等C#, C♯, C#相談室 Part74

1 :デフォルトの名無しさん:2012/07/14(土) 13:52:30.23
前スレ
C#, C♯, C#相談室 Part73
http://toro.2ch.net/test/read.cgi/tech/1338512087/

Visual Studio 2010 Express
http://www.microsoft.com/japan/msdn/vstudio/express/default.aspx

180 :デフォルトの名無しさん:2012/07/27(金) 12:03:57.13
すんません、C#でこういうことできますか?

this.txtbox1.text="fuga";

a="this.txtbox1"; //または a="this.txtbox1.text";
&a.text="hoge"; //または &a="hoge";

b=this.txtbox1.text;
//b 出→ hoge

これの名称もわからず直な質問ですが理解できた方おしえてください。

191 :デフォルトの名無しさん:2012/07/27(金) 20:20:13.60
アプリをずっと回しているとメモリをガンガン消費しやがるな。



192 :デフォルトの名無しさん:2012/07/27(金) 20:21:06.40
GC.collect();

ってやっても意味が無いのか?

193 :デフォルトの名無しさん:2012/07/27(金) 21:12:21.63
>>191
環境と再現コード

194 :デフォルトの名無しさん:2012/07/27(金) 21:45:59.56
>>192-193
99%釣りだから触るな

196 :デフォルトの名無しさん:2012/07/27(金) 22:16:45.26
>>193
timerイベントの中でガリガリやってるので・・・
もうちょっとあたりをつけてみます。

>>194
釣りじゃねーよ。はげ。

200 :デフォルトの名無しさん:2012/07/27(金) 22:26:21.34
あんな一言で自分のバグ以外に原因を追求しようとするなんて
釣りじゃなかったらただの初心者だろw

201 :デフォルトの名無しさん:2012/07/27(金) 22:51:12.82
>>200
Webbrowser Navigate でメモリを消費してるっぽい。
調べてみたらどうも既知の問題みたいだな。

まいった。どうしようか。チックイベントでやってんだが。

218 :デフォルトの名無しさん:2012/07/28(土) 09:14:32.91
>>180です、メニューとかはメインFormを動的に作成させるよう仕込んだらDBのデータ元でメニュー管理や作成はできました。
ただFormなのですが、、説明が。。ぶっちゃけると
FormHoge.cs
FormHoge.Designer.cs
ってファイルをディレクトリから拾ってきて動的に実行したいって事なんです。。MDIFormで例をあげると
親だけはプロジェクトからコンパイルなどを行い。子Formらはコンパイルせず、えっと。。ファイルから立ち上げる。。みたいな?
説明むりスマソ
phpクラス読み込んでるんと似たような感じです。。
またはForm単一でコンパイルしたファイルみたいなのあるんですかね?

たぶん何いってんだこいつって思いでしょうが、説明がうまくできません、すまん

264 :デフォルトの名無しさん:2012/07/30(月) 17:51:42.68
ちょいと相談に乗ってくれ
テキストファイルを解析するツール作ろうとしてるんだけど
その入力フォーマットが空行で区切られたブロック毎に振り分け先を変えるってもの
ブロックの種類は、中に含まれてる特定の文字パターンで決まる
最初正規表現でやろうと思ったんだけど、複数行だと上手くヒットしない
このまま正規表現で進めていいものか不安になってきた
もしもっとマッチする技術があるなら教えて欲しい

297 :デフォルトの名無しさん:2012/08/01(水) 14:56:08.08
別スレッドで処理しろってのは正しいけど、Threadクラスはダメだって。
あれは生で使うものじゃない。
.NET 4以降ならTask、それ以前ならBackgroundWorkerとか。

321 :デフォルトの名無しさん:2012/08/01(水) 22:48:05.88
なんで、スレッドの話になるとスレッドがあれるんだろ?

さて、それはさておき質問させてください。

mene_strip コントロールをを初めて使い始めたんですけど、
マウスが上位階層の項目の上にフォーカスがあたったら
子要素を展開させたいんですけどどうすれば良いでしょうか?

335 :321:2012/08/02(木) 20:44:48.09
そんな事より誰か

オラにアイデアおぉううう

336 :デフォルトの名無しさん:2012/08/02(木) 20:49:17.25
>>>335
Windows Formのならデフォでそういう動作になってると思うんだけど...


337 :321:2012/08/02(木) 20:50:30.38
>>336
WEB系の開発が多かったから

JavaScriptのHoverイベントみたく展開したいのですよ。
それがどうもユーザライクな動きに見えます。

339 :デフォルトの名無しさん:2012/08/02(木) 20:57:08.55
>>337
言ってることがよくわからんが、だからデフォでそういう動作になってるって。

っていうか、たぶん問題の内容が伝わってないんだな。
最低でも他人に問題が伝わるように書かないと誰も回答してくれないと思うよ。

361 :デフォルトの名無しさん:2012/08/04(土) 17:50:35.62
C#のWindowsFormからデータ取得を押した時に
Webサーバ側で基本認証されたサイト上にID・PASSを送信し
認証が突破された場合には、
WEBサーバから特定のデータをクライアントに戻したいと思います。

これを実現する為にはどうすれば良いのでしょうか?

■図

Windows Form

実行 ボタンの押下

ID=takesi PASS=komaneti

認証突破

http://datatoruzo.com/get_data.php

"komaneti,komaneti2,komaneti3" をクライアントに戻す。


362 :デフォルトの名無しさん:2012/08/04(土) 18:12:18.65
突破ってなんか攻撃しているかのようだな

363 :デフォルトの名無しさん:2012/08/04(土) 18:19:02.72
>>361
認証が必要なページをダウンロードする
http://dobon.net/vb/dotnet/internet/usecredentials.html

サーバーサイドのphpの方は知ったことではないので適当にやってくれ

366 :デフォルトの名無しさん:2012/08/04(土) 20:30:25.71
>>363
サンキューやってみる。
DLってのが若干気になるけどね。

>>362
自分のサーバだから何をしようと勝手でしょ?



390 :デフォルトの名無しさん:2012/08/07(火) 13:55:49.60
http://www.02.246.ne.jp/~torutk/javahow2/commandline.html#doc1_id41
ここのサイトの

public class MyApplication {
private static int number;
private static String name;

public static void main(final String[] args) {
parseOptions(args);
:
}

private static void parseOptions(final String[] args) {
if (args.length<2) {
System.err.println("引数指定が不足です。");
System.exit(1);
}
number = Integer.parseInt(args[0]);
name = args[1];
}
}

このソースてすが
parseOptions(args);
この部分で引数としてargsを渡してるけど、
argsの中身ってつまりな何なのかわかりません…

ご教授お願いします。

443 :デフォルトの名無しさん:2012/08/09(木) 23:18:14.45
C#でエクセルを扱うアプリケーションを作ろうとして、例えば、あるセル番地を読み込むって場合に


var hage = sheet.Cells[1, 1];


ってハードコーディングしてしまうと、将来的にセル番地に変更が出たときに面倒なので変数で置き換えたいんです。
これ自体Excel VBAなどでは常識のような作法ですが、
Excel VBAの場合、適当なモジュールにConstでセル番地を宣言していましたが、
C#の場合は、何処にそういう定数を書くべきなのでしょうか?


(1) 外部の人間に保守・更新をする可能性がある場合、外部ファイルに定義する。
(2) 外部の人間は保守・更新をする可能性がない場合、内部ファイルにfinal変数で定義する。


と思っているのですが、(1)は、外部ファイル参照のオーバーヘッドがやや心配ですし、
そもそも、どういうファイルに定義するべきなのかも分かりません。

resxファイル?
txtファイル?
iniファイル?

どれを使うのが妥当なのでしょうか?

470 :デフォルトの名無しさん:2012/08/12(日) 10:06:46.29
.Net Framework 4.0 をWindows XP に入れて
同じプログラムを実行しているんですが

3台のうち1台のみ正常に動作し
他の2台については動きが怪しいです。

アプリは起動するものの
実行中にエラーは出ないものの特定の処理をスキップしている様なのです。

ここで疑問なのは、仮にプログラムのバグであれば3台とも
動かないハズなのですが1台だけ問題無く動くのです。

Windows 7 のマシンでやると全て正常に動作しています。

536 :デフォルトの名無しさん:2012/08/18(土) 02:58:57.36
An unmanaged resources are still unmanaged even if we use IDisposable.
The IDisposable just defines a general way to release some resources.

An managed resources are released automatically because GC will do the right thing at last, but it is not for unmanaged resources.

Therefore, a way is prepared for programmers that the resources to be released correctly, that is IDisposable.

537 :デフォルトの名無しさん:2012/08/18(土) 03:25:13.45
Corrected version of >>536

[For foreigners]

Unmanaged resources are still unmanaged even if we use IDisposable.
IDisposable just defines a general way to release some resources.

Managed resources are released automatically because GC will eventualy do the right thing, but it is not for unmanaged resources.

Therefore, a method is prepared for programmers so that the resources will be released correctly, that is the IDisposable.

541 :デフォルトの名無しさん:2012/08/18(土) 14:46:59.50
>>537
アンマネージドリソースはアンマネージドリソースだって言ってるだけだな。
言っちゃ悪いけど、ただの循環論だね。

問題は、最初から言ってるように内部でアンマネージドリソースを使ってるもの(例えばForm)をアンマネージドと
呼ぶべきかどうかじゃないのか。

548 :デフォルトの名無しさん:2012/08/18(土) 17:03:18.78
>>541
using,dispose,closeを呼ばないとファイナライザ走るまでメモリ以外のリソースが食いっぱなしになるならアンマネージド扱いしていい

551 :デフォルトの名無しさん:2012/08/18(土) 17:25:54.31
なるよ
だってアンマネージドリソースでもラップしてIDisposableを正しく実装したら
using Dispose Close ファイナライザのどれかでちゃんと解放してリソースリークから保護してくれる
これはすでにマネージドリソースそのもの

557 :デフォルトの名無しさん:2012/08/18(土) 17:51:10.03
>>551
残念ハズレ

665 :デフォルトの名無しさん:2012/08/23(木) 17:15:58.57
同じような話がスレが変わる後とにでてきて説明するのも疲れるな

674 :デフォルトの名無しさん:2012/08/23(木) 22:29:34.27
contentWindowでググれ
C#関係ないからもう来るな

675 :デフォルトの名無しさん:2012/08/23(木) 22:41:16.74
グーグルの検索なんてURLに検索文字列をエンコードしてリクエストするだけだカス

676 :デフォルトの名無しさん:2012/08/23(木) 22:44:07.66
初心者ほどクドイ真似したがるよな

695 :デフォルトの名無しさん:2012/08/23(木) 23:49:07.55
しかし、疑問があるな。
Google 検索 ボタンのソースを見ると↓になっていて、
typeにsubmitなんて記述が無いのに

<button id="gbqfba" aria-label="Google 検索" name="btnK" class="gbqfba gbqfba-hvr">
<span id="gbqfsa">Google 検索</span>
</button>

プログラムから追いかけると↓で正常に認識されてるんだよなぁ。不思議だ。。。
if (type.Equals("submit"))
{
//click

}

706 :デフォルトの名無しさん:2012/08/25(土) 09:39:05.97
プログラマのみなさんは2ちゃんブラウザは何を使っているの?

711 :デフォルトの名無しさん:2012/08/26(日) 18:54:29.29
質問なのですが、
class NumUpDownEx<T> {
 private T m_value;
private System.Windows.Forms.NumericUpDown m_ud; // これは適切に与えられる前提
 T Value { get (T)(object)m_ud.Value; } } // decimalをTにキャスト
 ...
}
は一応コンパイルできて動作もするのですが、(object)へのキャストを無くして、
decimalからTに直接キャストさせる方法って無いですか
(「decimalからTにキャストできる」ということを制約で与える等。)

729 :デフォルトの名無しさん:2012/08/27(月) 00:11:53.10

2chに一度に書き込める文字数は限られてるでしょ?

731 :デフォルトの名無しさん:2012/08/27(月) 00:27:18.44
>>729
こういう2ch専ブラのレスを表示するところをwebBrowserでやる場合に
こんな感じのコード書いたけど結果は上で書いたような動作するんだよ
http://ideone.com/oIgKB

740 :デフォルトの名無しさん:2012/08/27(月) 11:03:48.61
逆アセンブルされないアプリを作る場合
C++しかない?

747 :デフォルトの名無しさん:2012/08/27(月) 11:20:33.70
>>740
定番回答の三ヶ条
・お前の書いたコードなんて読みたがるやつは居ない
・カジュアルハック対策なら難読化しとけ
・隠したいデータはクライアントに渡すな

777 :デフォルトの名無しさん:2012/08/27(月) 21:21:19.16
自分で自力で考えて書いたコードがたまたま権利違反してたらアウトっておかしくね?

778 :デフォルトの名無しさん:2012/08/27(月) 21:25:01.79
>>777
完全に自力で書いたなら問題ないでしょ。特許侵害は起こりうるけど。
GPLと気付かずネットに転がってたコード片をコピペしただけでも感染する。

783 :デフォルトの名無しさん:2012/08/27(月) 21:41:39.31
>>778
一番悲惨なパターンはネットに転がっていたソースはフリーで、
後になってGPL判明でまとめてGPL感染するパターンかなw

回避というか、気付いてしまったときに、他のライセンス、つまり、
マルチライセンスの確認するぐらいしか今のところ手はないのかな。


787 :デフォルトの名無しさん:2012/08/27(月) 21:55:21.06
>>783
それいいな
dobonみたいなサイト作って釣ってコピペグラマ全滅とかおもしろそう

800 :デフォルトの名無しさん:2012/08/27(月) 22:29:45.78
GPL汚染の範囲をハッキリさせるために、誰か裁判やりまくってくれないかな

802 :デフォルトの名無しさん:2012/08/27(月) 22:41:42.02
.NET Frameworkを配布物に同梱したらアウトだよね
Windowsにプリインストールされてる.NETを利用するのはどうなんだろうな
.NET Frameworkが「システムライブラリ」かというと微妙だし
OSに含まれてるかどうかはWindowsのバージョンにもよるしなあ

831 :デフォルトの名無しさん:2012/08/28(火) 21:44:37.73
簡易Webサーバもどきみたいのを作っているのですがマルチスレッドについて詳しく解説している書籍などはありませんでしょうか
知っていたらお願いします
.net 3.5なので非Taskであれば嬉しいです

833 :デフォルトの名無しさん:2012/08/28(火) 23:12:22.04
あと、Thread建ててその中で同期I/OとかSleep書いてるのもアウト。

834 :デフォルトの名無しさん:2012/08/28(火) 23:33:14.35
>>833
> あと、Thread建ててその中で同期I/O
Unityだとそうしないと固まるAPIがあったわ

847 :デフォルトの名無しさん:2012/08/29(水) 17:18:14.08
stringプロパティをもつクラスの配列を、AtoZでソートしたいんだけどどうすればいいかな。Listを使わずにする方法があれば教えろください

849 :デフォルトの名無しさん:2012/08/29(水) 17:46:27.97
Array.Sort(array, (x, y) => x..String型のプロパティ.CompareTo(y.String型のプロパティ))
または
array.OrderBy(x => x.String型のプロパティ) 配列にしたければ最後に.ToArray()を付ける
foreachするだけなら後者でToArrayなしがおすすめ

862 :デフォルトの名無しさん:2012/08/29(水) 20:19:54.08
>ConditionalWeakTable
そんなもん追加されたのか。WeakReferenceを使うほとんどの用途はこれで十分だな。
Javaの弱参照は「GCしてもいいけどなるべくGCしないでね」という指定ができるから
キャッシュに使いやすい

894 :デフォルトの名無しさん:2012/08/30(木) 21:31:46.25
>>862の話はJVMなどの設定じゃなくてクラスの違いじゃね?
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/ref/WeakReference.html
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/ref/SoftReference.html
弱参照(すぐ消える)とソフト参照(余裕があれば残してくれるかもしれない)

895 :デフォルトの名無しさん:2012/08/30(木) 21:34:36.11
>>894
そんなもんユーザーコードレベルで実装できるわけないんだから
実際の挙動は当然JVMの実装次第でしょ

899 :デフォルトの名無しさん:2012/08/30(木) 21:44:10.77
>>895
残してくれる「かもしれない」って書いてるだろ
実装次第だからネックにもならないし、設定も特定の実装に依存もしない

ドキュメントにあることだけを前提にすべき
少なくともキャッシュしたい意図をJVMに伝えることは出来る

904 :デフォルトの名無しさん:2012/08/30(木) 22:06:11.17
>JavaだけでなくC#でもな

取ってつけたような一行w

906 :デフォルトの名無しさん:2012/08/30(木) 22:09:00.00
○○だけではなくC#もな、と付け加えることによって、あらゆる話題を扱うことを可能にする
このままこのスレはWin32APIスレの二の舞になってしまうのか!?

ご期待ください

909 :デフォルトの名無しさん:2012/08/30(木) 23:43:16.90
>>904 >>906
Monoや.NETCFとまで書かないと読み取れないか
色々残念だな

923 :デフォルトの名無しさん:2012/08/31(金) 01:03:19.31
お前らって高学歴なの?
1年ぐらい勉強してもお前らの会話さっぱりわからないんだが
大学でちょろっとC言語習った程度の俺には無理なのか

935 :デフォルトの名無しさん:2012/09/01(土) 19:33:01.22
ある条件を満たすまでスレッドをブロックしたとき,
昔はwhile(!条件){ Sleep(1); }を使っていました。
しかし、SpinWait.SpinUntil()を使うとよいと聞いたのですが、
両者にどのような違いがあるのでしょうか?
また最近の実装方法を知りたいのですが、Taskは終了するまでブロックという
使い方が主なようですが、条件でブロックすることはできないでしょうか?


http://toro.2ch.net/test/read.cgi/tech/1342241550/l50/../人気ブログランキングへ

PC等日本語プログラミング言語『なでしこ』スレ5

1 :デフォルトの名無しさん:2009/09/04(金) 19:31:07 ?PLT(14545)
クジラ机飛行氏作の「なでしこ」について語るスレッドです。
荒らし、煽りは徹底スルーで。
なでしこスレではあるけどひまわりもいいと思います。

前スレ
日本語プログラミング言語「なでしこ」スレ 3
http://pc11.2ch.net/test/read.cgi/tech/1189064357/

関連(ピヨピヨ)
■日本語プログラミング言語「なでしこ」
(本家) http://nadesi.com/

■日本語プログラミング言語「ひまわり」
(なでしこの前身)http://hima.chu.jp/

95 :デフォルトの名無しさん:2009/11/06(金) 00:33:14
アタック25の挑戦クイズみたいなのを作りたいんだけど
(動画の上に画像を重ねる。画像を透過して、動画の一部だけが見えるようにする)
MCIで動画開くと、別ウィンドウ?になっちゃうんだよね・・・

http://www.himanavi.net/cgi/nade-bbs2/cbbs.cgi?mode=al2&number=6955&no=0
のNo.2のレスのも試してみたけど、ボタンはうまくいくけど画像はできないし

あるいは、動画は別のソフトで再生して、母艦も画像みたいに透過ができて、
母艦そのもので動画を隠すとかできる
みたいな感じの方法があればそれでもいいけど

ひまでもなこでもおkです

127 :デフォルトの名無しさん:2009/11/19(木) 19:22:50 ?S★(711077)
>>95
まずは、動画を隠すための画像の周りを黒色で囲みます
JPEGなどの圧縮で色が変わると困るので保存時はPNG形式で
http://monoganac2.sakura.ne.jp/src/milktea27772.png

AフォームとAイメージを1個ずつ用意します
まずAイメージ部品に↑の画像を設定します

Aフォームの最前面表示をオンにして、Aフォームの画像にAイメージを設定して画像通り変形します
その際、勝手にドラッグ移動がオンになってしまうので、オフにしておきます
http://monoganac2.sakura.ne.jp/src/milktea27773.png
とりあえずこれで動画が隠れました

あとは状況によってAイメージの見せたい部分を黒色四角で塗りつぶします
Aフォームに再度Aイメージを設定しなおして、画像通り変形します
http://monoganac2.sakura.ne.jp/src/milktea27774.png
これで見せたい部分だけを透過させることができます

タスクバーにAフォームのボタンが表示されてしまうけど
質問掲示板あたりに非表示にする方法が載ってたと思います

あとはパネルっぽくなんたらかんたらめどい・・・

238 :デフォルトの名無しさん:2010/01/17(日) 20:00:35 ?PLT(14416)
なでしこで商用ソフトを作成するのは良いけど、間違っても同じソースコードにライセンス認証つけた体験版は公開しちゃダメだぞ!

239 :デフォルトの名無しさん:2010/01/24(日) 09:40:44
>>238
なんで?

241 :デフォルトの名無しさん:2010/01/27(水) 23:46:01 ?PLT(14416)
ありゃレスするの忘れてたごめんちゃーい

>>239
なでしこは暗号化部分が弱いからソースコードが抜かれる危険性がある
ソースコードを抜かれるとライセンス認証部分を書き換えてやることで製品版の機能を利用出来るようにクラックされてしまうかもしれないってこと
特にソースが日本語で分かりやすいから簡単にクラックされると思う

しかもなでしこは中間言語を介さないから生のソース(コメントとかも入った)が抜かれちゃうからさらに危険。

299 :デフォルトの名無しさん:2010/05/09(日) 21:46:21
http://www.himanavi.net/cgi/nade-bbs2/cbbs.cgi?mode=all&number=8698

300 :デフォルトの名無しさん:2010/05/09(日) 23:47:06
>>299
なでしことはどういう関係が???

349 :デフォルトの名無しさん:2010/09/11(土) 20:01:34
ここの人達に意見を聞きたいんですが
>>241
でライセンス認証つけた体験版は公開するとマズイって話がありますが、
ソース簡単に抜かれるなら、ライセンス認証有る無しに関わらず、
体験版は公開しない方がいいのでしょうか?

例えば、
3分しか使用できない→時間制限がないように書き換えられて盗まれてしまう
音にノイズがかかる→ノイズを付ける部分を除かれて盗まれてしまう。
とか考えると、どんな体験版も出すべきじゃないのかなと思ってしまいます

400 :デフォルトの名無しさん:2011/02/06(日) 23:28:12
なでしこだけで具体的にどんなアプリケーションがつくれますか?

411 :デフォルトの名無しさん:2011/02/07(月) 18:19:00
公式書はほとんど見掛けませんね。
なでしこそのものの命令群は実はそこまで解説することが無かったりするので、あとは用途の方針的なお話になってしまったりします。
Cで再現できることは基本的に考え方として流用できます。(3d描画はまた次元の違う話しになりますが)

またなでしこに限らず、言語を始める際には何かはっきりとした完成図があたまにないと進まないものです。
私は暫くここで出来る限りの質問に答えますよ。

412 :デフォルトの名無しさん:2011/02/07(月) 18:28:37
>>411
なでしこ製作者か、その関係者かい?

413 :デフォルトの名無しさん:2011/02/07(月) 19:37:56
>>412
いえ、ただの学生プログラマーです。
なでしこ開発にはまって処理効率化を探求中の身です。
自分自身、あらゆる経験を積みたいのもあって今はなでしこを広める活動も細々とやっています。
質問は本当はなでしこの質問版が適当だと思いますが、ここで自分が力になれればと思ってやっています。

415 :デフォルトの名無しさん:2011/02/09(水) 01:37:32
質問です。
ファイル選択してそれを画像表示する方法がわかりません。


429 :デフォルトの名無しさん:2011/02/16(水) 02:04:22
http://www.vector.co.jp/soft/win95/net/se266725.html
出来ればこんな感じで。
コレだと送れないファイル(容量なのか拡張子なのか不明で困る、原因不明)があるのでなんとか別なものでと。

552 :デフォルトの名無しさん:2011/05/08(日) 00:00:13.03
複数のテキストファイルから、最新のテキストの最終行を表示するプログラムを作ってるんですが中々うまく行きません。
ログを1回目に表示するときは問題無く表示できるんですが、テキストを再取得してから表示し直すと失敗します。

何度か試してるうちに、変数を「」で囲ってると表示失敗することがわかったんですが、原因がよくわかりません。

「{H}」を表示 ←失敗する
Hを表示 ←なぜか表示される

591 :デフォルトの名無しさん:2011/07/29(金) 20:39:51.70
どんなに強力に暗号化してもソースがツルっとお見通しのソフトがあったが

596 :デフォルトの名無しさん:2011/08/14(日) 20:32:46.79
スタッフロールみたいなソフトを作りたいんですけど、
最もシームレスに文字列をスクロール出来る方法って何でしょうか?

500回
 画面クリア
 10,500+(回数*-1)へ移動
 「なでしこ」と表示

みたいなのしか思いつかないんですが。
何か良い方法はないでしょうか?


597 :デフォルトの名無しさん:2011/08/15(月) 00:20:38.78
>>596
シームレスというのは大体60FPSくらいですかね?
あながち悪くはないんですが、なめらかに動かすには間隔を固定する必要があります。

(1)間
画面クリア
10,500-cntへ`なでしこ`を文字表示
cnt=cnt+1
0.015秒待つ
ここまで

cntは回数でももちろん構いませんよ。
本来はループの最後で待機する時間を、16.66-(処理に要した時間)となるようにするのが望ましいのですが、目的が比較的軽い処理なので16msecで大体問題ないですね。
ラベルを使っても同じようなことができますが、複数個ある場合はちらつきがひどいので文字表示をおすすめします。
こちらもちらつきがひどい場合はダブルバッファリングが必要ですけども。
複数個の場合はグループを作っちゃうのが楽です。

598 :デフォルトの名無しさん:2011/08/15(月) 14:43:29.60
>>597
ご回答頂きありがとうございます。
60FPSあれば十二分という感じですね。
ラベルは質問したあとに自分も気づきました。
毎回画面クリアして表示してを繰り返して処理が遅れはしないかと思ったのですが、文字表示の方が良いのですね。
16.66-(処理に要した時間)というのは仕様でしょうか?
処理に要する時間というのは・・・計測できるんでしょうか?
軽い処理なのかどうか分からないのですが、打ち込む行数は20~30字を1行として2000数百行あります。
ちょっと試行錯誤しながら作り込んでみます。

599 :デフォルトの名無しさん:2011/08/16(火) 23:43:50.96
>>598
>2000余行!
うわお、ちょっと想定外ですw
となると、大きさは分かりませんがまず同時に 表示する最大数を決めないといけ ないですね。
つまり、スクロールしながら表示される最大個 数+余裕分ですね。
下からスクロールするとして、先頭の文字列が 消えるまで60FPSで5秒なら、300 カウントです。
300カウント経ったら上に消えた文字列の代わりに、次の文字列をセットしてY座 標を元に戻せば、繰り返しができます。
仮に最大数が10個なら、x,y,フラグ,文字列 の ような情報を持つグループを定 義して10個宣言してあげれば管理できます。
ちょっとゲーム制作みたいな手順ですが、数が 数なので向いてると思いますよ。
処理にかかった時間は簡単に計測できる…んで すが、色々と面倒なのでどうせな ら私が作ったライブラリを使ってみませんか?
https://sites.google.com/site/tatumakiprojectn1/sakuhin/tatumakigen/game-s-library

(1)間
  画面クリア
  #処理
  FIXFPS(60)
ここまで

のようにするだけで、関数側で自動調整されます。
時間の計測自体は『システム時間』という命令 がミリ秒単位でPCを起動してからの時間を返しますから、それをループの最初でtime=システム時間のよう に記録しておいて、ループの最後でtime=システム時間-timeと言う風にすれば経 過時間が分かります。
ですが、問題はなでしこの『待つ』という命令は50msec以下を指定した際に50%近くの誤差を持つため、あてになりません^^;
ライブラリは描画系の関数が一杯あるので、良ければ活用してみてください。

605 :デフォルトの名無しさん:2011/08/18(木) 16:42:17.66
>>599
やっぱり上に行ったら文字を消して下に新しくセットしなければならないんですね
でずっと試行錯誤しててオーバーヒートしてスレ見に来たら神レスが・・・
>300カウント経ったら上に~
の意味は分かるのですが、一体どういうプログラムを書けば良いか
カウントが終了して次の文字をセットする命令が思い浮かびません
表示する2000数百行を配列として使用する程度しか今は未だ分かりません
紹介して頂いたライブラリは今の私が使っても猫に小判なので、
もう少しレベルアップしましたら使わせて頂きますね

608 :デフォルトの名無しさん:2011/08/20(土) 22:01:29.29
>>605
サンプルを作りましたが、ちょっと長いのでここでは公開できませんw;
http://uproda.2ch-library.com/lib418650.nako.shtml
DLキー:nadesiko

あんまりこういう開発方法を公開している人が居ないので、情報が少ないですね。
あと、これは私なりの作り方なので、他にもやり方は色々あっていいと思いますよ。

658 :デフォルトの名無しさん:2011/11/04(金) 19:32:48.71
pngの透明部分が透明にならないような気がしたんだけどどうしたらいいだろう
透明に死体部分を適当な色であらかじめ塗りつぶした後、なでしこでそこを透明にするとかなんかそういう強引な手法しか無理かな

661 :デフォルトの名無しさん:2011/11/07(月) 03:14:23.19
> 単純で敷居が低くプログラミング入門に最適

> 敷居が低く
> 敷居が低く
> 敷居が低く

┐(´∀`)┌ヤレヤレ

663 :デフォルトの名無しさん:2011/11/07(月) 22:06:48.54
>>658
一応、白色(RGB(255,255,255))はGUI部品のイメージでは透明化=1にした時にアルファチャンネル扱いになる。
白い部分は巻き添え食らうから、予めRGB(254,254,254)くらいの灰色で乗算した画像使って、
抜きたいところを白にすれば綺麗に透明化はできる。
それにしても半透明ができないのがどうしたものか。

>>661
そんな事言う前になでしこよりも優れている簡単な日本語プログラミング言語作って下さい。
競争率が低い今作れば大きなチャンスですよ?

672 :デフォルトの名無しさん:2011/11/24(木) 02:23:22.31
よければなでしこ使ってどんなプログラム作ってるか教えて下さいな。
ちなみに自分は専らダウンロードツールとか、ゲーム用のエディタとか、TwitterのBOTとか。
こんなの作ってるぜ って自慢できるもの作ってる人いたら是非。

675 :デフォルトの名無しさん:2011/11/24(木) 23:54:31.30
>>672
標準出力ができるからCGI作ってる。

687 :デフォルトの名無しさん:2012/01/25(水) 16:20:38.92
対応してると公言はしてないが、ファイルコピー(やファイル名変更)で引っかかった覚えはないなあ
ユーザーアカウントコントロールでコピー制限食らってるとかかな?
そうでなけりゃ変数内に取り込んだディレクトリ名やファイル名を「言」わせて確認してみたら?

720 :デフォルトの名無しさん:2012/03/19(月) 23:21:58.75
何か別のプログラムに送信されちゃったとか

721 :デフォルトの名無しさん:2012/03/19(月) 23:42:46.60
>>720
なでしこ本見ながら自宅でテストしてて
Live2chの書き込みボタンがShift+Enterだったから
ウィンドウ名を指定してキー送信したんだけどダメだった

実際に会社で使っているソフトで動かしてみたら
動作に必要なボタンがファンクションキーだったので問題なく動いてる

座標を指定してマウスクリック使えば代用できるんだろうけど
なんとなくShift+Enterってどうすればうまく動くんだろうと気になったのです


723 :デフォルトの名無しさん:2012/03/23(金) 18:39:45.26
ウィンドウ名が間違っているかもしれません

724 :デフォルトの名無しさん:2012/03/23(金) 18:42:18.12
>>723の修正

>>721
ウィンドウ名が間違っているかもしれません

729 :デフォルトの名無しさん:2012/03/24(土) 14:38:42.72
おまえらもっとなでしこで何作ってるか教えてくれ
ちなみに俺は画像ダウンローダとweb(ピヨピヨ)の更新確認ソフト

736 :営利利用に関するLR審議中@詳細は自治スレへ:2012/03/31(土) 18:05:38.45
ブラウザのボタンを(バキューン!)したいのですが苦労しています。
ボタン部分のHTMLソースが
 <form>
 <input type="submit" value="送信">
 </form>
なのですが、この場合は無理でしょうか?
上記に name="button"が含まれていれば出来そうな感じなのですが・・・
よろしくお願いします。

743 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/02(月) 21:16:55.59
フォームのデザインを外部ファイルに作っておいて
それを読み込んで生成しようとしています


#ここから
データ1に「{デスクトップ}フォーム1.txt」を読む
フォーム1はデータ1
#ここまで

これだと何もない母艦が表示されるだけで何も起きないんですよね
よろしくお願いします




747 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/05(木) 21:43:07.38
指定時刻に何かしたい!
例えば・・・・
10時00分00秒に「イヤン!」と言う。
11時00分00秒に「バカン!」と言う。
12時00分00秒に「あなた、エッチね・・・・」と言う。
こんな感じです!
何か良い方法ありますか?
上手にやってる方いますか??
よろしくお願いします。


748 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/06(金) 00:03:34.23
>>747
タスクスケジューラ使えばいいんじゃない?
あえてなでしこだけでやろうとするなら
母艦の可視をオフにして常駐させとくとか

749 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/06(金) 10:05:40.27
>729
60FPSで動くことを目標としたゲーム、ちっちゃなSTGとか。
プログラミング外の事を人に教えるときに便利なんだよね。

>747
Windowsにはcronないからなぁ。
アプリケーションが重くなりそうだったら定期実行用の軽量なやつ一個書いて、
そこから引数つけて別で起動するってのもアリだと思う。

750 : ◆./vIcLJ51. :2012/04/06(金) 16:36:19.32
>>747
#-----------------------------------------------------------------------
▲最初
もし、今が「10:00:00」ならば、
  「イヤン!」と言う。
もし、今が「11:00:00」ならば、
  「バカン!」と言う。
もし、今が「12:00:00」ならば、
  「あなた、エッチね・・・・」と言う。
最初に飛ぶ
#-----------------------------------------------------------------------
では?

752 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/06(金) 20:42:45.53
今とターゲット時間の差を待てばよろし

753 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/06(金) 23:23:08.54
>>752 ありがとうございます!
僕のパソコンは時計の精度が悪いようなので
途中「NTP時刻同期」を入れる等して正確な時間に
発動出来るようにしたいです。

758 :営利利用に関するLR審議中@詳細は自治スレへ:2012/04/10(火) 10:45:35.78
母艦が固まる
CPU使用率が100%

これらはビジーループ(ウェイト)が原因。
なでしこではループのどこかに「秒待つ」を入れればおk。
例えば>>750なら、▲最初の次の行か、最初に飛ぶの前の行に0.01秒待つを入れる

無限ループでのイベント処理は、タイマー部品を使うほうが楽かも

780 :デフォルトの名無しさん:2012/05/09(水) 09:27:46.48
特定のURLからwebサイトを1KBだけダウンロードしたいです
なにかいい方法を知っていたら教えください

785 :デフォルトの名無しさん:2012/05/16(水) 11:56:53.80
質問させてください


フォーム上で範囲を決めてフォーム上の任意の場所を(バキューン!)した時に
どのマスに当てはまったのか判定したいと思います


□□□□
□□□□
□□□□
□□□□        □が範囲で部品など見える物ではない



どうやって処理を考えたらいいのか
ヒントでいいのでよろしくお願いします。


http://toro.2ch.net/test/read.cgi/tech/1252060267/l50/../人気ブログランキングへ

PC等【C++】高速化手法【SSE】

1 :デフォルトの名無しさん:2005/10/27(木) 02:55:36
C++やインラインアセンブラ、SSEなどによる高速化の手法
について語りましょう。

178 :デフォルトの名無しさん:2009/01/07(水) 23:00:55
メモリ(バキューン!)とかを考慮すると構造体より配列のほうが高速?

179 :デフォルトの名無しさん:2009/01/08(木) 00:02:43
>>178
同じ。

185 :デフォルトの名無しさん:2009/01/09(金) 14:29:17
>>179
うほ?
>>178の意味がいまいち分からんが、
char array[0x100];

struct{char value;} array[0x100];
だったらレジスタサイズにパディングされる分、構造体の方が早くね?
ちなみに、同じ事だが容量気にして構造体のなかでshortとか使うと
パデイング入るんでメモリに無駄が発生する。
まぁ、パディングを知っていれば無駄を防ぐこともできるけど。

189 :デフォルトの名無しさん:2009/01/11(日) 01:50:19
>>185
> struct{char value;} array[0x100];
> だったらレジスタサイズにパディングされる分、構造体の方が早くね?

pragmaやattributeでパックしない限りpaddingは入らないだろ。

191 :,,・´∀`・,,)っ-●◎○:2009/01/11(日) 06:05:36
>>189
構造体やその配列の場合、パディングが入る。
デフォルトが4バイト単位だったかな?

360 :デフォルトの名無しさん:2009/09/08(火) 20:07:19
だんごじゃないけどi5はi5だよ。それ以上でもそれ以下でもない。

361 :デフォルトの名無しさん:2009/09/08(火) 20:13:34
>>360
おめーみたいなカスには聞いとらん失せろゴミが
ダンゴさんマダー?

363 :デフォルトの名無しさん:2009/09/08(火) 21:25:40
>>361
ちょwだれww
ほれ、なんかcore2の時とかこれはいいぜーとかなんか詳しく言ってたような気がしたから
i7なりi5なりのアーキテクチャ面からの意見を聞いてみたかったんだ

382 :デフォルトの名無しさん:2009/09/10(木) 00:35:11
おい!テーブル使わん言ったじゃねえかよ。氏ねカス。

387 :デフォルトの名無しさん:2009/10/08(木) 03:33:43
unsigned int mod6(unsigned int m){
unsigned int a = 0;
static unsigned int x[] = {0,2,4,0,2,4,0,2,4,0,2,4,0,2,4,0,2,4,0,2,4,0,2,4};
__asm{
mov eax, m
test eax, 1
jz Mod3
inc a
Mod3:
shr eax, 1
lea ebx, x
mov edx, eax
and eax, 0000ffffh
shr edx, 16
add eax, edx
mov edx, eax
and eax, 0000003fh
mov ecx, edx
and edx, 00000fffh
shr ecx, 12
shr edx, 6
add eax, ecx
add eax, edx
mov edx, eax
and eax, 0000000fh
shr edx, 4
add eax, edx
mov edx, x[eax*4]
add a, edx
}
return a;
}

399 :デフォルトの名無しさん:2009/10/08(木) 15:58:42
逆数乗算で商を求めて元の値から引いたほうが速い
今のCore MAでは整数乗算は浮動小数除算機と兼用してて
非除数 - (除数×小数点以下切り捨てた商)

まあベンチ取ってみればわかるがコンパイラの吐くコードにも勝てんと思う

401 :デフォルトの名無しさん:2009/10/08(木) 17:45:39
static??const??int??rcp6??=??1.0??/??6.0??*??std::pow(2.0,16.0);
int??x??=??255??-??((255??*??rcp6)??>>??16)??*??6;

確かにこれで十分な気がするし、>>387より速そうだ。


414 :デフォルトの名無しさん:2009/10/09(金) 01:24:41
>>387
inline unsigned int mod6(unsigned int a){
 unsinged int b = (a >> 3) + (a >> 5); // /6
 unsinged int c = (b << 1) + (b << 2); // *6
 return a - c;
}

456 :デフォルトの名無しさん:2009/10/22(木) 03:07:47
C/C++でメモリプール(int, doubleなど様々な型が共存)を作り、
メモリプール内部でメモリの詰め直しを行って最適化しようと試みています。

入門書+α(boostがわかるぐらい)なので、
キャッシュやメモリに関する特殊なことは全然わかりません。
何か気をつけなければならないことや忠告があれば教えてください。

488 :,,・´∀`・,,)っ-○○○:2009/10/28(水) 04:46:10
for (i = 0; i < N; i+=4) {
  sum1 += A[i];
  sum2 += A[i+1];
  sum3 += A[i+2];
  sum4 += A[i+3];
}
sum = sum1 + sum2 + sum3 + sum4;

っていうか組み込み関数使えよ

498 :デフォルトの名無しさん:2009/10/29(木) 08:44:26
>>488
これってNがわかっていないとコンパイラはやってくれないよね?
ICCだと出来るのかな?
GCCではベクトル化してくれなかった。

539 :デフォルトの名無しさん:2011/01/28(金) 11:43:56
x86は浮動小数点が弱くて仕方がないからなあ
8087のコプロセッサの頃からの負の遺産を引きずっている
でもL1/大容量L2キャッシュを媒介にする事によって相当克服して来てはいるんだけどな
PowerPCなどにどうしても勝てない

596 :デフォルトの名無しさん:2011/05/30(月) 10:20:14.97
結論から言うとメモリの転送がボトルネックです。
書き出しのアライメントを揃える事とstreamを使う事で何割かは改善出来ますが、基本的に速く出来ません。

最適化とは遅い部分を探し出す事に他なりません。
安直にSSEとかマルチプロセッサにしようと思わず、真にボトルネックを見つけられるようになりましょう。

真に遅い部分が分かったなら、平均化フィルタと何が違うのか、どうしてもう速く出来ないのかが理解出来るようになります。

598 :デフォルトの名無しさん:2011/06/13(月) 15:11:06.75
>>596
メモリの転送がボトルネックなのか、演算部分がボトルネックなのかは
どうやって判断すればいいのですか?つまりどこを見たらよいのか。
あるいはあなたはどうやってますか?
ツールとか使うのでしょうか?

618 :デフォルトの名無しさん:2011/07/02(土) 22:44:49.03
mapの方がアライメントされてないんじゃない?

619 :デフォルトの名無しさん:2011/07/02(土) 23:38:54.68
std::pair<int, hoge>からaligned_stl::pair<int, hoge>へのコードがバグってるんじゃないの

620 :618:2011/07/03(日) 00:21:26.44
適当な事書いたと思ったけど、std::mapにカスタムアロケータでいけるっぽい
http://ideone.com/sOWl6



621 :デフォルトの名無しさん:2011/07/03(日) 02:45:36.94
>>618
mapの方は、__declspec(align(16))みたいなことはしてませんが
カスタムアロケータを渡しており、カスタムのpair(aligned_stl::pair)を使うように指定してます。

>>619
わかりづらくてすみませんorz
std::pairは一切使っておらず、aligned_stl::pairのみです。
make_pairもaligned_stl::pairを返します。

>>620
ありがとうございます、Win7 64bitのVC2008Expressで動かしてみましたが
カスタムアロケータのc.insertで、Hoge()の引数なしのコンストラクタで落ちます(x_ = static_x)
Hoge hoge;
c.insert( ::std::make_pair<int,Hoge>(i, hoge) );
とやると、make_pairのところのコピーコンストラクタで落ちます( x_ = src.x_)。
なので、前回書いたのと同様に
Hoge hoge;
std::pair<int, Hoge> pairArg(i, hoge);
とやってからpairArgを渡すと落ちませんでした(c.insertのみ。d.insertは落ちる)。

どうもpairに関してはアラインメント指定しなくても、中のメンバが
アラインメント指定されていれば問題ないようですね(アロケータだけでよい?)。
もうちょっと試してまた報告します。
ただ、2008だとアラインメント指定が一時オブジェクトに対して効かないと考えたほうが
いいのかもしれませんね(´・ω:;.:...  (インライン展開された場合は除く)
ありがとうございました。

638 :デフォルトの名無しさん:2011/07/05(火) 22:56:13.54
余分なカッコが多すぎるコードってみにくくて嫌いだ。

if (a == 0 && b == 0 || c == 0 && d == 0)

if ((((a == 0) && (b == 0)) || ((c == 0) && (d == 0))))

この二つだと上の方がはるかに見やすいと個人的には思うが、
見やすさを優先してカッコをつけるとか言って下のように書く人がいる。


649 :デフォルトの名無しさん:2011/10/10(月) 19:26:30.72
指定桁数で四捨五入する以下の関数の実行速度を上げたいの。
(valueは0~9999、digitsは0~5が保証される)
SSE使って高速化頼む。

double NormalizeDouble(double value, int digits) {
  static double t0[] = { 1, 10, 100, 1000, 10000, 100000 };
  static double t1[] = { 1, 0.1, 0.01, 0.001, 0.0001, 0.00001 };
  return (int)(value * t0[digits] + 0.5) * t1[digits];
}

652 :デフォルトの名無しさん:2011/10/10(月) 19:49:57.12
>>649
最適化スレで終了宣言してからにしろよ

653 :デフォルトの名無しさん:2011/10/10(月) 19:50:50.26
でもベクトル化で少しは早くなるわよ

664 :デフォルトの名無しさん:2011/12/17(土) 22:41:12.80
signed shortの配列に
floatもしくはdouble型の乗算をして
クリップ処理をほどこし
signed shortの配列に戻すのを
SSEにしたいのでやってください


これ

signed short s[100];
float f
init a;

for (a=0;a<100;a++)
s = s[a] * f;

665 :デフォルトの名無しさん:2011/12/17(土) 23:06:34.33
それ、どう考えても実数型⇔整数型のコストがでかすぎる。
たった100件でいいなら実数で持てないの?

679 :デフォルトの名無しさん:2011/12/19(月) 02:15:44.43
初めてSSEに触れるので、まずは簡単なコードを作成してみたのですが、
SSEを使わないほうが40倍も速いという驚愕の結果が出ました。
何が間違っているんでしょうか??

コンパイラ:VC++2005(Releaseモード、浮動小数点モデル:FAST)

float* f4pakAdd( float* pfA, float* pfB )
{
  _declspec( align( 16 ) ) static float fC[ 4 ];
  
  _asm
  {
    mov ebx, pfA
    movaps xmm0, oword ptr [ebx]
    mov ebx, pfB
    movaps xmm1, oword ptr [ebx]
    addps xmm0, xmm1
    movaps fC, xmm0
  }
  
  return fC;
}

呼び出し側

for( int i = 0; i < 10000000; i++ )
{
  pfC = f4pakAdd( fA, fB );
}

682 :デフォルトの名無しさん:2011/12/19(月) 02:34:54.14
パイプライン化したコードでもないし、スタックチェックが行われている気がするが。
逆アセ確認したかい?

707 :デフォルトの名無しさん:2011/12/23(金) 11:26:47.88
どんな変数も問答無用でアライメント16にするようにコンパイルする設定があれば
面倒な記述を減らせると思うんですが、何かデメリットあるんでしょうか?
メモリの隙間ができて勿体無いとかあるかもしれませんが、メモリ量の多い昨今、
それほど問題にならないのでは?と思います。
むしろアライメントすることでメモリアクセスの冗長さを減らせて帯域を節約する効果も
あって一石二鳥ではと思うんです。

708 :デフォルトの名無しさん:2011/12/23(金) 11:59:03.43
gccだと-mpreferred-stack-boundary=4がデフォルトだから既に16バイトアライメントだよ
構造体の詰め物は互換性もあるし難しいじゃないか

710 :,, ・´ ∀ `・ ,,)っ-○○○:2011/12/23(金) 12:41:37.02
>>707
なにそれ君いまだにPS3向けのゲームとか組まされてるわけ?

711 :デフォルトの名無しさん:2011/12/23(金) 15:57:24.48
>>708
glibcのmallocは8バイトだよ

>>710
SandyBridgeでもアラインメント取れてないと遅いでしょ

713 :デフォルトの名無しさん:2011/12/23(金) 17:19:17.60
>>711
Nehalem以降はmovups/dquもペナルティ無く使えるでしょ
まあ結局Core2以前も考慮するとコード振り分けるから労力は変わらないのだけれど...

714 :707:2011/12/24(土) 02:12:26.59
すみません、自分は日曜プログラマレベルで、対象CPUはx86、環境はVC++です。
VC++の設定を見ていると、「構造体メンバのアライメント」というのがあって16バイトアライメントを選べるようになってました。
同様に通常の変数もアライメントできる設定があるかと思い探しましたが見付かりませんでした。

715 :デフォルトの名無しさん:2011/12/24(土) 02:18:17.32
どう考えてもこれ以上削れないってくらいの手書きインラインアセンブリコードに対し、
C記述版をVC++のReleaseモード(最適化O2)でコンパイルしたもののほうが1.3倍速かったです。
生成されたアセンブリを覗いてみたところ、

変数 * 3

というコードを

lea edx, DWORD PTR [eax+eax*2]

としていてびっくりしました。
これって、アドレス演算を行うローダ(専用の演算器?)を使うことで、
通常のALUと並行して演算(スーパースカラって言うんでしたっけ?)し
高速化しているということなんでしょうか??

716 :デフォルトの名無しさん:2011/12/24(土) 02:34:46.72
>>714
__declspec(align(N))

717 :707:2011/12/24(土) 02:44:05.59
>>716
ありがとうございます。
それは知っているんですが、>>707でも書いた通り、
そういった記述をわざわざせずとも、自動で全てアライメントしてくれるような設定があればイイのでは?
と思った次第です。

しかし、上でも仰られたように、互換性の問題があったりで難しいのでしょうね・・・
でも二重インクルード防止の「#pragma once」のように、互換性を考慮しない機能があったりするくらいですから、
自分のようにずっとVC++しか使わない人間を対象にそういうオプションが用意されていても良いのではと思いました。

733 :デフォルトの名無しさん:2012/03/09(金) 12:53:25.77
unsigned int maxpos(unsigned int src[256])
{
unsigned int i, m = 0;
for(i = 1; i < 256; i++)if(src[m] < src[i])m = i;
return m;
}
これをSSEで高速化する方法があれば教えて下さい

739 :デフォルトの名無しさん:2012/03/11(日) 00:41:15.69
>>733
画像とか統計の基礎だな。疑似コードで書くとこんな感じだ

maxpos(src[256]) {
pos = {0, 1, 2, 3};
for(i=0; i<256; i+=4) {
 s=load(&src[i]);
 isGT=maxVal<s;
 maxVal=isGT&s | ~isGT&maxVal;
 maxPos=isGT&pos | ~isGT&maxPos;
 pos += 4;
}
return max_position(
 maxVal[0], maxPos[0],
 maxVal[1], maxPos[1],
 maxVal[2], maxPos[2],
 maxVal[3], maxPos[3]);
}

762 :,, ・´ ∀ `・ ,,)っ-○○○:2012/03/14(水) 07:23:58.09
packed unsigned intの比較(マスク生成)だけど、両項のMSBを反転してからpcmpgtdするより
psubd + psradのほうが速いかもしれない

768 :デフォルトの名無しさん:2012/03/21(水) 23:53:20.16
P6,P2,P3,P4はforwardならnot taken backwardならtakenがデフォルト
P4はPrefixでヒントを出せる
PM,Core2はランダム
ソースはAgner

775 :デフォルトの名無しさん:2012/03/24(土) 21:41:50.71
そう思ってくれるのはいいが、間違いの指摘と
実際はどうなってんのか答えてくれ
批難だけの回答はいらん。

778 :デフォルトの名無しさん:2012/03/24(土) 21:52:06.49
>>775
じゃあ間違いを指摘してやる。

>大概returnやthrowが行われるからifをすっ飛ばせば速いのは解る。
前方への条件分岐は、「分岐しない」と予測される、とオマエ以外の全員が言っている。
if (xx) return
で「すっ飛ばせば云々」なんて、理解していないまま「わかったつもりになってるだけ」の証拠。

>今のCPUは分岐ヒントとか投棄とかあって単純じゃないんだろ
ヒントはともかく、投機はまさに「投機実行するために分岐予測をする」のであって
「投機実行もあるから分岐予測が複雑になる」はナンセンス。
もちろん、エンプラ系/VLIW系では「分岐の有無の両経路を実行する」なんてのもある(らしい)が
一般的とは言いがたい。

779 :デフォルトの名無しさん:2012/03/24(土) 21:59:34.64
>>778
内容じゃなく国語的に誤解されてるな。

>前方への条件分岐は、「分岐しない」と予測される、とオマエ以外の全員が言っている。
if( xx ) throw xxx;
throwなんて実行するケース殆ど無いんだから基本if実行しないってのは同じ話。
矛盾してないでしょ。

まず分岐予測が複雑になってるって話はしてないよ。
投棄実行については投棄実行を考慮した上での静的予測方法があるでしょという話。

780 :デフォルトの名無しさん:2012/03/24(土) 22:04:11.41
>>779
だから、ifの内部は「実行すると予測される」んだよ、バーカ

782 :デフォルトの名無しさん:2012/03/24(土) 22:06:41.25
せめて正しい漢字使えよ。

一度なら単なる変換ミスとして納得できるけど
繰り返しているってことは、別の意味に捉えているとしか思えない。

783 :デフォルトの名無しさん:2012/03/24(土) 22:09:32.88
>>780
お前バカだろ
みんなアセンブリ前提で言ってんだよ

jze label   if() {
・・・処理・・・
labeli     }


789 :デフォルトの名無しさん:2012/03/24(土) 22:48:33.55
投棄実行については誤解してたわ。
2つの分岐を両方実行して実際実行対象にならなかった方の結果を破棄するものだと思ってた。

792 :デフォルトの名無しさん:2012/03/24(土) 23:01:04.27
一応。

突然returnやthrowが出てくるのが
if (xx) return
という意味じゃないか、というのも勝手に俺が頭の中で補って想像しただけで
実際には何の説明も無く(ifの多くがreturnやthrowというのにも同意しにくい)
唐突な「rerturnやthrow」「すっ飛ばす」を必死に理解しようとしたのがそもそもの間違いかもね。

794 :デフォルトの名無しさん:2012/03/24(土) 23:04:39.09
>>792
>>779で補足だしてるだろしつこいわ

803 :デフォルトの名無しさん:2012/03/25(日) 16:12:43.94
インテルの最適化マニュアルだと
>インテルPentiumM??プロセッサー、インテルCoreSolo??プロセッサー、インテルCoreDuoプロセッサーは、
>ジャンプの向きに従った条件分岐を静的には予測しない。これらのプロセッサーでは、
>すべての条件分岐は、最初に発生したときでも動的に予測される。
と書いてあって、wikiで調べたらPenM以降は広域分岐予測を取り入れた関係で静的予測はしなくなったみたいだね
http://ja.wikipedia.org/wiki/%E5%88%86%E5%B2%90%E4%BA%88%E6%B8%AC

>>768
>PM,Core2はランダム
というよりも、「前に実行した別の分岐命令の結果も影響する」とした方が適切みたいだ

分岐予測に関して
http://news.mynavi.jp/column/architecture/index.html
の第167回からの解説が参考になるよ



http://toro.2ch.net/test/read.cgi/tech/1130349336/l50/../人気ブログランキングへ

PC等HTABOXコア Part2

1 :hidebou:2011/03/22(火) 04:27:36.93
HTABOXコアは新たな発想のHTML Application 開発、実行環境です。
現在各種コモンコントロールを提供する3.00のリリース準備中です。
お気軽にご意見をお寄せください。
http://kuroda.bglb.jp/htabox/

66 :デフォルトの名無しさん:2011/04/18(月) 14:03:45.44
TZ Browser、見た目にこだわっているせいでVista以降で利用するとダサい。
軽量がコンセプトなのだから変に小細工しなくていいのでは……?

もし、見た目にこだわりたいのなら
・クラシック
・XPのLuna
・Vista以降のAero
この3つの環境になじむようにすべきでは……?

74 :hidebou:2011/04/18(月) 20:43:21.64
貧弱な開発機しかないものですから、Vistaも推奨スペック以下のPCで最終的
な動作確認のためだけに動かしていましたが、あらためて眺めると結構いろい
ろと違うんですね。一番驚いたのが「特大アイコン」です。この大きさの32ビ
ットビットマップでアルファマスク付ならそれだけで1Mb近くになるんじゃない
でしょうか。


198 :デフォルトの名無しさん:2011/05/14(土) 16:47:42.06
> qtjs windows版
> http://www.vector.co.jp/soft/winnt/prog/se490867.html
> JavaScript実行環境 プログラミング言語Qtの機能をバインド済み スクリプトでGUIアプリケーション作成可

JavaScriptとC++でGUIという点に似たものを感じてメモ

222 :デフォルトの名無しさん:2011/05/20(金) 20:11:12.88
とりあえず、夜10時には寝ること。朝6時には起きること。1日1時間、散歩すること。
庭の草取りをすること。
毎日少しずつでも太陽を浴びて汗を流さないと人間の体は壊れます。
そんなあたりまえのことを1週間も続けていると、体は元に戻っていこうとしますから。
大丈夫です。

244 :デフォルトの名無しさん:2011/06/25(土) 20:16:14.69
またC:直下にtest.xml吐いてますよ

311 :hidebou:2011/07/24(日) 22:36:08.00
やっとHTABOX300というプロジェクトを揺ぎ無い信念で作成することができま
した。この絶望の淵の中で新たな生命が誕生しました。毎回そう思うのです
が、私の愚かさも、私の賢さも、このプロジェクトに凝縮されています。


315 :デフォルトの名無しさん:2011/07/26(火) 23:13:43.29
>>311
お疲れ様です。努力が結実したこと、嬉しく思います。
「受難は天に登るための階段だ」という古いことわざがあります。
困難を憎まず、うまく味方につけて下さい。
その才能の高まりが、正当に評価される日を信じて止まないです。
めっきり暑くなってきましたが、どうかお身体にはお気をつけ下さい。

319 :hidebou:2011/07/27(水) 04:09:40.70
将来、動作環境に.NETが必ず期待できるとなれば、立ち上がりこそ時間がか
かるもののJScriptアセンブリとHTMLを融合させることでVBScriptに近い処理
速度を達成できるはずですが、現状においてHTMLアプリケーションを開発し、
そのコードをJavaやC++へ移植する予定が無いならば、VBScriptで記述する方
がいいと結論付けます。JScriptに生のSAFEARRAYを扱う機能を追加すること
はやぶさかではありませんがVBScriptという道具が実在する訳ですから上手
に使い分けるというアプローチが正しいと思います。

355 :デフォルトの名無しさん:2011/11/03(木) 21:37:35.21
メンテ不能なコードの件
http://www.kijineko.co.jp/node/672
メンテナンス困難なソースコード
http://www.kijineko.co.jp/node/925

公開されてるのに読めない・ビルドできないコードって面白い考え方かも

434 :デフォルトの名無しさん:2012/04/13(金) 19:03:17.03
何か2.50系だと↓こんな事言われます

---------------------------
エラー
---------------------------
DateTime = 2012/04/12 2:41:41
File = .\main.cpp
Line = 759
Description = InvokeEx : userAgent
Error = この操作を完了するのに十分な記憶域がありません。
---------------------------
OK
---------------------------


435 :hidebou:2012/04/13(金) 20:30:09.11
>>434
貴重な情報をありがとうございます。早急に原因を調査しますが、OS等の
環境を教えていただけると、より迅速に解決できると思います。ご面倒お
かけしますが、よろしくお願いします。

521 :デフォルトの名無しさん:2012/04/22(日) 00:33:19.23
このスレと関係があるかはわかりませんが、こんなものがあったら便利だと思うんですが。

HTAのようなものというか、WSHにHtmlエリアが付いたものというか・・・
上半分または左半分のエリアにボタンやチェックボックスなどのフォームをhtmlで配置できて簡単なユーザー対話が出来る。
下半分はまんまコンソール画面でふつーにexecやWScript.Echoみたいな
VbscriptやJScriptのCscriptをいじってる感じ表示できる。
なんとも中途半端だけど、いろいろ試したいサンデープログラマーが興味持ちそうなツール。
こんなものはもうあるんですかね?

526 :デフォルトの名無しさん:2012/04/22(日) 14:50:33.68
Kanegon's Web Page
http://www2.wbs.ne.jp/~kanegon/
のjseval

CommandPrompt.HTA
http://www.vector.co.jp/soft/winnt/util/se405418.html

タブ切り替え型テキストエディター風のコマンドプロンプト「ColorConsole」
http://www.forest.impress.co.jp/article/2008/04/16/colorconsole.html

何となくこのへんを連想

528 :hidebou:2012/04/22(日) 17:05:34.48
実際にはこんなスクリプトを内部で動かす予定です。

var ret = Pause("実行しますか?<link>はい</link>又は<link>いいえ</link>を選択");
if(ret == "はい")
{
Println("実行中です");
}
else
{
Println("終了しました");
}

533 :デフォルトの名無しさん:2012/04/23(月) 00:08:50.04
>>526
そのへんも実はチェックしたんだけれども、イメージはだいぶ違います。
コンソールと言いすぎたのが誤解を与えちゃったかな。
エディタ部分でスクリプトを書いてCscriptで実行する環境にGUIを少しつけた感じ。
作者さんのOutline.exeやTBZ、HTA、Cscriptみたいなものがごちゃごちゃに混ざったイメージ。
それはHTAなのかもしれないけど、縦2分割の半分または横2分割の半分というように
GUIの部分をおおざっぱな型で決め付けてしまって設定を簡易化しておいて使い続けてもらえば、
そこからHTML型のアプリケーションを覚えていくのも楽になるのではないかと思ったんですね。
その代わりできることは限られるし、見た目もスマートではないけれど、
中の動きが見える状態で使えて、そこそこのUIは持っていて、ある程度は楽ができる道具みたいな感じです。
これは作者さんのアプリと報酬についての考えとは違うかもしれないけれど、
素人や子供たちが、そのスクリプトを1週間使ったあとで、頭からスクリプトの内容を忘れたあとでも、
らくに改良できる状態に戻るにはどうしたらよいのかということの提案でもあります。

てきとーに描いてみたイメージ http://up3.viploader.net/pc/src/vlpc011168.jpg

>>528
わかりやすいツールができるのを期待してます

589 :デフォルトの名無しさん:2012/04/29(日) 00:56:10.37
そのエディタって行番号表示はあるの?

671 :デフォルトの名無しさん:2012/05/10(木) 20:24:23.94
小ネタ
exe生成の場合HTAタグでicon="start.exe"とか自分自身を指定しておくと、
アイコンリソースの置換にも追従するのでちょっと便利かも

当然exe自体をリネームされるとアイコンを見失うけどリネームはマニフェスト絡みで独自の警告が出ますし

677 :デフォルトの名無しさん:2012/05/10(木) 23:10:04.34
ToolStatus.htaを試すと確かに30個目以降のツールバーボタンが右側の表示、
31個目以降は加えて左側の表示も欠けますね

あと終了時に必ず↓のエラーが出ます
---------------------------
mshta.exe - アプリケーション エラー
---------------------------
"0x01ee3d32" の命令が "0x7e63b190" のメモリを参照しました。メモリが "read" になることはできませんでした。


プログラムを終了するには [OK] をクリックしてください
---------------------------
OK
---------------------------

711 :デフォルトの名無しさん:2012/05/14(月) 20:32:15.41
IE8のXPで試したらツールバー画像の透過色の部分がテーマに追従していないような感じです

723 :デフォルトの名無しさん:2012/05/15(火) 18:13:49.44
ツールバー画像の座標や透過色のテーマ追従を確認できました

ただ何回かに一回、マウスカーソルがdefault→progress→default→……と
ひっきりなしに切り替わり続けることがあります

同じ1.73GHzでもXP+IE6よりXP+IE8の方が発生しやすい模様です

727 :hidebou:2012/05/15(火) 20:43:08.45
これを確実に防止する方法は実に簡単なんです。多分それをやると「うざい」
と言われるんでしょうが、スプラッシュウインドウを出せばいいんです。
「HTABOX CORE ....」とうかいうウインドウが開始当初に一定時間表示され
れば絶対に起きない問題です。もしそれが最も確実だとしたらそうするかも
知れません。ソフトハウスさんへ納入する場合はそこをユーザーさんのロゴ
に変えればいいという発想です。

728 :723:2012/05/15(火) 20:49:46.44
一番発生しやすかったのはXP+IE8環境で、
EXE生成デモで作ったアプリケーションを多重起動して次々にそのウインドウを閉じていった時ですね

最新のバイナリを試すのは個人的な事情でちょっと後になりそうです

>>727
0×0pxのスプラッシュウインドウでも防止策として有効なんでしょうか?

746 :デフォルトの名無しさん:2012/05/16(水) 17:53:42.05
EXE生成デモでまたタスクボタンが二重になるようです

753 :hidebou:2012/05/16(水) 20:48:15.72
3.00が目指すところはもは更にその上の高みです。HTMLはアプリケーション
開発をどこまで効率化できるのか。言語間の壁を取り払いCOMという共通プラ
ットホーム上でいかに連携させるか。組織としての開発ではない環境で、組織
と伍して戦える製品を生み出せるパフォーマンスをいかに提供できるか。その
時、ネットワークやサーバーはどう組み込まれるべきなのか。贅沢は言いませ
ん。私がそのことを考え続ける時間さえあれば、必ずその具体例をお見せでき
るでしょう。ただし、その時間があるかどうかはこの2.5が世間にどう評価され
るかで決まってしまうでしょう。

755 :デフォルトの名無しさん:2012/05/17(木) 18:13:33.53
>>753
コア2.40のエンコーダと
ブラウザ上で作動するWYSWYGなHTMLエディタと
作成したアプリケーションの部品を公開して有料または無料で配布できるオンラインストアを
足して割らないようなIDEを妄想しました

874 :hidebou:2012/06/25(月) 23:24:02.22
http://kuroda.bglb.jp/htabox/htaboxapp.zip
を更新しました。ヘルプ未完成ですが、ヘルプ冒頭と最後尾に可変サイズHWND
をHTML中に埋め込んだ場合のデモエレメントが存在します。内容は単なる
GRAY_BRUSHですが、本物のWS_THICKFRAMEを出現させていますので、DHTMLによ
る可変サイズエレメントとは一線を画すレスポンスになっていると思います。
この機能は<OBJECT>タグで実現されています。ですからウインドウイベントの
解析部を汎用なものにすれば、どんなブラウザ上でも動かせると思います。

876 :hidebou:2012/06/26(火) 10:32:57.51
http://kuroda.bglb.jp/htabox/htaboxapp.zip
を更新しました。ヘルプ未完成ですが、ヘルプ冒頭と最後尾にある可変サイズ
HWNDをタイトルバー付きに変更してみました。「取り説が必要なものは作るな」
というのは至極ごもっともな話ですが、作り手側からしてみるとなし得難い課題
でもあります。たとえば可変領域があって、それが見慣れたウインドウの外観で
れば、なんの説明もなくサイズを変更してもらえると思います。

877 :デフォルトの名無しさん:2012/06/26(火) 19:45:00.70
>>874>>876の起動画面↓は仕様ですか?
http://uploda.cc/img/img5197.PNG

ちょっとどころではなく起動に躊躇するデザインなのですが

878 :hidebou:2012/06/27(水) 13:32:54.27
>>877情報ありがとうございます。背景色関係で機種依存してしまった部分
があったようです。その部分のコードを再検証したいと思います。

また、今まではすべて実行時に文字列を描画して動的画像生成を行ってきま
したが、変更の必要がないケースでは一度だけ動的生成を促してPNG保存し、
実行時はこのキャッシュファイルを表示する仕様に変更します。動機は単純
で、ヘルプのエディタ起動ボタンを動的描画した場合、まった同じ画像を複
数生成するために起動がもたつくというおまぬけな状態となるからです。

908 :hidebou:2012/08/25(土) 13:20:06.22
私はこの拡張テキスト規格にRichTextPlusという名前を付けて提供しようと
考えています。プレーンなテキストが持つ汎用性を最大限に生かした総合的
なツールです。また、HTMLでの公開用に複数のプレーンテキストのタイトル
部分をより高次元でアウトライン操作可能なエディタも提供します。このエ
ディタでHTMLプレビューした場合、画像表示されているタイトル部分を右ク
リックすることで、即座にテキストレベルでの編集が可能となります。

909 :hidebou:2012/08/25(土) 13:35:03.80
HTABOXとは何か?を正しく理解してもらうために、そして、受け取り手がい
かなる知識階層にいようとも戸惑わないために、私は何をどういう順序で説
明すべきか?という動機でスタートしたエディタ関連の技術は、HTABOX用コ
ードの編集、実行環境にとどまらず、広範囲な情報管理ツールとして成長し
逆にHTABOXがエディタのマクロ実行エンジンとなるような予感もします。

910 :hidebou:2012/08/26(日) 21:40:49.15
今日はファイルダイアログの拡張子フィルタをユーザーが切り替えた場合に
入力済みファイルパスの拡張子部分を自動的に置き換えるという、実にマイ
ナーな課題に取り組んでいました。こういった車輪を再発見せざるを得ない
分野というのはつい後回しになってしまいますが、この辺の作りこみが利用
者側をいかに大切にしているかの指標にもなりますので、手を抜けません。
納得できる記述に到達するまで一日を要しましたが、あらゆる呼び出しで表
示されたファイルダイアログはこの変更の恩恵を受けることができます。

911 :hidebou:2012/08/27(月) 23:05:17.67
今日はRichEditへのOLE埋め込み手法を全面的に見直しました。結果として
画像等のように埋め込まれているが選択する必要が無いもの。HTMLのように
選択して表示サイズを変更できるもの。が使用するクラスを明確に分離して
余計な記述を一掃しました。従来は選択されたくない領域に不可視なHWNDを
被せていたのですが、数が増えれば重くなるのは目に見えていましたから、
その方式を捨てて、マウスイベントが発生した場合に、選択されたくない埋
め込みオブジェクトが選択されているかをチェックする方式としました。

また、HTMLは横幅を指定しないとインライン要素が折り返せないわけですが、
編集中に最適な横幅を模索可能なように埋め込み矩形サイズがドラッグ可能
となりました。要求を満たしながら、ソースコードが短くなった時はすこし
だけ幸せな気分になれます。

912 :hidebou:2012/08/28(火) 19:44:55.51
なぜプログラムは途中で投げ出されてしまうのか?の原因について考えてみ
ました。根本的な要因は「似て非なるもの」を分散して書いてしまうことで
す。ソースコードは誤りに気づき、改良される運命にあります。じゃあ直そう
とソースコードへ向かった時に、該当する部分が分散してしまっていると、
それだけで嫌になります。まして、複数のビルドに跨ればなおさらです。
飯の種でもない限り「もうやーめた」になってしまうのも無理はありません。

対策はただ一つ「似て非なるもの」を書かないことです。2つ3つ書いて似
ていると思ったら共通部分を基底クラスにします。はじめからクラス継承構
造を思い描いた設計など教科書の中の話でしかありませんが、複数の具象の
共通点を基底としてまとめるという行為はこの問題を解決する効果的な方法
です。

913 :hidebou:2012/08/30(木) 01:27:36.17
アウトライン操作や、プレーンテキストにタグ規則を導入するような課題は
「文字列操作という力技」で「頭爆発しそうに面倒こと」を解決しなければ
ならない割に、それ自体はそれほど目新しいものでもないという過酷な分野
です。多分こういった局面で短時間にスマートなコードが書ける人は本当の
意味で「頭がいい人」なんだろうと思います。プラットホームは異なれども
う十年近くこの課題に向けて様々なものを書きましたが、エディタ自体をカ
スタマイズできる状況になって、やっと納得できるコードにたどり着けた気
がします。整形XMLの場合はSAXによるストリームパース、プレーンテキスト
の場合は高速な正規表現エンジンがこの課題を解決する鍵だと感じました。

914 :hidebou:2012/09/01(土) 20:00:18.62
テキストエディタを単体でも活用できる体系に仕上げる作業を終えました。
二段組の文章でもない限り、もうMSWORDを使うこともないだろうというと
ころまで煮詰めました。これで劇的にヘルプを書くスピードが上がるはず
です。結果的にテキスト中の??から??までの記号を見出し階層を認識し、
テキストでもアウトライン操作を可能としました。部分的フォント設定、
箇条書きリスト、画像挿入、HTML挿入はすべてタグで定義し、エディタは
プレーンテキスト表示モードとタグ解釈モードを随時切り替えられます。

HTMLはすべて動作している状態で埋め込まれ、スクリプトへ実行中のTOM
インスタンスが渡されますから、埋め込まれたHTML中のボタンから文章を
マクロ的に操作できます。この時JScriptの正規表現が活用できることは
大変大きなアドバンテージとなるはずです。

最大の特徴である編集中のスナップショット画像出力は各種形式に対応し、
見出しが存在する文章を開く場合、見出しをツリー表示して選択可能とす
ることにより、一部分を編集状態として当該部分だけを画像出力すること
も可能です。サンプル文章を兼ねる説明を添付してできるだけ早くお見せ
したいと考えています。


http://toro.2ch.net/test/read.cgi/tech/1300735656/l50/../人気ブログランキングへ

PC等【GPGPU】くだすれCUDAスレ part5【NVIDIA】

1 :デフォルトの名無しさん:2011/08/23(火) 22:08:06.09
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
CUDA使いが優しくコメントを返しますが、
お礼はCUDAの布教と初心者の救済をお願いします。

CUDA・HomePage
http://developer.nvidia.com/category/zone/cuda-zone

関連スレ
GPGPU#5
http://hibari.2ch.net/test/read.cgi/tech/1281876470/

前スレ
【GPGPU】くだすれCUDAスレ【NVIDIA】
http://pc12.2ch.net/test/read.cgi/tech/1206152032/
【GPGPU】くだすれCUDAスレ pert2【NVIDIA】
http://pc12.2ch.net/test/read.cgi/tech/1254997777/
【GPGPU】くだすれCUDAスレ pert3【NVIDIA】
http://hibari.2ch.net/test/read.cgi/tech/1271587710/
【GPGPU】くだすれCUDAスレ pert4【NVIDIA】
http://hibari.2ch.net/test/read.cgi/tech/1291467433/

159 :デフォルトの名無しさん:2011/11/27(日) 22:05:36.51
全スレッドの計算結果を1コアに集約して1スレッドで処理したいんだけどいい方法あるかな?
リダクションのサンプルだと最後はCPUで合計だしこれでは都合悪いんだよね
全てGPUでやりたいのよね

195 :デフォルトの名無しさん:2011/12/07(水) 00:45:36.69
+=で同じアドレスに同時書き込みしてるから

197 :デフォルトの名無しさん:2011/12/07(水) 01:27:31.21
競合状態が発生してんじゃないの?
atomic演算とか同期が必要だと思うよ。
512スレッドで同一アドレスの変数の読み書きしてんだから。

まず512個の要素の配列作って、添え字にスレッド番号(上のi)を指定して確認してみたら?
書籍ならcuda exampleも買って読むといいかもね

198 :デフォルトの名無しさん:2011/12/07(水) 02:05:18.21
>>197
>競合状態が発生してんじゃないの?
>>195のコメと合わせて考えるに、なんとなく予想はしてましたけど、取り合いになってるんですね...

>atomic演算とか同期が必要だと思うよ。
まだザックリとしか勉強してないので、atomic演算は知らなかったです。あとで試してみます。
同期を行う場合だったら、どうすればいいのだろう。

>まず512個の要素の配列作って、添え字にスレッド番号(上のi)を指定して確認してみたら?
それは分岐条件がきちんと実行しているのか見るためのテストをしたとき確認しました。

274 :デフォルトの名無しさん:2012/01/06(金) 20:14:34.67
環境
Windows7 Professional 64bit
Microsoft Visual C++ 2010 Express Version 10.0.40219.1
Microsoft .NET Framwork Version 4.0.30319
GeForce GTX 580
CUDA Toolkit 4.0.17
SDK 4.0.19
devdriver_4.0_winvista-win7_64_270.81_general

この(ピヨピヨ)を参考に環境を構築しました。
http://feather.cocolog-nifty.com/weblog/2011/07/visual-studio-2.html
そして以下のサイトのサンプルプログラムを実行してみました。
http://www.gdep.jp/page/view/218
Hello,Worldと99 bottles of beerはcpu、gpu共に実行できました。
しかし、Matrixのプログラムはcpuの方は実行できるのですがgpuの方が実行できません。
以下のエラーを吐きます。
matrix_gpu.cu(5) : fatal error C1083: Cannot open include file: 'cutil_inline.h'
: No such file or directory
どうやらVisualStudioのパスがうまく通ってないということまでわかり、以下のサイトなどを参考にCUDA_INC_PATHなどを変えてみましたが、一向に変わりません。
http://d.hatena.ne.jp/Levi/20090921/1253535802#c
SDK内のcutil_inline.h自体をtoolkitのincフォルダにコピペすると、他の.hファイルもいくつか同じエラーが出たのでエラーになったものをすべてコピペしたところ、LNK2019"link.exe"というエラーで先に進めませんでした。
一度VisualStudioを再インストールしてみましたが、状況は変わりません。
Nvidia GPU computing SDK Browserではサンプルプログラムを実行できているので、CUDAの環境は整っていると思われます。
どうすれば解決できますでしょうか・・・。かれこれ1週間以上格闘しています。
VisualStudioは2010よりも2008にした方がいいでしょうか?


275 :デフォルトの名無しさん:2012/01/06(金) 20:23:04.24
C初心者にはきついと思うんだが…
とりあえず 'cutil_inline.h'のある場所を見つけて
そこを-I /'cutil_inline.hのある場所'と指定する

意味わからなければCのコンパイルを勉強すること

292 :デフォルトの名無しさん:2012/01/09(月) 18:01:50.03
>>275

274です。
-Iオプションを付けてヘッダファイルのある場所を指定してみましたが、相変わらず同じエラーです。

C:\cuda_practice\test>nvcc -o matrix_gpu.exe matrix_gpu.cu -I C:\ProgramData\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.0\C\common\inc
matrix_gpu.cu
matrix_gpu.cu(5) : fatal error C1083: Cannot open include file: 'cutil_inline.h': No such file or directory

自分でも試行錯誤してみますが周りにcudaがわかる人がいなくて行き詰ってます・・・。

298 :デフォルトの名無しさん:2012/01/10(火) 17:15:02.61
sharedメモリって同一WARP内でのやり取りだったら同期なしで大丈夫なのでしょうか?
たとえば全部で32スレッドで次のkernelを実行した場合、
WARP内で一斉にsharedメモリに書きに行くので同期しないで大丈夫かと
思ったのですが、実際にはうまくいきません。
globalメモリに読みに行く段階でコアレッシングが発生していないので
それが原因なのでしょうか?
どなたか教えてください。

__global__ void kernel(float *g_v, float *g_x){
float x = 0.0f;
int i = blockDim.x * blockIdx.x + threadIdx.x;
__shared__ float s_v[32];

s_v[i] = g_v[i+i%3];
__syncthreads(); // これが必要かどうか?
x = s_v[(i+3)%32];
g_x[i] = x;
}


299 :デフォルトの名無しさん:2012/01/10(火) 17:35:07.81
>>292

参照パスを ""で囲む♪

355 :デフォルトの名無しさん:2012/01/24(火) 19:53:55.48
コンパイル時に以下のエラーメッセージが出ているのですが、
ptxas error : Entry function '...' uses too much local data (0x16054 bytes, 0x4000 max)
これはローカルメモリーと何か関係あるような気がするのですけど、
ちょっとわからないので教えて頂けないでしょうか。
宜しくお願いします。


357 :デフォルトの名無しさん:2012/01/24(火) 21:56:32.01
> ptxas error : Entry function '...' uses too much local data (0x16054 bytes, 0x4000 max)

単に配列の次元が大きすぎるのでは?

最大 0x4000バイトのところを0x16054 bytes使おうとしている?


> ホスト・デバイスともに共有させたい場合はどうしたらいいのでしょうか?

物理的に無理でないの?

ホスト←→デバイス間でコピーしないといけないのでは??


358 :デフォルトの名無しさん:2012/01/24(火) 21:56:54.10
>>355
メッセージそのままの意味だろ。

362 :355,356:2012/01/25(水) 15:21:00.98
>>358
青木氏の「はじめてのCUDA」に似たようなエラーメッセージが載ってるのですが、
local dataがどの部分の話なのか、ちょっとわからない状態でして...

>>357
>単に配列の次元が大きすぎるのでは?
予定だと1×256スレッドしか使うので、足りないはずないような... 意味が違うか。
ちょっとわからないので詳細お願いします。

>ヘッダーファイルに
>#DEFINE
>などで定義して、ホストとデバイスのプログラムに そのヘッダーファイルをinclude する手があった♪

ちょっと試してみます。それができなかったら、コピーするしかないかもしれません。
__device__ extern TEST test;
のような宣言してて、実行ファイルができたときがあったのですが、何か違うよな、と引っかかってたので、
ここで質問しました。ありがとうございます。



363 :デフォルトの名無しさん:2012/01/25(水) 17:40:16.56
差し支えなければプログラムをアップしてくださいませ♪

364 :デフォルトの名無しさん:2012/01/25(水) 18:01:06.82
>>362

この(ピヨピヨ)の一番下にある資料の3-41ページにそのエラーメッセージが載っている模様。
http://accc.riken.jp/HPC/training.html






365 :355,356:2012/01/25(水) 18:04:09.31
>>362です。

>>363
申し訳ないのですが、プログラムのアップは出来ないです。すみません。

なんかもう分からなくなったので、ホストとデバイスの住み分けを行ったところ、
「ptxas error...」云々のメッセージが消え、コンパイルできました。
(さっきまでhost,device,global宣言関数がごちゃ混ぜな状態だった。)
何が原因だったのか分からず仕舞いです。

グローバル変数の共有はとりあえず、コンスタントメモリにデータコピーで様子見することにしました。
元コード(.c)をもう一度読み直したところ、デバイス側の方はReadOnlyで十分なようでしたから。

皆様回答ありがとうございました。またよろしくお願いします。



366 :365:2012/01/25(水) 21:05:50.75
>>364
資料ありがとうございます。
うまくいったと思った途端、また同じエラーが出てきてしまったので、確認します。

.cファイルに.cuファイルを組み込ませるようにしたら、
__host__ __device__で修飾した関数が定義されてないと.cファイル側に言われ、
.cファイルと.cuファイルそれぞれ単独で動かせるようにしたら、
(同じ内容の関数を.cと.cuそれぞれ別名で実体作った。.c:test .cu:ktestみたいな)
今度はさっきと同じエラー。

実行ファイル作るだけなのに難しい...

368 :デフォルトの名無しさん:2012/01/26(木) 08:53:13.45
取り敢えずCudaのサンプルは捨てて、インクルード関係とオブジェクトの生成手順を確認するんだ。

370 :366:2012/01/26(木) 16:19:08.01
>>368
>取り敢えずCudaのサンプルは捨てて、インクルード関係とオブジェクトの生成手順を確認するんだ。
のように手順を踏んでコンパイルしたところ、実行ファイルができました。
皆様ありがとうございました。

371 :370:2012/01/26(木) 20:33:24.55
お恥ずかしながら、また戻ってきました。
あれからセグメンテーション違反が出てきてしまったので、あれこれ探していた結果、
どうやらデバイスのメモリ確保&送信に失敗していたようです。

しかし解せないことがあって、
構造体A a,構造体B b[100],構造体C c[100],...(以下略 をデバイス側に送るのですが、
(1つ1つのサイズは結構大きめ。グローバルは1GBあって余裕で確保出きるハズ...)
void main(){
・・・
test(&a,b,c....);
}
void test(A *a,B *b,C *c...){
A *d_a; B *d_b; C *d_c;
CUT_SAFE_CALL(cudaMalloc((void**)&d_a,sizeof(A)));
CUT_SAFE_CALL(cudaMemcpy(d_a,a,sizeof(A),cudaMemcpyHtoD));

CUT_SAFE_CALL(cudaMalloc((void**)&d_b,sizeof(B)*100));
CUT_SAFE_CALL(cudaMemcpy(d_a,b,sizeof(B)*100,cudaMemcpyHtoD));
・・・

はじめてcuda,cuda_by_exampleで確認したところ、
文法的ミスはないはずなのに確保ミスしてるらしく、中断してます。

この原因は一体全体なんなんでしょうか。




372 :デフォルトの名無しさん:2012/01/26(木) 21:28:56.32
4.1正式版
CUDA Toolkit 4.1 | NVIDIA Developer Zone
http://developer.nvidia.com/cuda-toolkit-41


373 :デフォルトの名無しさん:2012/01/26(木) 21:55:28.42
構造体の中身がよく分からんが,allocateのところで *100は必要なのかな?

構造体Bのメモリーを100個分用意しようとしている??

構造体Bの中にすでに [100]個の配列を取っているのに???

数は合っておるのか????

375 :デフォルトの名無しさん:2012/01/27(金) 00:03:32.49
>>372
遂にRC取れたか!4.0からどう変わってるか知らんけど。
Kepler向けのプログラムを作れるのは5.0とかになるんだろうか。
そしてそれはいつ出るんだろう。

>>371
1GBのVRAM積んでるカードでも400MBぐらいの確保で失敗したことがあったような覚えがある。
確保するサイズを小さくしてもエラーが出るってんならこの話は忘れてくれ。

383 :371:2012/01/27(金) 18:15:48.81
>>373
CUT_SAFE_CALL(cudaMalloc((void**)&d_b,sizeof(B)*100));
CUT_SAFE_CALL(cudaMemcpy(d_a,b,sizeof(B)*100,cudaMemcpyHtoD));
これはミスですね....
正しくは
CUT_SAFE_CALL(cudaMalloc((void**)&d_b,sizeof(B)));
CUT_SAFE_CALL(cudaMemcpy(d_a,b,sizeof(B),cudaMemcpyHtoD));
です。すみません。

>>375
4000MBの領域確保でも失敗することがあったんですか...
ちょっと試してみます。

387 :383:2012/01/28(土) 17:54:35.37
>>371
なんかサンプルがめちゃくちゃなんで書き直します。

388 :387:2012/01/28(土) 20:55:21.49
確認なのですけど、カーネル関数の引数はポインタ限定ですか?

671 :デフォルトの名無しさん:2012/04/29(日) 14:44:53.67
GPUのデメリットは同じ変数計算を毎回糞真面目に超高速で行うところ

719 :デフォルトの名無しさん:2012/05/17(木) 21:52:07.76
多次元配列を扱えないのは何でなんだろう.

ブロックとスレッドインデックスで一次元化するの面倒なんだけど.

737 :デフォルトの名無しさん:2012/05/23(水) 14:44:51.35
詳しい方に質問させてください。
Win7Pro64 + VC2010Pro + CUDA4.2で32bitのdll (Matlabのmex)を
作成して、カーネル(1回のみ呼び出し)の実行時間を計測しました。
Nsight Visual Studio Editionのプロファイルでは約3583msとなったのですが、
メイン関数側でカーネル呼び出しの時間を調べると12079msとなりました。
この差の原因がわからずに困っているのですが、心当たりのある方は
いらっしゃいませんか?
足りない情報などあればツッコんでください。
よろしくお願いします。

738 :デフォルトの名無しさん:2012/05/23(水) 15:16:21.45
>>737
詳細は実際のコードを見ないと判らないけれど、カーネル呼び出しは完了復帰じゃないよ。
逆に、それを巧く利用すればGPUとCPUで並列処理ができるって寸法だ。

739 :737:2012/05/23(水) 15:25:51.83
>>738
レスありがとうございます。
メイン関数側での測定は、カーネル呼び出し後に
cudaThreadSynchronize();
としてから測定していますが、これではダメですか?
これを入れ忘れると、メイン関数側での測定時間が極端に短くなる
という話はよく目にするのですが、今回は逆に、メイン関数側での
測定時間が極端に長くなっています・・・・

758 :デフォルトの名無しさん:2012/06/02(土) 02:34:05.01
CUDAで計算した結果をDirect3Dで描画したいんですが、
同じプログラム内で同時に使っても問題ないでしょうか?
一つのGPUがCUDAとDirect3Dを切り替えて使うので、
切替のオーバーヘッドとか大きかったりするんでしょうか??

777 :デフォルトの名無しさん:2012/06/08(金) 14:37:45.13
カーネル関数で乱数使いたいとき、みんなどのライブラリを使ってるの?
curandとtinymtは使ったことがあるんだけど、他におすすめある?

829 :デフォルトの名無しさん:2012/08/02(木) 16:58:06.96
最近CUDAの勉強を始めて、試しに画像処理アプリをGPU用に書き換えているのですが
どうしても分からないことがあるので質問させてください

double *a[5],*d_a[5];
int size=1280*1024; //実際には読み込んだ画像のサイズが入ります
for(i=0;i<5;i++){
a[i]=(double *)calloc(size,sizeof(double));
for(j=0;j<size;j++)a[i][j]=i*j; //ここのi*jは実際には読み込んだ画像の画素情報が入ります
}
for(i=0;i<5;i++)cudaMalloc((void**)&d_a[i],sizeof(double)*size);
for(i=0;i<5;i++)cudaMemcpy(d_a[i],a[i],sizeof(double)*size,cudaMemcpyHostToDevice);
func<<< Dg, Db >>>(d_a);

__global__ void func(double *f_a[5]);
上記のf_a[5]の、ホストにおけるa[i][j]にあたる値を参照するにはどうしたらよいでしょうか
ホスト同様にf_a[i][j]とすると
Warning: Cannot tell what pointer points to, assuming global memory space
上記の警告が出て上手くいきません
超初歩的な質問かと思いますが、アドバイス宜しくお願いします

830 :デフォルトの名無しさん:2012/08/02(木) 17:15:58.20
>>829
d_aはホスト上の配列。そいつへのポインタを渡してもなんともならない。
d_aが固定長でいいなら、__global__ void func(doule * f_a0, doule * f_a1, doule * f_a2, doule * f_a3, doule * f_a4);
とするのが手っ取り早い。
d_aが可変長だったり巨大だったりするなら、
double ** dPtrArray, ** hPtrArray;
hPtrArray = malloc(sizeof(* hPtrArray) * length);
cudaMalloc((void **) & dPtrArray, sizeof(* dPtrArray) * length);
for (int ic = 0; ic < length; ++ic) {
cudaMalloc((void **) & hPtrArray[ic], sizeof(* tmp) * size);
cudaMemcpy(hPtrArray[ic], a[ic], sizeof(double) * size, cudaMemcpyHostToDevice);
}
cudaMemcpy(dPtrArray, hPtrArray, sizeof(* hPtrArray) * length, cudaMemcpyHostToDevice);
とでもしないと。

853 :デフォルトの名無しさん:2012/08/06(月) 23:15:24.01
C++とCUDAを連携させたプログラムを作成しているのですが、どうしても解決出来ない問題が発生してしまったので教えて下さい。
C++のスレに質問するか迷ったのですが、エラーにはCUDAがメインで関わっていると思ったのでこちらに書き込みます。

C++のプログラムからCUDAのプログラム(既にexeになっているもの)を実行したいと思い、下記のようなプログラムを作成したのですが、
CUDAプログラム単体では動いているのにC++のプログラムから呼び出すと実行時にエラーが発生してしまいます。

SDK内のサンプルプログラムでも実行エラーになってしまうので、CUDAプログラム側のバグでは無いと思うのですが…
system関数では実行出来ないのでしょうか?system関数以外でも良いのでなんとか実行する方法が知りたいです。


int _tmain(int argc, _TCHAR* argv[])
{

int ret;

printf("CUDAプログラム実行開始\n");
ret = system("\"D:\\Program File\\Test_Print.exe\"");
if(ret == 0)
{
printf("プログラム実行成功\n");
}
else
{
printf("プログラム実行失敗\n");
}

}

854 :デフォルトの名無しさん:2012/08/06(月) 23:54:55.12
そのTest_Print.exeと同じ場所に何でもいいのでC++で作った何か*.exeを置いて同じことを試してみなよ。
俺があてずっぽうで言うとたぶん同じようにうまくいかないつまりCUDAがどうこうって問題じゃない。

857 :デフォルトの名無しさん:2012/08/07(火) 03:43:55.76
>>853
system関数のマニュアル見てエラーの値をしらべたら?

869 :デフォルトの名無しさん:2012/08/11(土) 20:06:38.41
超基本的な質問をしたい。

「はじめてのCUDAプログラミング」を読んで色々動かしてるんだが、
ブロックとスレッドとSMとSPのそれぞれ関係がいまいちモヤッとしてる。

最初から順に読んでいて、57 ページの次の説明で躓いた。

> スレッド当たりのレジスタ数が
> 「SM当たりのレジスタ数 / ブロック内のスレッド数」
より多い時は、「カーネル関数」を実行できなくなります。

SM や レジスタは物理的なもので、ブロックやスレッドは論理的なものなのに、
なんでごちゃ混ぜになってるのか・・・

その少し後のページも見たり、直前の Warp の説明を読んで
俺なりに考えた結果、次のような認識なのだが、これは間違ってる?

・1つの SP は一度に1つのスレッドを処理する
・1つの SM は一度に1つのブロックを処理する


http://toro.2ch.net/test/read.cgi/tech/1314104886/l50/../人気ブログランキングへ

学ばないブログ
忍者AdMax
記事検索
最新コメント
QRコード
QRコード
  • ライブドアブログ