2018/01/22

[BOINC] GPUプロジェクトのGPU使用率とメモリ使用率

はじめに

BOINCでは数値計算にグラフィックボード(GPU)を使用できる。
ただ、プロジェクトによってはGPUの使用率が低かったり、GPUメモリの使用量が多く処理が遅くなることがあるため、各プロジェクトの大雑把なGPU使用率、メモリ使用量をまとめてみた。

BOINCでグラフィックボードを買うときの参考にどうぞ。

TechPowerUp GPU-Z

GPU使用率、メモリ使用量の測定にはTechPowerUp GPU-Zというソフトを使用。



環境

Windows 7 64bit
CPU:Intel Core i7 6700K + Intel HD Graphics 530
Memory:16 GB DDR4
GPU:Radeon RX 480 (4GB)

Radeon RX 480 (4GB)の場合

プロジェクト名タスク、アプリケーション名GPU Load (%)Memory Usage(Dedicated + Dynamic) (MB)
PrimeGridAP27 Search v2.02 (opencl_ati_AP27)971723+215
Collatz ConjectureCollatz Sieve 1.21981006+291
MilkyWay@homeMilkyWay@Home 1.46 (opencl_ati_101)74717+319

Intel HD Graphics 530の場合

プロジェクト名タスク、アプリケーション名GPU Load (%)Memory Usage (MB)
SETI@homeSETI@hime v8 8.2095266

2018/01/21

[Java] Google Cloud ライブラリで例外 NoSuchMethodError が発生する問題

Google Cloud StorageのJavaライブラリを使用した時に、以下の例外が発生した際の対処法メモ

発生した例外
Caused by: java.lang.NoSuchMethodError: com.google.api.gax.core.GaxProperties.getLibraryVersion(Ljava/lang/Class;)Ljava/lang/String

MavenでCloud StorageとCloud Loggingを入れていると実行時に例外が発生する

入れていたライブラリとバージョン
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-storage</artifactId>
<version>1.15.0</version>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-logging</artifactId>
<version>1.15.0</version>

調べてみるとStorageとLoggingで使用しているgaxというライブラリのバージョンが異なっており、それが原因でエラーが発生したようだ。

仮対処として使用していないLoggingのライブラリを削除した所、例外は発生しなくなった。


参考
java.lang.ClassNotFoundException: com.google.api.gax.rpc.ClientSettings when using Firestore
https://github.com/GoogleCloudPlatform/google-cloud-java/issues/2496

2018/01/09

Google Cloud Datastore の GQL Query で Entity Key の範囲検索

以下の通り

SELECT * WHERE __key__>=KEY(kind_name, "20180101") AND  __key__<KEY(kind_name, "20180201")

Kind(種類)の文字が「kind_name」の場合、
キーが 20180101* から 20180201* までのエンティティの一覧を返す。

2017/10/14

StatusRuntimeException UNAVAILABLE の例外対処

Google Cloud Platform の Cloud Pub/Sub をJavaで動かそうとしたら、例外が出て動かなかった。以下にその対処法を書きます

使用したライブラリ
Google Cloud Java Client for Pub/Sub
https://github.com/GoogleCloudPlatform/google-cloud-java/tree/master/google-cloud-pubsub

発生した例外

Exception in thread "main" java.util.concurrent.ExecutionException: io.grpc.StatusRuntimeException: UNAVAILABLE
        at com.google.common.util.concurrent.AbstractFuture.getDoneValue(AbstractFuture.java:500)
        at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:479)
        at com.google.common.util.concurrent.AbstractFuture$TrustedFuture.get(AbstractFuture.java:76)
        at com.google.common.util.concurrent.ForwardingFuture.get(ForwardingFuture.java:62)
        at rkserver.BoincBigDataMain.publishMessages(BoincBigDataMain.java:51)
        at rkserver.BoincBigDataMain.main(BoincBigDataMain.java:77)
Caused by: io.grpc.StatusRuntimeException: UNAVAILABLE
        at io.grpc.Status.asRuntimeException(Status.java:526)
        at io.grpc.stub.ClientCalls$UnaryStreamToFuture.onClose(ClientCalls.java:433)
        at io.grpc.internal.ClientCallImpl.closeObserver(ClientCallImpl.java:422)
        at io.grpc.internal.ClientCallImpl.access$300(ClientCallImpl.java:61)
        at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl.close(ClientCallImpl.java:504)
        at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl.access$600(ClientCallImpl.java:425)
        at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInContext(ClientCallImpl.java:536)
        at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)
        at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:102)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
Caused by: javax.net.ssl.SSLHandshakeException: General OpenSslEngine problem
        at io.netty.handler.ssl.ReferenceCountedOpenSslContext$AbstractCertificateVerifier.verify(ReferenceCountedOpenSslContext.java:647)
        at io.netty.internal.tcnative.SSL.readFromSSL(Native Method)
        at io.netty.handler.ssl.ReferenceCountedOpenSslEngine.readPlaintextData(ReferenceCountedOpenSslEngine.java:481)
        at io.netty.handler.ssl.ReferenceCountedOpenSslEngine.unwrap(ReferenceCountedOpenSslEngine.java:1019)
        at io.netty.handler.ssl.ReferenceCountedOpenSslEngine.unwrap(ReferenceCountedOpenSslEngine.java:1126)
        at io.netty.handler.ssl.SslHandler$SslEngineType$1.unwrap(SslHandler.java:210)
        at io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1215)
        at io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1127)
        at io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1162)
        at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:489)
        at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:428)
        at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:265)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:340)
        at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1342)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:362)
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:348)
        at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:934)
        at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:134)
        at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:645)
        at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:580)
        at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:497)
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:459)
        at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:858)
        at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:138)
        ... 1 more
Caused by: sun.security.validator.ValidatorException: PKIX path validation failed: java.security.cert.CertPathValidatorException: algorithm constraints check failed
        at sun.security.validator.PKIXValidator.doValidate(PKIXValidator.java:352)
        at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:249)
        at sun.security.validator.Validator.validate(Validator.java:260)
        at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:324)
        at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:281)
        at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:136)
        at io.netty.handler.ssl.ReferenceCountedOpenSslClientContext$ExtendedTrustManagerVerifyCallback.verify(ReferenceCountedOpenSslClientContext.java:221)
        at io.netty.handler.ssl.ReferenceCountedOpenSslContext$AbstractCertificateVerifier.verify(ReferenceCountedOpenSslContext.java:643)
        ... 26 more
Caused by: java.security.cert.CertPathValidatorException: algorithm constraints check failed
        at sun.security.provider.certpath.PKIXMasterCertPathValidator.validate(PKIXMasterCertPathValidator.java:135)
        at sun.security.provider.certpath.PKIXCertPathValidator.validate(PKIXCertPathValidator.java:219)
        at sun.security.provider.certpath.PKIXCertPathValidator.validate(PKIXCertPathValidator.java:140)
        at sun.security.provider.certpath.PKIXCertPathValidator.engineValidate(PKIXCertPathValidator.java:79)
        at java.security.cert.CertPathValidator.validate(CertPathValidator.java:292)
        at sun.security.validator.PKIXValidator.doValidate(PKIXValidator.java:347)
        ... 33 more


環境

開発環境と実行環境は別です

開発環境
Windows 7 64bit
eclipse 4.6.1
com.google.cloud  google-cloud-pubsub  0.25.0-beta
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

実行環境
CentOS 7
OpenJDK Runtime Environment (build 1.8.0_65-b17)
OpenJDK 64-Bit Server VM (build 25.65-b01, mixed mode)


原因と対処法

実はWindowsのJava(TM) SE Runtime Environment環境だと問題なく動く。
CentOS 7のOpenJDK環境でのみエラーが発生する。

yum update java を実行してOpenJDKをアップデート

アップデート後のopenJDK
OpenJDK Runtime Environment (build 1.8.0_144-b01)
OpenJDK 64-Bit Server VM (build 25.144-b01, mixed mode)

OpenJDKをアップデートしたところ、エラーが出なくなった。

結論

ソフトウェアは最新の状態にしましょう



2017/04/11

centos7にBOINCをインストール【更新:2017年4月】

yumを使ってBOINCをインストールできるようになっていたのでその方法をまとめました。

BOINC client のインストール

boinc-clientをインストールできるか確認
$ yum search boinc
.
.
.
============= N/S matched: boinc ============= 
boinc-client.x86_64 : The BOINC client core
boinc-client-devel.x86_64 : Development files for boinc-client
boinc-client-doc.noarch : Documentation files for boinc-client
boinc-client-static.x86_64 : Static libraries for boinc-client
boinc-manager.x86_64 : GUI to control and monitor boinc-client

  Name and summary matches only, use "search all" for everything.

boinc-clientをインストール
sudo yum install boinc-client

環境設定

BOINC用ユーザーを作成
sudo useradd boinc_user -m
sudo passwd boinc_user
(パスワードを2回入力)

ユーザboinc_userにログイン
su - boinc_user

作業用ディレクトリ(BOINC Data directory)を作成
mkdir /home/boinc_user/boinc_work

BOINCをデーモンかつ、作業用ディレクトリを指定して起動(ユーザ boinc_user で起動)
「--allow_remote_gui_rpc」はboinccmdからの制御やBOINC Manager からのリモートアクセスを有効化するために必要
boinc --daemon --dir  /home/boinc_user/boinc_work --allow_remote_gui_rpc

プロジェクトの追加

2通り記述するので好きな方を選択してください

BOINC Manager からのリモートアクセス登録

windowsマシンのBOINC Managerからリモート設定
初期設定を行えばBOINC Managerから同じ操作でプロジェクトを追加できるため楽

リモートアクセス パスワード

boinc_workにあるgui_rpc_auth.cfgのパスワードを調べる。リモートPCからのアクセスでこのパスワードが必要になる。
cat /home/boinc_user/boinc_work/gui_rpc_auth.cfg

ポート開放

TCP/31416 のポートを開放
sudo firewall-cmd --permanent --add-port=31416/tcp
sudo firewall-cmd --reload

コマンドラインからの登録


アカウントキーの入手

プロジェクトの登録にはアカウントキーが必要になるため、以下のコマンドを入力してアカウントキーを入手

登録済みの場合
boinccmd --passwd (gui_rpc_auth.cfgパスワード) --lookup_account (プロジェクトURL) (メールアドレス) (パスワード)
$ boinccmd --passwd (gui_rpc_auth.cfgパスワード) --lookup_account (プロジェクトURL) (メールアドレス) (パスワード)
status: Success
poll status: operation in progress
poll status: operation in progress
.
.
.
poll status: operation in progress
account key: (***アカウントキー***)

新規登録
boinccmd --passwd (gui_rpc_auth.cfgパスワード) --create_account (プロジェクトURL) (メールアドレス) (パスワード)
$ boinccmd --passwd (gui_rpc_auth.cfgパスワード) --create_account (プロジェクトURL) (メールアドレス) (パスワード)
status: Success
poll status: operation in progress
poll status: operation in progress
.
.
.
poll status: operation in progress
account key: (***アカウントキー***)

プロジェクト登録

boinccmd --passwd (gui_rpc_auth.cfgパスワード) --project_attach (プロジェクトURL) (***アカウントキー***)



BOINC clientの終了

boinccmd --passwd (gui_rpc_auth.cfgのパスワード) --quit

centos起動時にBOINCを起動させる

systemdを使う。

rootや管理者のアカウントにログインし以下のディレクトリに移動
cd /etc/systemd/system/

viを使ってboinc.serviceを作成して開く
sudo vi boinc.service

以下のテキストを書き込む
[Unit]
Description=BOINC

[Service]
User=boinc_user
ExecStart=/usr/bin/boinc --dir /home/boinc_user/boinc_work --allow_remote_gui_rpc
ExecStop=/usr/bin/boinccmd  --passwd (gui_rpc_auth.cfgのパスワード) --quit
Restart=always
RestartSec=30

[Install]
WantedBy=multi-user.target

設定ファイルを読み込み認識できているか確認
sudo systemctl daemon-reload
sudo systemctl list-unit-files  | grep boinc
boinc-client.service    disabled
boinc.service             disabled

boinc-client.serviceはBOINCインストール時に自動作成された設定ファイル。設定ファイルの場所は「/usr/lib/systemd/system/boinc-client.service」

BOINCを起動
sudo systemctl start boinc.service
BOINCを停止
sudo systemctl stop boinc.service

「top」コマンドなどでboincプロセスが起動、停止をしているかを確認
確認できたらboinc.serviceの有効化を行う
sudo systemctl start boinc.service

2017/04/10

Bitcoin Utopiaメモ:BOINC

Bitcoin Utopiaプロジェクトのメモ。
間違っていたらコメントやtwitterで教えてください。
2017年 4月
アプリケーションが ASIC のみととなったため、CPU、GPUではクレジット入手不可となりました



Bitcoin Utopia
http://www.bitcoinutopia.net/bitcoinutopia/

ビットコイン - Wikipedia
https://ja.wikipedia.org/wiki/%E3%83%93%E3%83%83%E3%83%88%E3%82%B3%E3%82%A4%E3%83%B3

プロジェクト概要


  • 仮想通貨の一つであるビットコインをマイニングで集め、得た利益を科学系関係のプロジェクトに寄付する寄付系プロジェクトである。
  • 寄付を行うキャンペーンはユーザーが作成する。
  • ビットコインを所持している場合は直接、対応するキャンペーンに寄付することができる。

キャンペーン一覧

2017/04/09

Steam 「DiRT 3 Complete Edition」が起動しない

レースゲームをやりたいと思い、昔Steamで買った 「DiRT 3 Complete Edition」 をインストールたが起動しなかったため、この対処法のメモ

原因は Steam インストールで DiRT3 の起動に必要な「OpenAL」というオーディオ関係のソフト? がインストールされないのが原因。

ここから「OpenAL」をダウンロードして、インストールすれば良い
OpenAL: Cross Platform 3D Audio