0時頃に横になったら、3時くらいまで寝てしまう。
それから風呂入ったら、朝起きられなさそうだったので、
そのまま寝る。
今シャワー浴びてきた。
この時期の朝シャワーは風邪引きそうだ。。。
それから風呂入ったら、朝起きられなさそうだったので、
そのまま寝る。
今シャワー浴びてきた。
この時期の朝シャワーは風邪引きそうだ。。。
|
0時頃に横になったら、3時くらいまで寝てしまう。
それから風呂入ったら、朝起きられなさそうだったので、 そのまま寝る。 今シャワー浴びてきた。 この時期の朝シャワーは風邪引きそうだ。。。 ブロック(x,y)、グリッド(1,1)→threadIdx.x + threadIdx.y * blockDim.x
ブロック(1,1)、グリッド(x,y)→blockIdx.x + blockIdx.y * gridDim.x この考えは間違えていない。 ここで、どのブロックか知るためには、 ブロック幅xyをグリッドの要素にかける必要が出てくるのではないか? (1ブロックずつずらす感じ) そうすると、あの式が出てくる。 どのスレッドかは、ブロック(x,y)で分かっているので、足すだけ。 う〜ん・・・まだ何かモヤモヤするな^^; ブロック(bx,by)、グリッド(gx,gy) (x,y) = {(bx,by), (gx, gy)} として考えてはダメですか?(ぇ ブロックをx、スレッドをyとして考えたけど、
何か強引にやった気がする。 配列Aの水平方向座標mはm=blockDim.x ×blockIdx.x+threadIdx.xで算出でき, 垂直方向座標nはn=blockDim.y×blockIdx.y+threadIdx.y で算出できます. 配列AはN×Nの要素を持つので,配列中のある1要素へはA[n×N+m]でアクセスできます。 う〜ん。 このmとnから求めようとすると、少々無理がある気がする。 (NもスレッドIDやブロックIDなどで表現すると、さらに並列処理が増えて効率的になる?) 最終的には、 threadIdx.x + threadIdx.y * blockDim.x +(blockIdx.x *blockDim.x * blockDim.y) +(blockIdx.y *blockDim.x * blockDim.y * gridDim.x) こんな式になる。 個人的に考えたのが、 ブロック内の座標(x,y) = (threadIdx.x, threadIdx.y) 配列中の要素→threadIdx.x + threadIdx.y * blockDim.x(ブロック幅) グリッド内の座標(x,y) = (blockIdx.x, blockIdx.y) 配列中の要素→blockIdx.x + blockIdx.y * gridDim.x(グリッド幅) ここまではいい。 ここでブロック内の座標をx、グリッド内の座標をyとしてみたが、 結果は合っているものの、 x、yと置き換えることはできなくない?と。 グリッド内の座標を出したら、 今度はどの位置のグリッドか知りたいので、 ブロックの面積をかけてあげる。 ( blockIdx.x + blockIdx.y * gridDim.x ) * blockDim.x * blockDim.y ここにブロック内の要素を足してあげると、結果は出るが・・・やはり何か無理矢理出した感がある。 何かしっかりした説明がないものか。。。 (一応こんな感じの考え方でも、一次元になったときでも使える) スレッドIDをまずは参照。
次に、グリッド数で考える。 こちらもブロック数(スレッドID使用)と似たような感じ。 今度がブロック数が1、グリッド数が2次元で考える。 座標で考えると、 (x, y) = (blockIdx.x, blockIdx.y) xの幅は、blockDim.x。 よって、配列の要素番号は blockIdx.x + blockIdx.y*gridDim.x (この場合、gridDim.x がxの幅となる) 次に、ブロック数とグリッド数両方が2次元となった場合を考える。 これも今まで行ってきたのと同じような感じで考えることができる。 式をそのまま使うと分かりづらいので、一旦まとめる。 x_a = threadIdx.x + threadIdx.y*blockDim.x(ブロック) y_a = blockIdx.x + blockIdx.y*gridDim.x(グリッド) と、こんな感じ。 ※x_aの幅は1ブロックの面積と考えられるので、blockDim.x*blockDim.yとなる。 よって、配列の要素番号は x_a + y_a*(blockDim.x*blockDim.y) =threadIdx.x + threadIdx.y*blockDim.x + (blockIdx.x + blockIdx.y*gridDim.x) * (blockDim.x*blockDim.y) と、こんな感じです。 何か最後の式は分かりづらいので、 一旦x_a、y_aを変数にして計算した方がいい。 これで1280*1024の処理も可能になるかな? ブロック数を256*512、グリッド数を5*2でOK? スレッドIDの使い方が分からなかったけど、
よく考えてみたら初歩的なことで悩んでいたようだ。 GPU関数呼び出すときに、 ブロック数とグリッド数を指定するが、まずはグリッド数を1のときのみ考える。 ブロック数を2次元x,yで考える。 座標で考えると、 (x,y)=(threadIdx.x, threadIdx.y) となる。 1次元配列で考えると、 2行目は「threadIdx.xの最終列の次」からとなる。 そのため、ブロック数を2次元で指定している場合、 1次元配列の要素番号は x + y*(xの大きさ) となる。 1次元配列を2次元配列風に考えると、 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 こんな感じに並んでいるわけです。 ブロック数を2次元にし、 GPU側で1次元配列として使用する場合は、 Array[threadIdx.x + threadIdx.y*blockDim.x] = 代入したい値 と、こんな感じになる(blockDim.xはXのブロック幅) →もしかして、blockDim.xの部分違ってる? グリッド数も指定した場合の例は、後ほど。 (この記事が合っていることを確認できたらw) ローカルのほうが10Mbpsで認識されてしまう。
一旦無効→有効にすると100Mbpsで認識していたので、 最近は立ち上げたら無効→有効にやっていた。 今日、一旦無効にしたのに何か遅かったので確認したら、 10Mbpsのまま。 何度やってもダメ。 ケーブル変えてもダメ。 ネットワークアダプタのプロパティ→詳細設定→MediaTypeで、 100Mbps全二重に設定してみたが、 接続できない。 100MbpsのLANと、ギガビットLAN対応のLANボードって、相性悪いのかな? LANボードは Atheros AR8121/AR8113/AR8114 PCI-E Ethernet Controller LANは MN8300 を使用。 100Mbpsまでしか対応してないLANボードのPCは、 普通に100Mbpsと表示されてます。 少しずつダメアプリ公開しようと思います。
まずはオセロ。 一度作ったけど、クラス考えずに作ったのと、 ソースは会社に置いてるので取りに行くのが面倒なため、再作成。 アルゴリズム(といっても殆どないようなもの)の部分はあるので、 意外と楽にできるはず。 土日中に公開できるかな? 自分のPGの勉強のためなので、 実用性のないもの、機能が殆どないものが多くなります^^; 上司と大学の教授の会話に全くついていけず。
しかもたまに話し振られたりして。 そもそもその用語初めて聞くよ--; というのが何度か。 先が思いやられる。 用語解説しながら話してくれる人いないかなw 通勤時間が増えます--;
しかも、バス乗り継ぎという嫌な感じ。 本も読みづらいし。 でも、本読むことくらいしか・・・。 前はipodで宅建の解説とか聞いてたけど、 さすがに覚えられないので。 一度勉強してからならいいかも。 あとは携帯で何か考える? もう少し見られる範囲が大きいといいのだが。 IPAの資格以外で、何かないかな?
応用情報の午後問題対策に、セキュリティ分野の勉強しようと思うのだが、 どうせなら他の資格とっておきたいな、とw そんな上手い話はないか。。。 データベースとネットワークはもう少し強化して、確実に80%取れるようにしないとなぁ。 あとは経営戦略とか、読めば解けそうな問題も解けるようにする。 (一度も解いたことなかったから、今回は他の問題まずそうでも解かなかった) 問2で80%、問3〜問12の中で3問が70%、1問が50%、 もう一問は10%くらいを目指そう(ぇ 一先ず、今回の応用情報午後はダメっぽい・・・。 ネットワークの記号問題が壊滅した。。。 認証系はセキュリティに入れてくれ--; 1:イ
2:エ 3:ウ 4:ウ 5:イ 6:イ 7:イ 8:エ 9:イ 10:イ 11:ア 12:ウ 13:ウ 14:イ 15:ア 16:エ 17:エ 18:イ 19:ウ 20:ウ 21:ウ 22:イ 23:ウ 24:イ 25:ウ 26:ア 27:ウ 28:ア 29:エ 30:エ 31:イ 32:イ 33:エ 34:ア 35:イ 36:エ 37:ア 38:イ 39:ア 40:ア 41:エ 42:ウ 43:エ 44:ウ 45:イ 46:ア 47:ウ 48:ア 49:ウ 50:エ 51:エ 52:エ 53:エ 54:ア 55:イ 56:イ 57:エ 58:ウ 59:イ 60:ア 61:イ 62:ア 63:エ 64:ウ 65:イ 66:エ 67:ウ 68:ウ 69:ア 70:ウ 71:ウ 72:イ 73:ウ 74:イ 75:ア 76:ア 77:エ 78:エ 79:ウ 80:ア mixiで日記書こうと思ったら、
500 Internal Server Error システムいじって、確認しないでアップしちゃったのだろうか? でも、休日のこの時間にメンテナンスはやらないよなぁ、と。 何があったんでしょ? すごいね。
ノムさん来年も継続してくれたらよかったのに・・・。 何で今年で辞めさせられるのか、分からない。 名誉会長の話しもあったけど、もう少し戦力補強してからでないと。。。 裏技モバイルに、SFCとFCの裏技を追加してみました。
他の機種は今しばらくお待ちを・・・。 (他の機種はあまり需要がないので^^;) ほぼ確定しているらしい。
4歳ほど年上の人が、成果出したらしいので、 その後を引き継ぐ形で独りで。 独りなのは問題ないけど、 3年間の経験の差はかなり大きいので、 果たして成果を残せるか・・・。 ただ、普通に誰かの下につくより、 やりがいはある。 雑務もなさそうなので、無駄な時間は通勤時間くらいか?w (会社からバスで30分とか) 今は自社学習となっている。
ある程度覚悟はしていたけど、 やはり他の人のフォローもやらないといけないかも。 う〜ん・・・自社学習以外で、PG扱ってなかったのにフォローってどうなの?--; 社会人になって、PC関連の技術はSQLしかついてないのだが。。。 他の人たちはプロジェクトでPG行ってたから、 大学の貯金は無くなり、抜かれてるはず・・・。 で、PGなんてやってないのに、 求められる言語が多くて困ってるわけです。 フォローする側ではなくて、フォローされる側だと思うのだが。。。 フォローなくてもいいけど、せめて100%学習する時間を与えてください。。。 ネットでまとめ買いしていて、約1年ぶりに購入することになったが・・・(ぇ
12ロールで100円くらい値上げしていて、びっくりです。 約50%も値上がり。。。 他に安いトイレットペーパーも出ているようだけど。 その値段と比較しても、30%くらい値上げしてる。 12ロール198円基準だったのになw オセロ作成について。
二次元配列なのに、 for(int i = 0; i < 64; i++){ a[c[i]] とか書いてしまったのが原因。 すんなり行くかと思って軽く考えすぎました。 二次元配列使うと四重ループになりそうだったので、 一次元配列で順番を決めた。 (マスを管理している配列は二次元配列) 配列Bに一次元配列で評価値を格納。 二重(i,j)ループで0〜63番までの中で何番目にポイントが高いか算出。 (count変数を定義) ※PG殆ど組んでなかったので、この処理はもっと効率よく書けるかも? jのループから抜けたところで、 二次元配列Cのcount番目の0番目にcount/8(縦)、1番目にcount%8(横)を代入。 二次元配列B、Cは別のPGで実行して(固定なので) 配列Dをメインプログラムに作成。 二次元配列AのD[i][0]番のD[i][1]番目から石を置けるか順に検索。 for(i=0;i<64;i++){ if( A[D[i][0]][D[i][1]] == 石置ける ){ } } と、こんな感じです。 結構混乱してしまった・・・。 オセロを作成することになったので、
簡単なアルゴリズムで作ってみることにした。 作成物を見せるときは、もっと強くしますが。 まずどこから手をつけたらいいか分からなかったので、 対人用で作成(自分でおきたい場所を選び、置けるか判断するだけ) 次に、コンピュータ対人。 コンピュータは左上から順に置ける場所を探すだけw 次の段階は、少しコンピュータにも考えてもらう。 そこで、簡単なアルゴリズムで作ってみることにした。 2次元配列 配列A、配列B、配列Cを用意。 配列A 白、黒、無しの情報を8×8マス分、左上から順に保持。 配列B 各マスのポイントを保持。 配列C 配列Bを元に、ポイントが高い配列の番号を順番に保持。 ※配列B・Cは全く別のクラスで作成して、配列Cの値を算出したら、オセロのクラスに値を入れたほうがいいかも(人工知能でないのに、毎回配列C作成は効率悪い) 配列Cの配列の番号順に、配列Aの置ける場所を検索。 たったこれだけ。 各マスのポイントは角を高くし、その周りを最低にする。 あとは適度に。 これだけでも何人かには勝てるかも? まずは午前中にJavaで実装して、 午後からは与えられた言語の学習に。。。 応用情報。
先週は諦めモードだったけど、少しだけ受かる可能性が出てきた。 今週中に自社で2期分くらい過去問解けたら、午前は大丈夫かも。 午後問題はあまり対策できてないなぁ。。。 今自社待機で学習となってるけど、思ったよりも効果的なようだ。
大学時代、まともにPGをいじっていたのは、週3時間(講義1時間含む)で1年で26回、2年間。 なんと、1ヶ月自社でPGの学習すると、大学時代のPGの学習時間に相当してしまう! 大学時代の学習時間 週3時間 * 26回 * 2年間 = 156h 自社の学習時間(1ヶ月) 1日8時間 * 20日 = 160h 1ヶ月で大学分補えるのかよ・・・。 半年くらい自社学習する余裕があれば、大学の学習なんていらないね。 大学時代少し触れたけど、
もしかすると次の業務で使うかもしれない・・・。 う〜ん・・・毎回全く違う業務に入ってるな^^; 新鮮味があっていいけど、覚えるのがなかなか大変。
|