お知らせ

  • ブログ

マルチコアプロセッサ

noimage

マルチコアプロセッサ

パソコンのCPU(プロセッサ)は面積あたりに多くの回路を作れるようになり、マルチコアプロセッサというものが当たり前になってきます。 現在であれば、スマートフォンのCPUがデュアルコアなどという用語で語られることもありますが、これは一つのプロセッサのチップが幾つかのプロセッサの集合したものであることを示しています。 Core iシリーズなどパソコン用のプロセッサもマルチコアで、Core i5で4コアなどもよく聞かれる言葉です。 コア数が多ければ、それだけ処理を複数実行できるのですが、コアが2個あれば2倍になるというわけでもなく、この効率を上げるためにはOSやアプリケーション側でマルチコアに最適なものを作らなければなりません。 現在のCore iシリーズはCPUとGPUという二つの種類のコアが混ざったもので、GPUはグラフィックプロセッサーと呼ばれているグラフィック処理を行うためのものです。 スマートフォンのプロセッサもCPUとGPUが混載されたSoCで、CPUとGPUはそれぞれ別の種類の計算が得意です。 CPUは汎用性が高く、様々な計算を場合に応じて実行するのに向いており、コンピュータやサーバー機器などで利用されているプロセッサのほとんどを占めています。 GPUは行列計算などが得意で、動画や音声の再生など、データを次々と読み込んで定型の処理をかけていくとCPUよりはるかに高速です。 音楽や動画の再生はスマートフォンなどでは重要視されるもので、省電力でありながらこれらをこなすGPUは重点的に強化されています。 またアプリケーションやOSが高性能なGPUがあることを前提に、行列計算はGPUに割り当てるという仕組みづくりが進んでいます。 二つのプロセッサの協調によって、従来のプロセッサより早いスピードで性能が向上していき、モバイル機器の進化を助けています。  

  • シスキュー技術部

Java備忘録① ~ファイル入出力と文字コード~

noimage

Java備忘録① ~ファイル入出力と文字コード~

「FileWriter」というテキストをファイルに書き出すクラスがあります。 Java初心者の僕は、なんとな~くこの「FileWriter」を使っていました。 それで問題なく動いていたからです。 が・・・。 この「FileWriter」、出力するファイルの文字コードセット指定ができないんですね~。 というか、OSのデフォルトのエンコード方式で自動変換されてしまいます。 文字コードを意識しないでいいという点は、一見便利なようにも思えますが、 かえって問題を引き起こす原因にもなりかねませんな~。 なので、普段から文字コードを意識してコーディングする方がよさそうですね。 というわけで、文字コードを指定する場合は、 「FileWriter」の代わりに「OutputStreamWriter」を使用するといいでしょう。 [java] // FileOutputStreamオブジェクト生成(出力ファイルの指定) FileOutputStream fo = new FileOutputStream("file.txt"); // OutputStreamWriterオブジェクト生成(文字コードの指定) OutputStreamWriter ow = new OutputStreamWriter(fo, "UTF-8"); // 書き出す内容をセット ow.write("Hello Work!!"); // ストリームの解放 ow.close(); fo.close(); [/java] こんな感じでしょうか。 ちなみに、「FileWriter」と同じようにファイル読み込み手続きを簡略化した 「FileReader」というクラスも文字コードが指定できません。 代わりに「InputStreamWriter」を使って云々かんぬんする必要があるワケですが・・・。 ま、便利なのも考えモノですね~、という初心者の感想ですです。 というわけで、今回はこれにて失礼。

  • 超科学戦隊オレ一人

JavaでByRef

noimage

JavaでByRef

JavaでByRef ByRef・・・つまり参照渡し。 要は、あるメソッドに対し、パラメータとして渡しつつも、 その値を変更したいって場合の話よ(o´・∀・)y~ Javaにはこれがない。 結論からいうと、配列とかコレクション型を使うと、これに似たことができるって話よ。 下の方にサンプルを載せておきます。 .NETばっかりやってると、 あまりにも至れり尽くせりなので、「ほえ~」てな気分で、 なーも考えないでポコポコ作ってしまえる場面がいくつかあって、 そのひとつが、ByRefだと思ふ。 久しぶりにJava触って、ByRefしたいときがあったので、それをメモる。 そういえば、JavaにはByRefなんてねーわ!ちゅう話です。 そうです。ByRefなんて、そもそも、普通の、プリミティブな言語には、ねーのです。 .NET Framework様は、お便利なので、ByRefがあるのです。そーいうことです。 そもそも、そんなお便利なものがあること自体、どうか、と思い始めた。 つまり、ある関数に対し、渡したはずのパラメータの値を、関数自身が変えやがるってことです。 よう考えたら、これは、恐ろしいことです。 たとえば、こういうことです。 親が、アホの息子に、1000円札を渡して、お使いに行かせたら、 アホの息子は5万円のレアなトレカを買ってきたよ。むろん、支払いは親のカードでな! くらいの恐ろしさです。 わかるな(o´・∀・)y~ でも、まぁ、それが必要なときもあるわけよ。 JavaでByRefしたいときもあるわけよ。 配列の要素に対しては、ByRef的な動きが実現できる。 以下、サンポォ(sample) ---------------------------------------------------------- /** * 親の金を、親に黙って勝手に使ったりしない一般的なガキのプログラム */ publis static void main(String[] args) { // プリミティブなint型変数i     int i=0; // ガキに渡す前     System.out.println(“金=” + i); // NotByRefというガキに、iという小遣いを渡してみる     NotByRef(i); // ガキは小遣いを変更していない件     System.out.println(“金=” + i); } // パラメータiを勝手に変更しそうでしない一般的なガキ private static void NotByRef(int i) { // iを変更してみるものの…実はこれは呼び出し元では変更されない     i += 1; } ---------------------------------------------------------- ---------------------------------------------------------- /** * 親の金を勝手に変更しくさるクソガキのサンプルプログラム */ publis static void main(String[] args) { // 配列変数i     int[] i = new int[1]; // iの0番目を0円で初期化     i[0] = 0; // ガキに渡す前     System.out.println(“金=” + i[0]); // メソッドByRefというクソガキに、iという小遣いを渡してみる     ByRef(i); // ガキによって小遣いが変更されている件     System.out.println(“金=” + i[0]); } // パラメータiを勝手に変更するクソガキ private static void ByRef(int[] i) { // 親にもろた金を自在に操る     i[0] += 1; } ---------------------------------------------------------- というわけで、配列とかを渡してやると、ガキはこの内容を変更しまくり(o´・∀・)y~ へー。 まったくどうでもええわ。 オレがやりたいのは、こんな作業ではないので、 こんなことを改めて知ったところで、まったくモチベーションはあがらんよ。 そうだ、会社を興そう。 以上。