現在、一部のファイルで nvcc.exe が呼び出され、結果の .ptx ファイルが生成される CUDA 用のモック JIT コンパイラを使用しています。
bool executeWindowsProcess(ofstream &logFF) {
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
char cmd[] = "\"C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v5.0\\bin\\nvcc.exe\"";
char args[] = "\"C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v5.0\\bin\\nvcc.exe\" --ptx --machine 32 -arch=sm_30 -o C:\\Users\\Yutong\\GOODKERNELCOMPILED.ptx --use_fast_math C:\\Users\\Yutong\\tempkernel.cu";
logFF << cmd << endl;
logFF << args << endl;
CreateProcess(cmd, args, NULL, NULL, false, CREATE_DEFAULT_ERROR_MODE, NULL, NULL, &si, &pi);
logFF << GetLastError() << endl;
WaitForSingleObject(pi.hProcess, INFINITE);
logFF << GetLastError() << endl;
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
return true;
}
最初の GetLastError() は 123 を返します。これは、nvcc.exe がまったく呼び出されていないことを示しているようです。cmd[] を notepad.exe (C:/Windows/System32/notepad.exe にあります) のようなものに設定すると、問題なく動作します。何人かに聞いてみたところ、以下のようです。
- 私のアプリは 32 ビット Windows 用にデプロイされています
- nvcc.exe は、64 ビット ディレクトリである C:/Program Files/..../ にあり、CreateProcess は、アクセス許可のないディレクトリで実行可能ファイルを呼び出すことができないようです。
PS、以前は system() を使用して JIT コンパイラを呼び出していましたが、system() は外部ターミナル ウィンドウ (GUI を作成している) を起動するため、通常はお勧めしません。