GoのSQLBoilerでDistinctを利用する方法とその問題点

Voicyアドベントカレンダー 23日目の記事です。

こんにちは!株式会社Voicyでバックエンドエンジニアをしているたーふーと申します。
簡単に自己紹介をさせていただくと、自分は今年の9月にVoicyに入社したので、まだ入社して3ヶ月ちょっとの新参者になります!

全然関係ないですが、クリスマス前の今皆さんいかがお過ごしでしょうか。
Voicyでは明日クリスマス会があるようなので、自分は楽しみにしている最中です!

では本題に戻りまして、、

今回はGoのSQLBoilerでDistinctを利用する方法とその問題点についてお話しできればと思います!

自分自身Goを実務で利用したのはVoicyに入社してからなので歴は浅いのですが、、
その中でSQLBoiler関連の情報が少ないように感じた経緯があり、今回この記事を書かせていただきます。

なので同じような方の参考になれば幸いです!もし興味があれば是非ご覧ください!!

続きを読む

EMの定義から考えてEM始めました

こんにちはエンジニアリングマネージャの山元です。

この記事はVoicyアドベントカレンダー 23日目の記事です。

最近社内の特にPMチームで自分の役職を説明している記事が増えていて、 確かにマネジメントって言語化しないとわからないよなあ〜と思って 影響されて自分も書き出してみたいと思いました。 ぜひプロダクトチームのみなさんの記事も見てください (文面真面目人間なので、キャッチーな文章かけて羨ましいです!)

PMの長のぶんたさんの記事

note.com

PMMのDさんの記事

note.com

この記事ではEM歴6ヶ月の自分が、「EMってなんだ?」から「こういうことやってるよ〜」となった思考のプロセスをつらつら書いています ぜひ以下のような人にぜひ!

  • EMになりたいエンジニア
  • EMのことを理解したい人
  • EMやっていて他社事例を知りたい人
続きを読む

パーソナリティダッシュボードを改善した話

自己紹介

こちらは Voicy Advent Calendar 2021 16日目の記事です。

初めまして、株式会社Voicyでデータアナリストをしている翔斗です。 Voicyでは、パーソナリティやリスナーが楽しく継続して発信・聴取するために行っている施策の分析や社員がより楽に正しく意思決定を行えるように現状の分析や行動のサポートを行なっています。

本日はVoicyがパーソナリティ向けに提供している分析用のダッシュボードを改善した話をしていきます。

続きを読む

GPGPUとOpenACCについて

はじめに

この記事はVoicyアドベントカレンダー17日目の記事です。

こんにちは、ミック ( @mickbare )です。 Voicyではバックエンドの開発を担当しています。

GPUを使った並列コンピューティングをGPGPUといいますが、最近OpenACCという新しい標準が出たので概要を紹介します。

並列コンピューティングの各種 標準について

OpenACCを紹介する前に、他の主要な標準やプラットフォームについてまとました。 登場の順序としては、大体、OpenMP -> CUDA -> OpenCL -> OpenACCです

OpenMP

共有メモリ・マルチスレッド型の並列アプリケーション開発をサポートするために標準化された並列コンピューティングのためのAPIソースコードにディレクティブを挿入することによって並列化を行います。 OpenMPはループの反復処理を自動的に複数のスレッドに分割して並列処理しますが、起動するスレッドの数や、どのようりスレッドに処理を振り分けるかはOpenMP処理系やプログラムの実行環境などの条件に依存します。 OpenMPに対応していない場合にはディレクティブは無視されるため、並列環境と非並列環境でほぼ同等のソースコード利用できることが利点です。

int kernel(char *src, size_t len) {
    // ディレクティブは #pragmaから始まる
    #pragma omp parallel for
    for (int i = 0; i < len; i++) {
        // 並列処理させたいプログラム
        result[i] = a[i]  * b[i];
    }
    return 0;
}

CUDA

NVIDIAが開発しているGPGPUのためのプラットフォーム nvccというLLVMベースの専用のコンパイラやライブラリなどが提供されています。 CUDA C/C++というC言語拡張で記述します。 NVIDIA製のGPUに最適化されていて、ハードウェア性能を最大限引き出せるようになっちえるがNVIDIA製のGPUでしか使えない制約があるのと記述自体が複雑なのが欠点です。

OpenCL

Appleによって提案、標準化団体のクロノスによって策定された、異種混合環境での並列プログラミングのオープンな標準規格とそのAPIOpenCL C/C++というC言語拡張で記述します。 組み込みシステム向けにはOpenCL Embedded Profileがあります。 CUDAがNVIDIA製のGPUしか対応しないのに対し、OpenCLAMDGPUにも対応していたり、GPU以外での並列処理もサポートするのが利点です。

OpanACCとは

並列コンピューティングための標準の一つ。 クレイ、CAPS、NVIDIA、PGIによって開発されており、世界各地で無料の布教活動を行うなどNVIDIAが本腰を入れて普及させようとしています。 位置付けとしては、CUDA、OpenCLをより標準化したものでOpenMPに近いです。

何が嬉しいのか???

OpenACCは、CUDAがサポートできる一部しか並列化をサポートしない代わりに記述が圧倒的に簡単です。 また、以前は性能差がシビアでしたが、現在は、最適化によってはCUDAよりも高速化できたりと、CUDAと遜色ない性能が出せたという報告が出ています。また、NVIDIAGPU以外にも対応しており、 FPGAにも対応したコンパイラも開発されています。

サンプル

OpenACCではOpenMPと同じくディレクティブを挿入して並列化します。 CUDAやOpenCLのような独立言語ではないので、既存のCPUコードも簡単にGPU化できる。

int kernel(char *src, size_t len) {
    // CPUでの演算対象の指定
    #pragma acc kernels
    # 各ループに対する指定
    #pragma acc loop independent
    for (int i = 0; i < len; i++) {
        // 並列処理させたいプログラム
        result[i] = a[i]  * b[i];
    }
    return 0;
}

終わりに

今からGPGPUを始めるならOpenACCが学習コストが低くて導入しやすいのでおすすめです。 OpenACCで並列プログラミングの勘所を掴んだのち、CUDAやOpenCLに進んでも良いと思います。 GPUによる並列化は機械学習ライブラリでも使用されるので、都度キャッチアップしていきたいですね。

次回は@d_saito2110さんです

Datadogのモニター設定をTerraformのImport機能を使ってコード化する方法

こちらは Voicy Advent Calendar 2021 15日目の記事です。

今年はAdvent Calendarの2本目を書くことになりました。前回は、エンジニアリングマネージャーからテックリードに戻ってみて役に立った3つの考え方を書きました。 この話の中で取り上げた中でTechnlogyManagementの仕事の中心で、最近の仕事ではDatadogの監視設定をTerraform化する作業をもくもくとしていたので、ちょっと便利だった機能をご紹介します。

続きを読む