質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

CUDA

CUDAは並列計算プラットフォームであり、Nvidia GPU(Graphics Processing Units)向けのプログラミングモデルです。CUDAは様々なプログラミング言語、ライブラリ、APIを通してNvidiaにインターフェイスを提供します。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

バージョン管理

バージョン管理はコンピューター上にファイルとして格納されているドキュメント・プログラム・その他の情報の変更履歴等を管理するものです

Q&A

解決済

2回答

1680閲覧

addKernel launch failed: no kernel image is available for execution on the device addWithCuda failed

tosakasimon

総合スコア8

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

CUDA

CUDAは並列計算プラットフォームであり、Nvidia GPU(Graphics Processing Units)向けのプログラミングモデルです。CUDAは様々なプログラミング言語、ライブラリ、APIを通してNvidiaにインターフェイスを提供します。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

コマンドプロンプト

コマンドプロンプト(cmd.exe)はMicrosoftによって提供されているコマンドラインインタプリタです。OS/2・Windows CE・Windows NTで使用可能です。

バージョン管理

バージョン管理はコンピューター上にファイルとして格納されているドキュメント・プログラム・その他の情報の変更履歴等を管理するものです

0グッド

0クリップ

投稿2020/09/05 07:06

visualstudio2019環境でCUDAプログラミングを行おうとしているのですが、プロジェクト開始時に自動生成されるkernel.cuファイルの実行をしようとするとタイトルのようなエラーとなってしまいます。使用しているCUDAのバージョンは11.0で、GPUはGTX680です。x64Nativetoolsコマンドプロンプトなどでnvccやclの確認はすでに通っています。そちらのほうでコンパイルして実行しても、CPU部分はうごいても、GPUの部分が動いていないようなのです。デバイスマネージャーなどで確認するとGPU自体は正常に作動しているようなのでなぜなのかがわからないです。よろしくお願いします。

cu

1#include "cuda_runtime.h" 2#include "device_launch_parameters.h" 3#include "cuda_runtime.h" 4#include "cuda_runtime_api.h" 5#include <stdio.h> 6 7cudaError_t addWithCuda(int *c, const int *a, const int *b, unsigned int size); 8 9__global__ void addKernel(int *c, const int *a, const int *b) 10{ 11 int i = threadIdx.x; 12 c[i] = a[i] + b[i]; 13} 14 15int main() 16{ 17 const int arraySize = 5; 18 const int a[arraySize] = { 1, 2, 3, 4, 5 }; 19 const int b[arraySize] = { 10, 20, 30, 40, 50 }; 20 int c[arraySize] = { 0 }; 21 22 // Add vectors in parallel. 23 cudaError_t cudaStatus = addWithCuda(c, a, b, arraySize); 24 if (cudaStatus != cudaSuccess) { 25 fprintf(stderr, "addWithCuda failed!"); 26 return 1; 27 } 28 29 printf("{1,2,3,4,5} + {10,20,30,40,50} = {%d,%d,%d,%d,%d}\n", 30 c[0], c[1], c[2], c[3], c[4]); 31 32 // cudaDeviceReset must be called before exiting in order for profiling and 33 // tracing tools such as Nsight and Visual Profiler to show complete traces. 34 cudaStatus = cudaDeviceReset(); 35 if (cudaStatus != cudaSuccess) { 36 fprintf(stderr, "cudaDeviceReset failed!"); 37 return 1; 38 } 39 40 return 0; 41} 42 43// Helper function for using CUDA to add vectors in parallel. 44cudaError_t addWithCuda(int *c, const int *a, const int *b, unsigned int size) 45{ 46 int *dev_a = 0; 47 int *dev_b = 0; 48 int *dev_c = 0; 49 cudaError_t cudaStatus; 50 51 // Choose which GPU to run on, change this on a multi-GPU system. 52 cudaStatus = cudaSetDevice(0); 53 if (cudaStatus != cudaSuccess) { 54 fprintf(stderr, "cudaSetDevice failed! Do you have a CUDA-capable GPU installed?"); 55 goto Error; 56 } 57 58 // Allocate GPU buffers for three vectors (two input, one output) . 59 cudaStatus = cudaMalloc((void**)&dev_c, size * sizeof(int)); 60 if (cudaStatus != cudaSuccess) { 61 fprintf(stderr, "cudaMalloc failed!"); 62 goto Error; 63 } 64 65 cudaStatus = cudaMalloc((void**)&dev_a, size * sizeof(int)); 66 if (cudaStatus != cudaSuccess) { 67 fprintf(stderr, "cudaMalloc failed!"); 68 goto Error; 69 } 70 71 cudaStatus = cudaMalloc((void**)&dev_b, size * sizeof(int)); 72 if (cudaStatus != cudaSuccess) { 73 fprintf(stderr, "cudaMalloc failed!"); 74 goto Error; 75 } 76 77 // Copy input vectors from host memory to GPU buffers. 78 cudaStatus = cudaMemcpy(dev_a, a, size * sizeof(int), cudaMemcpyHostToDevice); 79 if (cudaStatus != cudaSuccess) { 80 fprintf(stderr, "cudaMemcpy failed!"); 81 goto Error; 82 } 83 84 cudaStatus = cudaMemcpy(dev_b, b, size * sizeof(int), cudaMemcpyHostToDevice); 85 if (cudaStatus != cudaSuccess) { 86 fprintf(stderr, "cudaMemcpy failed!"); 87 goto Error; 88 } 89 90 // Launch a kernel on the GPU with one thread for each element. 91 addKernel<<<1, size>>>(dev_c, dev_a, dev_b); 92 93 // Check for any errors launching the kernel 94 cudaStatus = cudaGetLastError(); 95 if (cudaStatus != cudaSuccess) { 96 fprintf(stderr, "addKernel launch failed: %s\n", cudaGetErrorString(cudaStatus)); 97 goto Error; 98 } 99 100 // cudaDeviceSynchronize waits for the kernel to finish, and returns 101 // any errors encountered during the launch. 102 cudaStatus = cudaDeviceSynchronize(); 103 if (cudaStatus != cudaSuccess) { 104 fprintf(stderr, "cudaDeviceSynchronize returned error code %d after launching addKernel!\n", cudaStatus); 105 goto Error; 106 } 107 108 // Copy output vector from GPU buffer to host memory. 109 cudaStatus = cudaMemcpy(c, dev_c, size * sizeof(int), cudaMemcpyDeviceToHost); 110 if (cudaStatus != cudaSuccess) { 111 fprintf(stderr, "cudaMemcpy failed!"); 112 goto Error; 113 } 114 115Error: 116 cudaFree(dev_c); 117 cudaFree(dev_a); 118 cudaFree(dev_b); 119 120 return cudaStatus; 121}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ありがとうございます。CUDAのホームページのcompute capabilityのサポート対応を見落としていたようです。バージョンをvs.CUDA共に下げたら解決しました。ありがとうございました。

投稿2020/09/05 09:19

tosakasimon

総合スコア8

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

GTX680 のCUDAアーキテクチャは Keplerだったっけ。
Kepler はもはやサポートから外れてませんでしたっけ。

投稿2020/09/05 07:58

episteme

総合スコア16612

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問