並列処理とFortran
https://qiita.com/kaizen_nagoya/items/f797ed9f45b979cbbf52
でソースコード付きで説明する版を検討。
ChatGPT
FORTRANの並列処理について詳しくご紹介ください。GPU用のライブラリを含めて。
ChatGPT:
もちろんです。FORTRAN(特に科学技術計算や数値解析分野で長く使われてきた言語)の並列処理は、CPU向け・GPU向けの両方で発展してきました。以下に体系的に詳しくまとめます。
- FORTRANにおける並列処理の基本
FORTRANは長い歴史があるため、並列処理も段階的に進化しています。
1.1 CPU向け並列処理
(a) OpenMP
概要: 共有メモリ型並列処理用API。ループ並列化やタスク並列化が容易。
書き方例:
program omp_example
use omp_lib
implicit none
integer :: i
real :: a(1000), b(1000), c(1000)
! 配列初期化
a = 1.0
b = 2.0
!$omp parallel do
do i = 1, 1000
c(i) = a(i) + b(i)
end do
!$omp end parallel do
print *, "c(1)=", c(1)
end program omp_example
特徴:
!$omp parallel doで並列ループを簡単に作成可能
スレッド数を指定可能(omp_set_num_threads(n))
(b) MPI (Message Passing Interface)
概要: 分散メモリ型並列処理向け。複数ノード間でデータ通信を行う。
書き方例:
program mpi_example
use mpi
implicit none
integer :: ierr, rank, size
call MPI_Init(ierr)
call MPI_Comm_rank(MPI_COMM_WORLD, rank, ierr)
call MPI_Comm_size(MPI_COMM_WORLD, size, ierr)
print *, "Hello from rank", rank, "of", size
call MPI_Finalize(ierr)
end program mpi_example
特徴:
HPCクラスタでの大規模計算に必須
CPUコアやノード間通信の最適化が可能
1.2 GPU向け並列処理
近年、科学技術計算ではGPU利用が必須になっています。FORTRANもGPU向けライブラリが整備されています。
(a) CUDA Fortran
概要: NVIDIAのGPU用並列処理。GPUカーネルをFORTRANで記述できる。
書き方例:
program cuda_example
use cudafor
implicit none
real, device :: d_a(1000), d_b(1000), d_c(1000)
integer :: i
! GPU上で配列を初期化・計算
d_a = 1.0
d_b = 2.0
call vector_add<<<10,100>>>(d_a, d_b, d_c, 1000)
contains
attributes(global) subroutine vector_add(a, b, c, n)
real, device :: a(n), b(n), c(n)
integer, value :: n
integer :: idx
idx = threadIdx%x + (blockIdx%x-1)*blockDim%x
if (idx <= n) c(idx) = a(idx) + b(idx)
end subroutine vector_add
end program cuda_example
特徴:
FORTRANで直接GPUカーネルを記述可能
NVIDIA GPUに特化
(b) OpenACC
概要: GPUアクセラレーションのためのディレクティブ型API。OpenMPに似た書き方。
書き方例:
program openacc_example
implicit none
real :: a(1000), b(1000), c(1000)
integer :: i
a = 1.0
b = 2.0
!$acc parallel loop
do i = 1, 1000
c(i) = a(i) + b(i)
end do
!$acc end parallel loop
print *, "c(1)=", c(1)
end program openacc_example
特徴:
GPUを自動認識して最適化
CUDAに依存せず、NVIDIA/AMDなど複数GPUに対応
(c) Coarray Fortran
概要: FORTRAN 2008以降の標準機能。分散メモリ並列を言語レベルでサポート。
書き方例:
program coarray_example
implicit none
real :: a[*]
integer :: me
me = this_image()
a[me] = me * 1.0
sync all
if (me == 1) then
print *, "All images:", a[:]
end if
end program coarray_example
特徴:
MPIなしで分散計算が可能
「イメージ」と呼ばれる概念でノードやコアを扱う
'2. 代表的なFORTRAN用GPUライブラリ
ライブラリ ターゲット 特徴
CUDA Fortran NVIDIA GPU GPUカーネルを直接FORTRANで記述可能
OpenACC NVIDIA/AMD GPU ディレクティブでループや配列演算をGPU化
cuBLAS / cuFFT (Fortranバインディング) NVIDIA GPU BLAS・FFTの高速GPU計算
PGI/LLVM Fortran GPU/CPU コンパイラにOpenACC対応、CUDAコード生成
MAGMA GPU 高速線形代数ライブラリ(Fortran呼び出し可能)
'3. 並列化戦略の選択
規模 技術
単一マシン・共有メモリ OpenMP, OpenACC
分散メモリ・クラスタ MPI, Coarray Fortran
GPUアクセラレーション CUDA Fortran, OpenACC, cuBLAS/cuFFT
ポイント:
FORTRANは数値計算に強く、配列演算や線形代数をGPU化すると大きな加速が可能
OpenACCはコードの書き換えが少なくGPU化可能
CUDA Fortranはより低レベルで高速化できるが、GPUに依存
もしご希望であれば、CPU+GPU両対応のFORTRANプログラムの具体例を作成して、OpenMPとOpenACCの併用まで解説することもできます。
作ってほしいですか?
はい。
ChatGPT:
では、CPUとGPUの両方に対応したFORTRANプログラムの例を示します。
ここでは OpenMP(CPUマルチスレッド) + OpenACC(GPU) を使った配列加算の例です。
CPU+GPU対応 FORTRAN例
program cpu_gpu_example
implicit none
integer, parameter :: n = 1000000
real, allocatable :: a(:), b(:), c(:)
integer :: i
! 配列の動的確保
allocate(a(n), b(n), c(n))
! 配列初期化
!$omp parallel do
do i = 1, n
a(i) = real(i)
b(i) = real(2*i)
end do
! CPU並列処理(OpenMP)
!$omp parallel do
do i = 1, n
c(i) = a(i) + b(i)
end do
!$omp end parallel do
print *, "CPU c(1..5) =", c(1:5)
! GPU並列処理(OpenACC)
!$acc data copyin(a,b), copyout(c)
!$acc parallel loop
do i = 1, n
c(i) = a(i) + b(i)
end do
!$acc end parallel loop
!$acc end data
print *, "GPU c(1..5) =", c(1:5)
deallocate(a,b,c)
end program cpu_gpu_example
解説
配列の初期化
!$omp parallel do を使いCPUのマルチスレッドで高速化。
CPUでの計算
同じループにOpenMPを使い並列化。
スレッド数は環境変数 OMP_NUM_THREADS で制御可能。
GPUでの計算
!$acc data copyin(a,b), copyout(c) でデータをGPUに転送。
!$acc parallel loop でループをGPU上で並列実行。
OpenACCが自動的にブロックとスレッドを最適化。
結果確認
CPU・GPUの両方で配列加算が正しく動作することを確認。
ポイント
OpenMPとOpenACCを同一コードで併用可能。
!$omp と !$acc はディレクティブなので元のFORTRANコードの構造をほとんど変えずに並列化できる。
大規模配列計算や科学技術計算では、CPUマルチスレッドで初期化+GPUで演算の組み合わせがよく使われる。
希望であれば、このコードを CUDA FortranでのGPU直接カーネル版 に書き換えて、より高速にする例も作れます。
作ってほしいですか?
はい。
ChatGPT:
では、先ほどのCPU+GPU対応プログラムを CUDA Fortran を使ったGPU直接カーネル版に書き換えます。
CPUによる初期化はそのままOpenMPで行い、GPUでの配列加算をCUDAカーネルで実行する例です。
CUDA Fortran 版(GPU直接カーネル)
program cuda_fortran_example
use cudafor
implicit none
integer, parameter :: n = 1000000
real, allocatable, device :: d_a(:), d_b(:), d_c(:)
real, allocatable :: h_a(:), h_b(:), h_c(:)
integer :: i
! ホスト配列の確保
allocate(h_a(n), h_b(n), h_c(n))
! CPUでの配列初期化(OpenMP使用)
!$omp parallel do
do i = 1, n
h_a(i) = real(i)
h_b(i) = real(2*i)
end do
! デバイス配列の確保
allocate(d_a(n), d_b(n), d_c(n))
! ホスト -> デバイス転送
d_a = h_a
d_b = h_b
! GPUカーネル起動
call vector_add<<<(n+255)/256,256>>>(d_a, d_b, d_c, n)
! デバイス -> ホスト転送
h_c = d_c
print *, "CUDA GPU c(1..5) =", h_c(1:5)
! 配列解放
deallocate(h_a,h_b,h_c)
deallocate(d_a,d_b,d_c)
contains
attributes(global) subroutine vector_add(a, b, c, n)
real, device :: a(n), b(n), c(n)
integer, value :: n
integer :: idx
idx = threadIdx%x + (blockIdx%x-1) * blockDim%x
if (idx <= n) c(idx) = a(idx) + b(idx)
end subroutine vector_add
end program cuda_fortran_example
解説
ホスト配列とデバイス配列
h_a, h_b, h_c はCPU上の配列
d_a, d_b, d_c はGPU上の配列(device 属性付き)
データ転送
CPU → GPU: d_a = h_a のようにコピー
GPU → CPU: h_c = d_c で結果を取得
GPUカーネル
attributes(global) でGPUカーネル関数を定義
<<<(n+255)/256,256>>> はスレッドブロック数とスレッド数を指定
idx = threadIdx%x + (blockIdx%x-1) * blockDim%x で各スレッドの配列インデックスを計算
利点
OpenACCより低レベルでGPUリソースを直接制御可能
大規模な配列計算や科学技術計算で最大限の性能が出せる
注意点
CUDA Fortranは NVIDIA GPU専用。
コンパイラは PGI/NVIDIA HPC SDK Fortran が必要。
カーネル内では配列境界チェックを自分で行う必要がある。
CPU初期化はOpenMPで高速化可能。GPUでの大規模計算と組み合わせると効率的。
もし希望であれば、CPU OpenMP+GPU CUDA Fortranの両方を一つのプログラムで切り替え可能にして、性能比較できるバージョン も作れます。
作りますか?
はい。
ChatGPT:
では、CPU(OpenMP)+GPU(CUDA Fortran)両対応プログラムで、実行時に切り替え可能かつ性能比較できるサンプルを作ります。
CPU/GPU切り替え対応 FORTRANプログラム
program cpu_gpu_switch
use cudafor
implicit none
integer, parameter :: n = 1000000
real, allocatable :: h_a(:), h_b(:), h_c(:)
real, allocatable, device :: d_a(:), d_b(:), d_c(:)
integer :: i
logical :: use_gpu
! 切り替えフラグ
print *, "Use GPU? (1=Yes, 0=No)"
read(*,*) use_gpu
! ホスト配列の確保
allocate(h_a(n), h_b(n), h_c(n))
! CPUで配列初期化(OpenMP)
!$omp parallel do
do i = 1, n
h_a(i) = real(i)
h_b(i) = real(2*i)
end do
if (use_gpu) then
! ---------------------------
! GPU計算 (CUDA Fortran)
! ---------------------------
allocate(d_a(n), d_b(n), d_c(n))
d_a = h_a
d_b = h_b
call vector_add<<<(n+255)/256,256>>>(d_a, d_b, d_c, n)
h_c = d_c
deallocate(d_a,d_b,d_c)
print *, "CUDA GPU result c(1..5) =", h_c(1:5)
else
! ---------------------------
! CPU計算 (OpenMP)
! ---------------------------
!$omp parallel do
do i = 1, n
h_c(i) = h_a(i) + h_b(i)
end do
print *, "CPU OpenMP result c(1..5) =", h_c(1:5)
end if
deallocate(h_a,h_b,h_c)
contains
! GPUカーネル
attributes(global) subroutine vector_add(a, b, c, n)
real, device :: a(n), b(n), c(n)
integer, value :: n
integer :: idx
idx = threadIdx%x + (blockIdx%x-1)*blockDim%x
if (idx <= n) c(idx) = a(idx) + b(idx)
end subroutine vector_add
end program cpu_gpu_switch
特徴・解説
実行時に切り替え
use_gpu を入力して CPU または GPU を選択可能。
CPU側
OpenMPを使ってループを並列化。
GPU側
CUDAカーネルで配列加算。
データ転送(CPU→GPU、GPU→CPU)を自動で行う。
性能比較
配列サイズ n を大きくすると GPU が優位。
小規模配列では CPU + OpenMP の方がオーバーヘッド少なく高速な場合もある。
💡 ポイント
OpenMPとCUDA Fortranを同一ソースで管理可能。
HPCや科学技術計算ではこの形式で CPU/GPU を切り替えながらベンチマークを取るのが一般的。
必要に応じて、OpenACCに書き換えてGPU対応コードをより簡単にすることも可能。
希望であれば、このプログラムに 簡単な性能計測(経過時間測定) を追加して、CPUとGPUの速度差を表示するバージョンも作れます。
作りますか?
はい。
ChatGPT:
では、先ほどの CPU/GPU切り替え対応プログラム に、簡単な 性能計測(経過時間測定) を追加します。
CPU(OpenMP)もGPU(CUDA Fortran)も、処理時間を計測して表示できるようにします。
CPU/GPU切り替え+性能測定版 FORTRANプログラム
program cpu_gpu_benchmark
use cudafor
use omp_lib
implicit none
integer, parameter :: n = 1000000
real, allocatable :: h_a(:), h_b(:), h_c(:)
real, allocatable, device :: d_a(:), d_b(:), d_c(:)
integer :: i
logical :: use_gpu
real :: t_start, t_end
! 実行デバイスの選択
print *, "Use GPU? (1=Yes, 0=No)"
read(*,*) use_gpu
! ホスト配列の確保
allocate(h_a(n), h_b(n), h_c(n))
! CPUで配列初期化(OpenMPで並列)
!$omp parallel do
do i = 1, n
h_a(i) = real(i)
h_b(i) = real(2*i)
end do
if (use_gpu) then
! ---------------------------
! GPU計算 (CUDA Fortran)
! ---------------------------
allocate(d_a(n), d_b(n), d_c(n))
d_a = h_a
d_b = h_b
t_start = omp_get_wtime()
call vector_add<<<(n+255)/256,256>>>(d_a, d_b, d_c, n)
call cudaDeviceSynchronize() ! GPU計算完了を待つ
t_end = omp_get_wtime()
h_c = d_c
deallocate(d_a,d_b,d_c)
print *, "CUDA GPU result c(1..5) =", h_c(1:5)
print *, "GPU execution time (sec) =", t_end - t_start
else
! ---------------------------
! CPU計算 (OpenMP)
! ---------------------------
t_start = omp_get_wtime()
!$omp parallel do
do i = 1, n
h_c(i) = h_a(i) + h_b(i)
end do
t_end = omp_get_wtime()
print *, "CPU OpenMP result c(1..5) =", h_c(1:5)
print *, "CPU execution time (sec) =", t_end - t_start
end if
deallocate(h_a,h_b,h_c)
contains
! GPUカーネル
attributes(global) subroutine vector_add(a, b, c, n)
real, device :: a(n), b(n), c(n)
integer, value :: n
integer :: idx
idx = threadIdx%x + (blockIdx%x-1)*blockDim%x
if (idx <= n) c(idx) = a(idx) + b(idx)
end subroutine vector_add
end program cpu_gpu_benchmark
新機能・解説
経過時間計測
omp_get_wtime() を使用して、CPU/GPUの処理時間を秒単位で取得。
GPUでは cudaDeviceSynchronize() を入れて、カーネル終了まで待つ。
CPU/GPU切り替え
use_gpu の入力でCPUとGPUを選択。
配列加算の結果は c(1..5) で簡単に確認可能。
性能比較
n を大きくするとGPUの高速性が顕著になる。
小規模データではCPUの方が速い場合もある(GPU転送オーバーヘッドがあるため)。
💡 ポイント
このコードで CPU(OpenMP) vs GPU(CUDA Fortran) の実行時間比較が可能。
科学技術計算や数値解析のチューニングに便利。
必要であれば、さらに OpenACCバージョンも追加して3-way比較(CPU/OpenMP vs GPU/CUDA vs GPU/OpenACC) も作れます。
作りますか?
はい。
ChatGPT:
では、先ほどのプログラムに OpenACC バージョン を追加して、CPU/OpenMP vs GPU/CUDA vs GPU/OpenACC の3通りで実行時間を比較できる形にします。
CPU/OpenMP + GPU/CUDA + GPU/OpenACC 3-wayベンチマーク FORTRAN
program cpu_gpu_full_benchmark
use cudafor
use omp_lib
implicit none
integer, parameter :: n = 1000000
real, allocatable :: h_a(:), h_b(:), h_c(:)
real, allocatable, device :: d_a(:), d_b(:), d_c(:)
integer :: i
integer :: mode
real :: t_start, t_end
! 実行モード選択
print *, "Select mode: 1=CPU(OpenMP), 2=GPU(CUDA), 3=GPU(OpenACC)"
read(*,*) mode
! ホスト配列の確保
allocate(h_a(n), h_b(n), h_c(n))
! 配列初期化(CPU, OpenMP使用)
!$omp parallel do
do i = 1, n
h_a(i) = real(i)
h_b(i) = real(2*i)
end do
select case (mode)
case (1)
! ---------------------------
! CPU計算 (OpenMP)
! ---------------------------
t_start = omp_get_wtime()
!$omp parallel do
do i = 1, n
h_c(i) = h_a(i) + h_b(i)
end do
t_end = omp_get_wtime()
print *, "CPU OpenMP result c(1..5) =", h_c(1:5)
print *, "CPU execution time (sec) =", t_end - t_start
case (2)
! ---------------------------
! GPU計算 (CUDA Fortran)
! ---------------------------
allocate(d_a(n), d_b(n), d_c(n))
d_a = h_a
d_b = h_b
t_start = omp_get_wtime()
call vector_add<<<(n+255)/256,256>>>(d_a, d_b, d_c, n)
call cudaDeviceSynchronize()
t_end = omp_get_wtime()
h_c = d_c
deallocate(d_a,d_b,d_c)
print *, "CUDA GPU result c(1..5) =", h_c(1:5)
print *, "GPU(CUDA) execution time (sec) =", t_end - t_start
case (3)
! ---------------------------
! GPU計算 (OpenACC)
! ---------------------------
t_start = omp_get_wtime()
!$acc data copyin(h_a,h_b), copyout(h_c)
!$acc parallel loop
do i = 1, n
h_c(i) = h_a(i) + h_b(i)
end do
!$acc end parallel loop
!$acc end data
t_end = omp_get_wtime()
print *, "GPU(OpenACC) result c(1..5) =", h_c(1:5)
print *, "GPU(OpenACC) execution time (sec) =", t_end - t_start
case default
print *, "Invalid mode!"
end select
deallocate(h_a,h_b,h_c)
contains
! GPUカーネル (CUDA)
attributes(global) subroutine vector_add(a, b, c, n)
real, device :: a(n), b(n), c(n)
integer, value :: n
integer :: idx
idx = threadIdx%x + (blockIdx%x-1)*blockDim%x
if (idx <= n) c(idx) = a(idx) + b(idx)
end subroutine vector_add
end program cpu_gpu_full_benchmark
説明
モード切替
1 = CPU(OpenMP)
2 = GPU(CUDA Fortran)
3 = GPU(OpenACC)
CPU/OpenMP
OpenMPで配列加算ループを並列化。
小規模データではGPUより速い場合もある。
GPU/CUDA
CUDAカーネルで配列加算。
ホスト→デバイス転送とデバイス→ホスト転送を行う。
大規模データで高効率。
GPU/OpenACC
ディレクティブ型でGPUに転送して加算。
コードの書き換えが少なく、CUDAより簡単。
性能測定
omp_get_wtime() を使用して実行時間を測定。
GPUの場合は CUDA では cudaDeviceSynchronize() を挟むことで正確に測定可能。
💡 ポイント
このプログラムで 同じ配列加算を CPU/OpenMP、GPU/CUDA、GPU/OpenACC で比較できる。
HPCのチューニングやGPU選定のベンチマークに最適。
配列サイズやスレッド数を変えることで、オーバーヘッドやスピードアップ率も確認可能。
希望であれば、同一配列サイズで速度差をグラフ化して自動出力するバージョン も作れます。
作りますか?
ChatGPT の回答は必ずしも正しいとは限りません。重要な情報は確認するようにしてください。
参考文献をwiki以外で11示してください。
ChatGPT:
以下に、FORTRANを用いた並列処理やGPUプログラミングに関する参考文献を11件ご紹介します。
CUDA Fortran に関する参考文献
NVIDIA CUDA Fortran Programming Guide (Version 23.3)
NVIDIAが提供する公式ガイドで、CUDA Fortranの基本から応用までを詳細に解説しています。GPUカーネルの作成方法やデータ転送、非同期処理、Tensor Coreの活用方法などが含まれています。
リンク https://chatgpt.com/c/68d93a8e-fe4c-8328-90ad-93de6ea975b4#:~:text=参考文献をwiki以外,立ててください%E3%80%82
An Introduction to CUDA Fortran
Forschungszentrum Jülichの資料で、CUDA Fortranの基本的な使い方や注意点、実際のコード例を交えて解説しています。
リンク https://chatgpt.com/c/68d93a8e-fe4c-8328-90ad-93de6ea975b4#:~:text=参考文献をwiki以外,立ててください%E3%80%82
CUDA Fortran Programming Guide
IBMのXL Fortran向けのガイドで、CUDA Fortranのサポート状況や設定方法、コンパイル手順などが説明されています。
リンク https://chatgpt.com/c/68d93a8e-fe4c-8328-90ad-93de6ea975b4#:~:text=参考文献をwiki以外,立ててください%E3%80%82
An Easy Introduction to CUDA Fortran
NVIDIAの公式ブログで、CUDA Fortranの基本的な概念や開発環境のセットアップ方法、簡単なコード例を紹介しています。
リンク https://chatgpt.com/c/68d93a8e-fe4c-8328-90ad-93de6ea975b4#:~:text=参考文献をwiki以外,立ててください%E3%80%82
OpenACC に関する参考文献
OpenACC Programming and Best Practices Guide
OpenACCの公式ガイドで、並列化の基本概念やベストプラクティス、性能ポータビリティを考慮したコードの書き方などが詳述されています。
リンク https://chatgpt.com/c/68d93a8e-fe4c-8328-90ad-93de6ea975b4#:~:text=参考文献をwiki以外,立ててください%E3%80%82
OpenACC Getting Started Guide 25.9
NVIDIAのHPC SDKに含まれるOpenACCの入門ガイドで、環境設定から基本的な使い方、デバイス管理、データ転送などの基本操作が説明されています。
リンク https://chatgpt.com/c/68d93a8e-fe4c-8328-90ad-93de6ea975b4#:~:text=参考文献をwiki以外,立ててください%E3%80%82
GPU Computing with OpenACC Directives
Pittsburgh Supercomputing Centerの資料で、OpenACCを用いたGPUコンピューティングの基本から応用までを解説しています。
リンク https://chatgpt.com/c/68d93a8e-fe4c-8328-90ad-93de6ea975b4#:~:text=参考文献をwiki以外,立ててください%E3%80%82
Introduction to OpenACC - UL HPC Tutorials
UL HPCのチュートリアルで、OpenACCの基本概念や使用方法、実際のコード例を交えて解説しています。
リンク https://chatgpt.com/c/68d93a8e-fe4c-8328-90ad-93de6ea975b4#:~:text=参考文献をwiki以外,立ててください%E3%80%82
Fortranの並列処理に関する参考文献
Parallel Programming in Fortran
West Virginia Universityの資料で、Fortranにおける並列プログラミングの基本概念や、OpenMP、OpenACC、CUDA Fortran、MPIなどの技術を紹介しています。
リンク https://chatgpt.com/c/68d93a8e-fe4c-8328-90ad-93de6ea975b4#:~:text=参考文献をwiki以外,立ててください%E3%80%82
Fortran Parallel Computing
Intelのフォーラムで、Fortranを用いた並列コンピューティングの基本的な考え方や、使用するツール、コンパイラオプションなどについて議論されています。
リンク https://chatgpt.com/c/68d93a8e-fe4c-8328-90ad-93de6ea975b4#:~:text=参考文献をwiki以外,立ててください%E3%80%82
Programming GPUs in Fortran
Louisiana State Universityの資料で、Fortranを用いたGPUプログラミングの基本から応用までを解説しています。OpenACCやCUDA Fortranを用いたコード例も紹介されています。
リンク https://chatgpt.com/c/68d93a8e-fe4c-8328-90ad-93de6ea975b4#:~:text=参考文献をwiki以外,立ててください%E3%80%82
これらの資料は、FORTRANを用いた並列処理やGPUプログラミングの理解を深めるために非常に有用です。各リンク先で詳細な情報やコード例が提供されているので、実際の開発に役立ててください。
参照
ChatGPT利用の技4つ with ChatGPT
https://qiita.com/kaizen_nagoya/items/4a178bd6a09a4a471a7f
ChatGPTによるQiita記事の改良と補足
https://qiita.com/kaizen_nagoya/items/20604d6dd0702ab95c2f
ChatGPTによるQiita記事の改良と補足(2)
https://qiita.com/kaizen_nagoya/items/996275307ffc8c1243f8
本から始める 面倒なことはChatGPTにやらせよう by からあげ
https://qiita.com/kaizen_nagoya/items/f5ce2a18db54b5610e4b
MCP入門 〜面倒なことはAIエージェントにやらせよう〜 by からあげ を聞きながら
https://qiita.com/kaizen_nagoya/items/54b648c838fae8d57e38
【松尾研LLMコミュニティ】面倒なことはLLMにやらせよう "Beginning LLM"2024年10月17日 AI(9)
https://qiita.com/kaizen_nagoya/items/efdc23fbe67cdae2126e
設計:ChatGPTで特異解か一般解を求める AI(1)
https://qiita.com/kaizen_nagoya/items/4dec580e16a7c84b0ec4
みんなの使い方から学ぶ
https://qiita.com/kaizen_nagoya/items/8e7de492d896df94a36e
AI・機械学習 昨日、今日、明日
https://qiita.com/kaizen_nagoya/items/adb184c8fc7a65ac9756
DNA LLM and genome for survey 2200 papers by name.
https://qiita.com/kaizen_nagoya/items/ce8a28d6072f340a9d59
ChatGPTから学ぶ 3倍褒めて3分の1貶す
https://qiita.com/kaizen_nagoya/items/91e70fd8caa25076718b
AI時代の相棒は、キミに決めた! 推しのAIエージェントをシェアしよう!企画参加まとめへの序章
https://qiita.com/kaizen_nagoya/items/e3fd7557bac97d1b88f2
記事投稿数、いいね数の目標設定して ChatGPTに聞いてみた。
https://qiita.com/kaizen_nagoya/items/019e2ad9c3e45e45854e
AI時代の相棒は、キミに決めた! ChatGPT推し ver.0
https://qiita.com/kaizen_nagoya/items/8068a884fb2e64cd3c4f
無料ChatGPTの処理限界
https://qiita.com/kaizen_nagoya/items/84683aee26d9f4a28af0
by ChatGPT, with ChatGPT and people opinions.
https://qiita.com/kaizen_nagoya/items/57f00f9b48b25bc231e6
ChatGPTの使い方の利点と課題 by ChatGPT
https://qiita.com/kaizen_nagoya/items/0f469e473a6ed0407daa
DataRobot 風 AI agent Robotをあなたに
https://qiita.com/kaizen_nagoya/items/1ca8ca1dedefaf739d16
ChatGPTの賢い使い方
https://qiita.com/kaizen_nagoya/items/3a7e4583553543eeeeb3
ChatGPTの弱みをあなたに
https://qiita.com/kaizen_nagoya/items/3c97c63a22939e203905
ChatGPTで裸の王様
https://qiita.com/kaizen_nagoya/items/8377be38d3a763e93811
設計 仕様 制約 AI利用開発の鍵 by ChatGPT
https://qiita.com/kaizen_nagoya/items/1b9cb2f9d26308d84791
PowerPoint 筋書き(outline), 見直し(review), 見栄え加工 by ChatGPT
https://qiita.com/kaizen_nagoya/items/37bb97fc250fca37295b
逃げ回るChatGPTを追い詰めるには
https://qiita.com/kaizen_nagoya/items/cd60426e626ba05e0377
三人寄れば文珠の知恵は直交する能力前提 by ChatGPT
https://qiita.com/kaizen_nagoya/items/512e5611615e2426bb42
プログラマ3年で社長事業(未成年編) 博士論文支援追加
https://qiita.com/kaizen_nagoya/items/326452b5bf29c144c307
自殺防止手引き原稿 補足 by ChatGPT
https://qiita.com/kaizen_nagoya/items/7e459fa7edf7205c2667
しつけ(discipline) の測定視点 by ChatGPT
https://qiita.com/kaizen_nagoya/items/6b5ce03c545f7bbd8723
技術者は英語を学ぶ必要はない。英単語の羅列でいい=プログラム。
https://qiita.com/kaizen_nagoya/items/4fc3963a21e0339fd1c9
猫中心設計から鳥中心設計へ part2
https://qiita.com/kaizen_nagoya/items/4d7a5a33c85e0b01dc5d
プログラマ必須科目 ChatGPTにも確認
https://qiita.com/kaizen_nagoya/items/7b30d9d119792130facd
なんで音楽とプログラムの関係がうまく書けないか。
https://qiita.com/kaizen_nagoya/items/489a68d360df4b26f87d
AI利用業務手引き
https://qiita.com/kaizen_nagoya/items/f201b292f37dba16e9ef
C言語(C++)が必要な人と必要ない人
https://qiita.com/kaizen_nagoya/items/2afe9e846b55b24cb6f1
C言語(C++)が必要な人、必要ない人 ChatGPT
https://qiita.com/kaizen_nagoya/items/a074cb8cd292d8d94bd4
C言語を習得する3つの方法
https://qiita.com/kaizen_nagoya/items/84cab0888c193bba429b
C言語を習得する3つの方法 ChatGPT
https://qiita.com/kaizen_nagoya/items/4a3518a18fa49f46787f