約 2,556,494 件
https://w.atwiki.jp/fe_matome/pages/36.html
#pragma comment(lib, "wsock32.lib") // wsock32.libにリンクをはる #define PORT 8000 //__stdcallってなんぞ? = WINAPIのエイリアス。WINAPI関数に準じた呼び出し規約でスタックメモリを使いますということ(?) unsigned int __stdcall send_func(LPVOID lpsocksend); void recv_func(SOCKET sockrecv); //DNSにたずねることで、ホスト名からIPアドレスに変換する void hostname2ip(const char* host_name); int main (){ WSADATA wsaData; struct sockaddr_in server; SOCKET sockrecv, socksend; HANDLE hthread; unsigned int threadId; unsigned long val=0; fd_set fds; // .dllとしてパックされているwinsock2の初期化 if(WSAStartup(MAKEWORD(2,0), wsaData) != 0){//返り値0なら成功 fprintf(stderr, "startup"); return 0; } hostname2ip("www.google.co.jp"); // ソケットの作成 sockrecv = socket(AF_INET, SOCK_STREAM, 0); socksend = socket(AF_INET, SOCK_STREAM, 0); if((sockrecv == INVALID_SOCKET) || (socksend == INVALID_SOCKET)){ fprintf(stderr, "socket"); return 0; } printf("バージョン = %d.%d\n記述 = %s\n状態 = %s\n" , (BYTE)wsaData.wHighVersion , wsaData.wHighVersion 8 , wsaData.szDescription ,wsaData.szSystemStatus ); // 接続先指定用構造体の準備 server.sin_family = AF_INET; server.sin_port = htons(PORT); server.sin_addr.S_un.S_addr = inet_addr("192.168.24.51"); ioctlsocket(sockrecv, FIONBIO, val); ioctlsocket(socksend, FIONBIO, val); //ポートが使えるか確認 if(connect(sockrecv, (struct sockaddr *) server, sizeof(server)) != 0){ fprintf(stderr, "recv port"); return 0; } if(connect(socksend, (struct sockaddr *) server, sizeof(server)) != 0){ fprintf(stderr, "send port"); return 0; } //hthread = (HANDLE)_beginthreadex(NULL, 0, send_func, (LPVOID)socksend, 0, threadId); //recv_func(sockrecv); WaitForSingleObject(hthread, INFINITE); closesocket(sockrecv); closesocket(socksend); WSACleanup(); return 0; } void hostname2ip(const char* host_name){ int iCount; LPHOSTENT host = gethostbyname(host_name); if (host == NULL) { fprintf(stderr , "ホスト名の取得に失敗しました %s" , host_name); return ; } printf("公式名 = %s\n" , host- h_name); for(iCount = 0 ; host- h_aliases[iCount] ; iCount++) { printf("別名 = %s\n" , host- h_aliases[iCount]); } for(iCount = 0 ; host- h_addr_list[iCount] ; iCount++) { printf("IP = %d.%d.%d.%d\n" , (BYTE)*((host- h_addr_list[iCount])) , (BYTE)*((host- h_addr_list[iCount]) + 1) , (BYTE)*((host- h_addr_list[iCount]) + 2) , (BYTE)*((host- h_addr_list[iCount]) + 3) ); } }
https://w.atwiki.jp/magicman/pages/32043.html
法皇プログラム R 光/水文明 (8) 呪文 ■S・トリガー ■自分の山札の上から進化ではないクリーチャーが出るまで表向きにする。この呪文を唱えたターンが相手のターンならかわりにバトルゾーンにいる最もコストの大きいクリーチャー以下のコストを持つ進化ではないクリーチャーが出るまで表向きにする。こうして表向きにしたクリーチャーをバトルゾーンに出す。そのクリーチャーが光または水のクリーチャーなら次の自分のターンのはじめまで、そのクリーチャーに「ブロッカー」を与える。 カードリスト かいがら 関連 蒼龍の大地 転生プログラム 時の法皇ミラダンテXⅡ 評価 選択肢 投票 強すぎる (0) 良いカード (5) 普通 (0) 弱すぎる (0) 評価 名前 コメント
https://w.atwiki.jp/ps3hack/pages/39.html
PSGrooPIC PIC18F2550等のUSBコントローラ内蔵PICを使ったPSGroove。 AT90USB等のようにブートローダが内蔵されていないので、hex書き込みには別途プログラマ(ライタ)が必要になる。 (hexと一緒にブートローダも書き込めば、次回からプログラマ不要) http //psgroopic.blogspot.com/ http //psx-scene.com/forums/showthread.php?t=65391 http //www.ps3news.com/forums/ps3-hacks/psfreedom-psgroove-ps-jailbreak-exploit-ports-development-112409.html http //www.youtube.com/watch?v=oQrL8LP08do http //www.youtube.com/watch?v=nrCfdE85uow 対応PIC搭載したボードを購入するか、自分でボードを作成する。 作成後の動作方法はAT90USB等と変わらない。 はんだ等の電子工作の知識がない人はUSBマイコンボード 完成品(PIC18F2550)とAKI-PIC2プログラマボード(PICkit2互換)を買えばok。 (多少知識があるなら、AKI-PIC2プログラマボードではなくPICKit2を買って、アダプタを自作するなりする) もしくはオークションなどで売られているものを買うべし。 知識がある人は言わずもがな、回路図を見て必要な部品を用意し作成すればok(ボードの部品=千円ぐらい) 対応PIC PIC18F2455 PIC18F2550 PIC18F4550 hex http //psgroopic.blogspot.com/ http //psx-scene.com/forums/showpost.php?p=509470 postcount=494 http //psx-scene.com/forums/showpost.php?p=509819 postcount=526 http //www.ps3news.com/forums/ps3-hacks/psfreedom-psgroove-ps-jailbreak-exploit-ports-development-112409-2.html#post302623 などなど 回路図 PSGrooPIC v1.1 http //psgroopic.blogspot.com/ http //1.bp.blogspot.com/_fvremgaSIxM/TIXz8uynxVI/AAAAAAAAACs/YgrFwmuoTw4/s1600/PSGooPIC_SCH_V1.1.png IC1:PIC18F2550 C1:470nF(0.47uF)コンデンサ C2:100nF(0.10uF)コンデンサ C3,C4:22pFコンデンサ R2:330Ωカーボン抵抗 LED:適当なLED Y1:8Mhz水晶発振子 J1:USBコネクタ pspic2 http //psx-scene.com/tmp/psx-scene/pictures/schematic.png IC1:PIC18F2550 C1,C2:22pFコンデンサ C3:220nF(0.22uF)コンデンサ R1:1KΩカーボン抵抗 LED1:適当なLED Q1:20Mhz水晶発振子 X1:USBコネクタ ブートローダ対応 http //psx-scene.com/forums/showpost.php?p=511697 postcount=645 360 USB SPI Flasher mini http //img11.imageshack.us/i/xbox360usbflashermini.png/ http //www.ps3news.com/forums/attachment.php?attachmentid=21239 d=1283726441 などなど 使用できる?市販ボード USBマイコンボード 完成品(PIC18F2550) http //akizukidenshi.com/catalog/g/gI-02161/ PIC18F-MOD-2553 ※PIC18F2550強化版「PIC18F2553」搭載。USBブートローダ書き込み済み?。動作不明 http //www.microfan.jp/shop/6_173.html PICKit2 ※ファームウェア書き換えで動作可能? http //akizukidenshi.com/catalog/g/gM-02508/ http //www.ne.jp/asahi/air/variable/picmel/integration/write/pickit2/index.html#tag1-3 http //www.ne.jp/asahi/air/variable/picmel/integration/write/pickit2/index.html#tag4-3 市販PIC18Fxxxx対応プログラマ(ライタ) PICKit2 ※別途アダプタなどが必要 http //akizukidenshi.com/catalog/g/gM-02508/ ◎アダプタ作成例 http //www.eleki-jack.com/news/2009/06/22/Elc13_042~043_toku1_M2.pdf http //www.picgames.org/modules/tinyd1/index.php?id=30 AKI-PICプログラマー Ver.4(完成ボード) http //akizukidenshi.com/catalog/g/gK-02018/ AKI-PIC2プログラマボード(PICkit2互換) http //akizukidenshi.com/catalog/g/gM-02495/ 【MPIC06-KIT】PICライターキット https //www.marutsu.co.jp/user/shohin.php?p=40073 ほぼPICキット2 http //iizukakuromaguro.ocnk.net/product/118 Microchip USB Framework http //www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE nodeId=2680 dDocName=en537044 http //amahime.main.jp/picusb/main.php?name=picusb などなど 自作PIC18Fxxxx対応プログラマ(ライタ) RCDライタ+アダプタ http //feng3.cool.ne.jp/rcd/ http //kuri6005.sakura.ne.jp/pic/index.php?%A3%B1%A3%B8F%B7%CF%A4%D8%A4%CE%BD%F1%B9%FE(%A3%D2%A3%C3%A3%C4%A5%E9%A5%A4%A5%BF)
https://w.atwiki.jp/kirbystarwiki/pages/9.html
プログラムであそぼう プログラムでいろいろ作っていろいろ遊んでみようと言うことで、自分で出来ることを色々書きためてみました。 みんなもプログラムの楽しさを味わってみよう! …最初のうちは難しいかもしれないけど大丈夫、大丈夫!! コンテンツリスト 人生いろいろ、プログラム言語だっていろいろ。 さぁあなたはどの言語で遊ぶ? Microsoft Visual C# プチコン3号 SmileBASIC JavaScript
https://w.atwiki.jp/eizoukoubou-hanpo/pages/8.html
上映会プログラム 2006年9月9日(土) 9:45会場、10:00開演 ①予告編(4分) 「もっと・・・」「かげふみ」「お元気ですか」 ②「みつば」(2002年制作 大口一男監督15分) ③「四次元部屋」田中進監督(4分) ④「もっと・・・」(2001年制作 知音 16分) ⑤「サンタさん」(田中進監督 3分) (テープ交換、休憩時間は設定しません。そのまま席でお待ちください) ⑥「かげふみ」(2006年制作 知音 23分) ⑦「ハンカチ落とし」(田中進監督 1分) ⑧「おばあさん」(2004年制作 映像工房半歩 12分) ⑨「お元気ですか」(2006年制作 映像工房半歩 24分)
https://w.atwiki.jp/darui_program/pages/324.html
とりあえず、eclipseでstruts2を実行できる環境を整える 前回に引き続きstruts2の記事です。 概要にある通り、eclipseでstruts2を実行できる環境を作ります。 まず、どっかのフォルダに新しいフォルダを作って下さい。(作業フォルダ) 名前は、何でも良いですが日本語はやめましょう・・・。 私は、「C /struts2-workspace」としました。 そしたら、前回インストしたeclipseを起動する。 (インストしたディレクトリ/pleiades/eclipse/eclipse.exe) カリカリとPCガンガルが遅い・・・ ワークスペース・ランチャーとか出てきたら参照ボタンを押して、さっき作った作業フォルダを指定する。んで、OKボタン押す。 ツールバーから、[ファイル]→[新規]→[プロジェクト]→[Web]→[動的 Web プロジェクト]→[次へ] プロジェクト名を入力→ターゲット・ランタイムの新規ボタンを押す。 新しくウィンドウが立ち上がったら、[Apache]→[Apache Tomcat v6.0]を選択。 新規ローカル・サーバの作成にチェックを付けて次へボタンを押す。 Tomcat インストールディレクトリの参照ボタンを押して、pleiadesをインストしたフォルダのtomcat6.0フォルダを選択してOK。 私の場合は「C /pleiades/tomcat6.0」です。 次、JREのプルダウンから「jre1.6」を選択。んで、完了ボタンを押す。 再び、完了ボタンを押す。 とりあえずプロジェクトは完成・・・まだ、設定あるんだよね~(面倒な・・・) ツールバーから、[ウィンドウ]→[設定]。(そうそう、各設定で適応ボタン押すの忘れないでね) まずは、JDKの設定から・・・ 左の一覧からJava項目の「+」をクリック。その中からコンパイラを選択 [Java]→[コンパイラー]。JDK準拠のコンパイラー準拠レベルプルダウンから1.6を選択。 続いて、Tomcatの設定・・・ 左の一覧からTomcat項目を選択。Tomcatバージョンを「バージョン 」6.xに設定。 Tomcatホームの参照ボタンを押して、pleiadesのtomcat6.0フォルダを選択。 そのまま続けて、(左一覧)[Tomcat]→[JVM設定]を選択。JREプルダウンから「jre1.6」を選択。 設定終わったらOKボタンを押す。これで全体の設定は完了。 ここいらの設定をしないで使うとeclipseで コンパイルするJavaのバージョンとtomcatでのJavaのバージョンが違くなるので、エラーに悩まされる・・・というか悩まされた。 次は、プロジェクトの設定をする。(いい加減面倒だよね・・・) まぁ、最後の設定なので頑張って下さい。 ここでも、設定の適応ボタンを押すの忘れないでね。 左側にあるプロジェクト・エクスプローラから自分で設定したプロジェクト名を選択。 ツールバーから、[プロジェクト]→[プロパティ]を選択。新しくウィンドウが立ち上がる。 まず、リソースから・・・ 左一覧から[リソース]を選択。 テキスト・ファイル・エンコードのラジオボタンを「その他」にチェック。プルダウンからUTF-8を選択。 次、また・・・Tomcatの設定。 左一覧から[Tomcat]を選択。全般のタブを選択。 「Tomcatプロジェクト」のチェックボックスにチェック。 コンテキスト名を入力。入力内容は「/自分が設定したプロジェクト名」 私の場合は、「/struts2-test」になる。 次、「Webアプリケーション・ルートとするサブディレクトリ」を入力。 「/WebContent」と入力して下さい。他のディレクトリを設定すると、この記事で続けるの面倒になる。 これで、全部設定完了~。長い設定お疲れ様です。(OKボタン押すの忘れずに・・・) 設定って面倒臭いよねw 複数画像をうpする方法が分からないので分かりづらいかもしれないですが、どうにか頑張って下さい。 一応、自前の@wikiには画像付けるんで・・・ 以下、設定しなくてもしても良い。 プロジェクト設定ウィンドウにある左一覧から[Javaのビルド・パス]を選択。 「デフォルト出力フォルダ」の参照ボタンを押す。 [プロジェクト名]→[WebContent]→[WEB-INF]に新しく「classes」のフォルダを追加してclassesを選択しOKボタンを押す。 既存にあるbuildフォルダは削除しておk。(逝ってよしw) 表示した方が便利なもの・・・ ツールバーから[ウィンドウ]→[ビューの表示]→[ナビゲータ]を選択。 以上、実行環境構築編でした。 次は、実際に動作させるまで持っていきます。(いつになるだろうか・・・) 来週の前半までにはやりたいね。 それでは、良いハックを~www 今日が過ぎても~ - 昨日が過ぎても~ - いいから何でも~ -
https://w.atwiki.jp/opennovel/pages/15.html
初期募集スタッフ とりあえず 絵師三人 プログラマ一人 ライター一人 背景・音・BGMなどの雑用一人 女声優三人 これくらいほしい スタッフ 名前 役職 状況 備考 猫次郎◆MixW80QR1g 企画進行・まとめ・絵師 無期休止※2 ※1 イッヌ◆9sfvzQZHO6 シナリオ補佐 脱退ずみ 鼠◆SRB5YIRp7OCt プログラマ シナリオ待ち ※1 最初のスレ主のイッチ=しらねーよ山田=猫次郎◆MixW80QR1g=mow◆G0g6sKo3hA ※2 370:mow◆G0g6sKo3hA:20/01/02(木)00 42 58 ID H7q 絵が自在に描けるようになったらまた始動します
https://w.atwiki.jp/futada/pages/29.html
Fermi Tuning Guide日本語訳 NVIDIAが公開しているTuning CUDA Applications for Fermi 1.3 (8/17/2010)の日本語への意訳です。 http //developer.download.nvidia.com/compute/cuda/3_2_prod/toolkit/docs/Fermi_Tuning_Guide.pdf 原文copyright:© 2007-2010 NVIDIA Corporation. All rights reserved. 自分の勉強のために訳しているだけで、未保証です。 次世代CUDA計算アーキテクチャ CUDAのベストプラクティス アプリケーションの互換性 Fermiのチューニング デバイス利用 L1キャッシュ グローバルメモリ シェアードメモリ コンスタントキャッシュ 32ビット整数乗算 IEEE 754-2008準拠 C++サポート 進歩した関数 参考文献 次世代CUDA計算アーキテクチャ Fermiは、NVIDIAの次世代CUDA計算アーキテクチャです。Fermiのホワイトペーパー[1]は、2006年にG80で導入され、後の2008年に変更されたGT200のTeslaアーキテクチャからの主要な改良点の詳細なオーバービューを与えます。 Fermi とTeslaアーキテクチャは、どちらもCUDA計算アーキテクチャのため、プログラミングモデルは、両方に対し同一であり、Teslaアーキテクチャに対するベストプラクティスに従うアプリケーションは、コードのいかなる変更もせずにFermiアーキテクチャでの速度向上が典型的には起こるはずです(特に、倍精度浮動小数点の性能に制約される計算では)。 この文書は、Fermiがこれらの速度向上をさらに加速するためのアプリケーションの最適化の方法の概略を与えます。より詳細は、CUDA C Programming Guida 3.2で文書のいたることろで見ることができます。 CUDAのベストプラクティス CUDA C Programming Guide[2]とCUDA C Best Practices Guide[3]で述べられた性能の手引きとベストプラクティスは、すべてのCUDAアーキテクチャに適用可能です。プログラマは、最高性能を達成するために以下の推奨を第一に見据えなくてはいけません。 これらの手引きからの高い優先度の推奨は以下の通りです: 逐次コードを並列化する方法を発見せよ ホストとデバイス間のデータ転送を最小にせよ デバイス利用を最大化するようカーネル起動設定を調整せよ グローバルメモリのアクセスがコアレスされていることを確認せよ 可能な時はつねにグローベルメモリのアクセスをシェアードメモリのアクセスに置き換えよ 同一のwarp内で異なる実行パスを避けよ アプリケーションの互換性 この手引きでカバーしている特定の性能最適化問題に取り組む前に、開発者は、アプリケーションがFermiと互換性が保たれる方法でコンパイルされたか確認するため、Fermi Compatibility Guide for CUDA Applicationsを参照すべきです。 Fermiのチューニング すべての節の参考文献は、CUDA C Programming Guide 3.2での節です。 デバイス利用 compute capability 1.xのデバイスで全てのマルチプロセッサを利用する唯一の方法は、デバイスでのマルチプロセッサと少なくとも同じ数のスレッドブロックを起動することです(5.2.2節)。compute capability 2.xのデバイスでは、デバイスは複数のカーネルを並行して実行できる(3.2.7.3節)ためアプリケーションはより柔軟性があり、その結果、アプリケーションがデバイスを一つの大きなカーネルではなく、いくつかのより小さいカーネル起動で満たすことも可能になります。これはCUDAストリームを使い行います(3.2.7.5節)。 L1キャッシュ compute capability 2.xのデバイスは、ローカルとグローバルメモリアクセスをキャッシュするために使われるL1/L2キャッシュ階層が付随しています。プログラマは、L1キャッシングに関する制御を持ちます。 同じオンチップメモリは、L1とシェアードメモリの両方に使われ、そのどの程度をL1対共有メモリにささげるかは、それぞれのカーネル呼び出しに対して設定可能です(G.4.1節)。 L1でのグローバルメモリキャッシングは、コンパイル時に無効化できます(G.4.2節)。 L1でのローカルメモリキャッシングは、無効化できません(5.3.2.2節)が、プログラマは、コンパイラがローカルメモリにおそらく配置する変数の量を制限すること(5.3.2.2節)や__baunch_bounds()__属性(B.17節)もしくは-maxrregcountコンパイラオプション経由でレジスタスピルを制御することでローカルメモリ利用を制御することができます。 与えられたカーネルに対し、L1でグローバルメモリキャッシング有りもしくは無しの16KBもしくは48KBのL1キャッシュとより多いもしくはより少ないローカルメモリ利用の最適組み合わせを見つけるため実験は推奨されます。多くのローカルメモリを使用する(例:レジスタスピル(5.3.2.2節)の) カーネルは48KBのL1キャッシュから恩恵を受けるかもしれません。 compute capability 1.xのデバイス上では、あるカーネルは、通常のグローバルメモリ読み込みよりも(キャッシュされた)テクスチャフェッチを使う際に高速化が達成できます (たとえば通常の読み込みが十分にコアレスしないとき)。アドレス計算もしくはテクスチャフィルタリングのようなほかの恩恵をテクスチャフェッチが与えないなら、compute capability 2.xのデバイスではこの最適化は、しかしながらグローバルメモリ読み込みはL1でキャッシュされ、L1キャッシュはテクスチャキャッシュよりも高いバンド幅を持つため、逆効果になります。 グローバルメモリ compute capability 1.xのデバイスでは、グローバルメモリアクセスは、半分のwarp単位で処理され、compute capability 2.xのデバイスでは、それらはwarp単位で処理さます。半分のwarpアクセス単位を仮定するカーネル起動設定を調整することで、したがって性能を向上するかもしれません。2次元のスレッドブロックは、例えば、グローバルメモリにアクセスする際単一のキャッシュラインをそれぞれのワープが指すようにするために、x次元が半分のワープサイズではなくワープサイズの倍数になるようにすべきです。 Tesla とQuadro製品群のFermiベースのGPU(例 Tesla C2050)は、ECCエラー訂正をサポートし、標準でECCは有効化されます。多くの科学アプリケーションのプロのアプリケーションに対する必要性の一方、ECCは削減されたピークメモリバンド幅になります。ECC有効化の状態では、グローバルメモリアクセスに対する実効ピークバンド幅は、約20%減ります(散在した書き込みにたいしてはより多いです)。もしECCが必要でないなら、nvidia-smiユーティリティを使い(もしくはMicrsoft Windowsシステムでコントロールパネル経由で)改善した性能のために無効化することができます。ECCオンまたはオフの切り替えは有効にするため再起動を必要とすることに注意してください。 シェアードメモリ compute capability 2.xのデバイスのマルチプロセッサは、48KBのシェアードメモリ(G.4.1節)を持つように設定することができ、それはcompute capability 1.xのデバイスよりも3倍多いです。シェアードメモリのサイズが性能の制限となるカーネルは、マルチプロセッサあたりの駐在するブロックの数を増やすことで、もしくはスレッドブロックあたりのシェアードメモリの量を増やし、それに応じてカーネル起動設定を調整することで、これから恩恵を受けます。 compute capability 1.xのデバイスでは、シェアードメモリは16バンクを持ち、アクセスは半分のwarp単位で処理されます。compute capability 2.xのデバイスでは、シェアードメモリは、32バンクを持ち、アクセスはwarp単位で処理されます(G.4.3節)。したがってcompute capability 2.xのデバイスでバンクコンフリクトは、warpの最初の半分に属するスレッドと同じwarpの後ろ半分に属するスレッドの間で起こり、シェアードメモリでのデータレイアウト(例 パディングされた配列)は、バンクコンフリクトを避けるために調整する必要があるかもしれません。 シェアードメモリのハードウェアは、compute capability 2.xのデバイスで複数のブロードキャストワードのサポートとスレッド毎に8ビット、16ビット、64ビット、128ビットのアクセスでより少ないバンクコンフリクトを生成するように改善されます。 コンスタントキャッシュ すべてのcompute capabilitのデバイスでサポートされるコンスタントメモリ空間(ここで、__constant__変数が与えれれている)に加え、compute capability 2.xのデバイスは、コンパイラがある状態ではコンスタントキャッシュ経由でいかなる変数をも読み込むために使われるLDU(LoaD Uniform)命令をサポートします(G.4.4節)。 32ビット整数乗算 compute capability 1.xのデバイスでは、32ビット整数乗算は、ネイティブにサポートされないために複数の命令を使い実装されます。24ビット整数乗算は__[u]mul24組み込み命令経由でネイティブにサポートされます。 compute capability 2.xのデバイスでは、しかしながら、32ビット整数乗算がネイティブにサポートされますが、24ビット整数乗算はそうではありません。したがい __[u]mul24は複数命令を使い実装され、利用すべきではありません(5.4.1節)。 IEEE 754-2008準拠 compute capability 2.xのデバイスは、特に単精度で、IEEE 754-2008浮動小数点標準からの逸脱がcompute capability 1.xのデバイスよりかなり少なくなります(G.2節)。 特に、compute capability 1.xのデバイスで加算と乗算は得てしてFMAD命令へ結合され、それはIEEE準拠ではありません。これに反し、compute capability 2.xのデバイスでそれらはFFMA命令へ結合され、それはIEEE準拠です。 デフォルトでnvccはIEEE準拠コードを生成しますが、compute capability 2.xのデバイスが以前のデバイスに対して生成されたコードに近いコードを生成するオプションを提供します。-flz=true(非正規化数はゼロにフラッシュされる)、-prec-div=false(より低精度の除算)、さらに-prec-sqrt=false(より低精度の平方根)。この方法でコンパイルされたコードは、デフォルトの設定でコンパイルされたコードより高いパフォーマンスを持つ傾向があります(5.4.1節)。 C++サポート compute capability 2.xのデバイスは、いくつかの制限があるC++クラスをサポートし、それはprogramming guideのD.6節で詳細に記述されています。 進歩した関数 compute capability 2.xのデバイスは追加の進歩した組み込み関数をサポートします。 別のメモリフェンス関数:__threadfence_system() (B.5節) __syncthreads()同期関数の発展形:__syncthreads_count()、__syncthreads_and()、と__syncthreads_or() (B.6節) サーフィス関数(B.9節) グローバルもしくはシェアードメモリでの32ビットワードの浮動小数点のアトミック加算操作 (B.11.1.1節) 別のwarp議決関数:__ballot() (B.12節) compute capability 2.xのデバイスでアトミック関数は以前のデバイスより高いスループットを持ちます。 参考文献 [ 1 ] NVIDIA’s Next Generation CUDA Compute Architecture Fermi http //www.nvidia.com/content/PDF/fermi_white_papers/NVIDIAFermiComputeArchitectureWhitepaper.pdf [ 2 ] NVIDIA CUDA C Programming Guide from CUDA Toolkit 3.2 [ 3 ] NVIDIA CUDA C Best Practices Guide from CUDA Toolkit 3.2 [ 4 ] NVIDIA CUDA Reference Manual from CUDA Toolkit 3.2 (本文の訳はこれで完了)
https://w.atwiki.jp/prjroman/pages/23.html
役割 監督 Bazz 最終的に判断に困った場合に落しどころを決める人。 みんながみんな納得するものを作ることは無理があるから、こういう人が必要。 (基本的に各自判断できることは判断をする。ジャッジすべき用件のみBazzが行う。) プランナー とんぬら プログラマ Bazz グラフィッカー(モデラー) α グラフィッカー(コンセプトアート) ちびちび テスター 全員 メンバー 人数 まだ3人。一応、これでプログラマー、プランナー、デザイナーと 最低限は揃ったことになる。が、まだコンセプトアートを描けるような、 絵描きさんがいないのがボトルネック。 Bazz 言いだしっぺ。某ゲーム会社でプログラムを打つ人。 AB型で自分の納得できないことは、とことん納得できない人。 とんぬら 某ゲーム会社で虎視眈々とプランナーの座を狙う、プランナー見習い。 ここ最近なかなか侮れなくなってきた。 α 某ゲーム会社での管理者。趣味はモデリングで、暇さえあれば ポリゴンをコネコネしているらしい。かなりのキレ者。
https://w.atwiki.jp/tmiya/pages/17.html
トップ チュートリアル和訳 6 Case classes and pattern matching 6 ケースクラスとパターンマッチング プログラムによく出てくるデータ構造の一つにツリーがあります。例えばインタプリタやコンパイラは通常、プログラムを内部的にツリーで表現しています。XML 文書はツリーです。ある種のコンテナは赤黒木のようなツリーに基づいています。 小さな電卓プログラムを通して、ツリーが Scala でどのように表現され操作されるのか見てみましょう。このプログラムの目的は、加法と整数定数と変数からなる非常に簡単な数式を操作することです。その例を2つ挙げると、1+2 や (x + x)+(7+ y) などです。 最初にそのような数式をどのように表現するか決めましょう。最も自然な方法はツリーです。ノードが演算(ここでは加法)で、リーフが値(ここでは定数か変数)です。 Java ではそういったツリーは、ツリーのための抽象スーパークラスと、ノードやリーフ毎に1つの具象サブクラスを用いて表現されるでしょう。関数型プログラミング言語では、同じ目的のために代数的データ型を用います。Scalaには、両者の中間的なものであるケースクラスがあります。それをどうやって私たちのツリーの型を定義するのに用いるかを示します。 abstract class Tree case class Sum(l Tree, r Tree) extends Tree case class Var(n String) extends Tree case class Const(v Int) extends Tree Sum, Var, Const クラスがケースクラスとして宣言されていることは、いくつかの点で普通のクラスとは違うということを意味しています。 それらのクラスのインスタンスを作るのにキーワード new は必須ではありません。(すなわち、new Const(5) の代わりに Const(5) と書けます。) コンストラクタのパラメータ用の getter 関数は自動的に定義されます。(すなわち、Const クラスのインスタンス c のコンストラクタのパラメータ v の値は、単に c.v と書けば取得できます。) メソッド equals と hashCode はデフォルトで定義され、それらは同一性ではなくインスタンスの構造に基づいています。 toString メソッドはデフォルトで定義され、値を「ソース形式」で表示します(例えば、式 x+1 の式のツリーは Sum(Var(x),Const(1)) と表示されます) これらのクラスのインスタンスは以下で見るようにパターンマッチングを通して分解されます 数式を表現するデータ型を定義したので、つぎにそれを操作する演算を定義しましょう。ある環境で式を評価する関数から始めることにします。環境の目的は変数に値を与えることです。例えば式 x+1 の評価を、変数 x を値 5 に関連づけるような環境 {x→5} の元で行うと、結果 6 を得ます。 ここで環境を表現する方法を見つける必要があります。もちろんハッシュ表のような連想データ構造を使うこともできますが、直接に関数を使うこともできます!環境はまさに、値を(変数)名と関連付ける関数に他なりません。上で述べた環境 {x→5} は Scala では下記のように簡単に書けます。 { case "x" = 5 } この書き方で、引数として文字列 "x" が与えられたなら整数 5 を返し、他の場合には例外で失敗させる関数を定義できます。 評価する関数を書く前に、環境の型に名前を付けましょう。もちろん、型 String = Int を環境のために使うこともできますが、この型に名前を付ければ、プログラムがシンプルになり将来の変更も容易になります。Scala では下記のように書けばよいのです。 type Environment = String = Int 以後、Environment 型は String から Int への関数の型の別名として使えます。 では評価する関数の定義を行いましょう。概念としてはとても簡単です。2つの式の和の値は単にそれぞれの式の値の和です。変数の値は環境から直接得られます。そして定数の値は定数自身です。Scala でこれを表現するのは同じぐらい簡単です。 def eval(t Tree, env Environment) Int = t match { case Sum(l, r) = eval(l, env) + eval(r, env) case Var(n) = env(n) case Const(v) = v } この評価関数はツリー t に対してパターンマッチングを実行します。直感的には上記の定義は明確なはずです。 まずツリー t が Sum であるかチェックし、もしそうなら左部分木を新しい変数 l に、右部分木を変数 r に束縛します。そして矢印に従って評価を進めます。矢印の左側のパターンによって束縛された変数 l と r を使用します。 もし最初のチェックが成功しなければ、すなわちツリーは Sum でなければ、続いて t は Var かチェックします。もしそうなら Var の含まれる名前を変数 n に束縛し、右辺の式を用います。 もし2番目のチェックにも失敗したなら、つまり t は Sum でも Var でもなければ、Const であるかチェックします。もしそうなら Const ノードに含まれる値を変数 v に束縛し、右辺へ進みます。 最後に、全てのチェックに失敗したなら、式のパターンマッチングの失敗を伝えるために例外が上げられます。ここで Treeのサブクラスが他に宣言されない限り、それは起きません。 ある値を一連のパターンに順に当てはめ、マッチしたら直ちにその値の様々なパーツを取り出して名前をつけ、名付けられたパーツを用いてコードを評価する、というパターンマッチングの基本的なアイデアを見てきました。 年期の入ったオブジェクト指向プログラマは、なぜ eval を Tree クラスとそのサブクラスのメソッドにしなかったのか、不思議に思うかもしれません。実はそのようにもできます。Scalaではケースクラスのメソッド定義は普通のクラスのようにできるからです。それゆえパターンマッチングとメソッドのどちらを使うかは趣味の問題ですが、拡張性にも密接に関係します。 メソッドを用いれば、新しい種類のノードを追加することは Tree のサブクラスを定義することで簡単に行えます。しかしツリーを操作する新しい演算を追加するのは、Treeの全てのサブクラスの修正が必要なため面倒です パターンマッチングを用いれば状況は逆転します。新しい種類のノードを追加するには、ツリーのパターンマッチングを行う全ての関数で、新しいノードを考慮するための修正が必要です。その一方で新しい演算を追加するのは簡単で、単に独立した関数を定義するだけです。 パターンマッチングをもっと調べるために、別の数式への演算である微分シンボルを定義してみましょう。読者はこの演算に関する下記の規則を覚えているでしょうか。 和の導関数は、導関数の和。 変数 v の導関数は、v が微分を行う変数なら 1 、さもなければ 0。 定数の微分は 0。 これらの規則はほとんど字句通り Scala のコードに変換でき、下記の定義を得ます: def derive(t Tree, v String) Tree = t match { case Sum(l, r) = Sum(derive(l, v), derive(r, v)) case Var(n) if (v == n) = Const(1) case _ = Const(0) } この関数ではパターンマッチングに関する新しい概念を2つ導入します。最初に、変数に関する case 式にはガード、すなわち if キーワードに続く式があります。ガードは、式が真でなければパターンマッチングを失敗させます。ここでは、微分される変数名が微分する変数 v と等しい場合のみ定数 1 を返すように使われています。2つめにここで使われているパターンマッチングの特徴は、_ で示されるワイルドカード、どんな値にもマッチするパターンで、値に名前をつける必要はありません。 パターンマッチングの能力を全て調べてはいませんが、この文書が長くなりすぎないようにここで止めておきましょう。上記2つの関数が実際の例でどう動くか見たいと思います。この目的のため、簡単な main 関数を書いて、式 (x + x)+(7+ y) に対する演算を幾つか行ってみましょう。最初に環境 {x→5, y→7} に対する値を計算し、次いで x と y とで微分した導関数を求めましょう。 def main(args Array[String]) { val exp Tree = Sum(Sum(Var("x"),Var("x")),Sum(Const(7),Var("y"))) val env Environment = { case "x" = 5 case "y" = 7 } println("Expression " + exp) println("Evaluation with x=5, y=7 " + eval(exp, env)) println("Derivative relative to x \n " + derive(exp, "x")) println("Derivative relative to y \n " + derive(exp, "y")) } プログラムを実行すると、期待した結果が得られます。 Expression Sum(Sum(Var(x),Var(x)),Sum(Const(7),Var(y))) Evaluation with x=5, y=7 24 Derivative relative to x Sum(Sum(Const(1),Const(1)),Sum(Const(0),Const(0))) Derivative relative to y Sum(Sum(Const(0),Const(0)),Sum(Const(0),Const(1))) 結果を見ると、導関数の結果はユーザに見せる前に簡略化すべきであることが判ります。パターンマッチングを用いて基本的な簡約関数を定義することは興味深い(しかし驚く程に巧妙な)問題です。読者の練習問題としておきます。 前ページ 目次 次ページ 最終的なプログラムを載せてもらえませんか? -- 名無しさん (2009-12-01 14 01 45) 名前 コメント