Win10下搭建VS2017+CUDA10.1+CPLEX12.9開發環境
想來已經有三、四年沒有用過C/C++了,一直都是使用MATLAB進行算法的實現。相比於C/C++, MATLAB更加適合快速地實現算法,可視化仿真結果。但最近想學習並行計算(儘管MATLAB也可以實現並行化),並且實驗室的服務器又裝有RTX2080Ti的顯卡,因此考慮使用CUDA平臺實現GPU並行編程。另一方面,我需要使用IBM的CPLEX工具來驗證算法的結果,於是乎就有了這篇文章。
VS2017的安裝
VS2017的安裝比較簡單,我就不作介紹了。但是有兩點需要注意:
- 最好先安裝VS2017,然後再安裝CUDA和CPLEX,
- 最好不要安裝最新版本VS2019,CPLEX12.9目前支持的是VS2015和VS2017
CUDA10.1的安裝
直接從NVIDIA官網下載最新版本的CUDA進行安裝,也可以安裝歷史發行版本。按照默認設置安裝即可。
測試是否安裝成功
最快捷的方法是運行cuda安裝完成後自帶的樣例,默認安裝在C:\ProgramData\NVIDIA Corporation\CUDA Samples\v10.1。下面我們介紹一般的方法,方便自己創建cuda項目:
- 在VS2017中創建一個HelloWorld_GPU的項目,如下圖所示:
- 項目中自帶一個kernel.cu的文件,可以直接運行,看是否運行成功。這裏,我們依照傳統,寫一個更爲簡單的hello world程序來進行測試。刪除kernel.cu文件,在項目中添加一個CUDA C/C++文件取名爲Hello_World,程序如下:
#include<stdio.h>
#include"cuda_runtime.h"
__global__ void helloFromGPU(void)
{
printf("Hello World from GPU!\n");
}
void main()
{
printf("Hello World from CPU.\n\n");//Hello from CPU
helloFromGPU << <1, 10 >> > ();//call for 10 threads
}
運行結果如下:
CPLEX12.9的安裝
CPLEX12.9的安裝是相對來說比較複雜的,簡單來說,分爲CPLEX12.9的下載、項目的配置。具體細節如下:
CPLEX12.9教育版的下載
普通免費版本支持1000個變量或約束的優化,下載地址及網頁如下:
爲不受限制,我們需要使用學生郵箱進行驗證下載(Get student and faculty editions for free). 然後在如下網頁註冊:
最後選擇如下版本進行下載:
CPLEX項目配置
項目的創建:
首先創建一個C/C++項目,在項目中添加一個test.cpp(名稱自取)文件,其代碼來自於 IBM ILOG CPLEX Optimization Studio Getting Started with CPLEX 的樣例,代碼如下:
#include <ilcplex/ilocplex.h>
#include <stdio.h>
using namespace std;
ILOSTLBEGIN
int
main(void *) {
IloEnv env;
try {
IloModel model(env);
IloNumVarArray vars(env);
vars.add(IloNumVar(env, 0.0, 40.0)); // 0 <= x1 <= 40
vars.add(IloNumVar(env)); // 0 <= x2
vars.add(IloNumVar(env)); // 0 <= x3
model.add(IloMaximize(env, vars[0] + 2 * vars[1] + 3 * vars[2])); //maximize x1 + 2 x2 + 3 x3
model.add(-vars[0] + vars[1] + vars[2] <= 20);//subject to -x1 + x2 + x3 <= 20
model.add(vars[0] - 3 * vars[1] + vars[2] <= 30);//x1 - 3 x2 + x3 <=30
IloCplex cplex(model);
if (!cplex.solve()) {
env.error() << "Failed to optimize LP." << endl;
throw(-1);
}
IloNumArray vals(env);
env.out() << "Solution status = " << cplex.getStatus() << endl;
env.out() << "Solution value = " << cplex.getObjValue() << endl;
cplex.getValues(vals, vars);
env.out() << "Values = " << vals << endl;
}
catch (IloException & e) { cerr << "Concert exception caught: " << e << endl; }
catch (...) { cerr << "Unknown exception caught" << endl; }
env.end();
system("pause");
return 0;
}
注意:VS2017創建C/C++會自帶pch.h和pch.cpp文件,我們可以刪除這兩個文件而不影響程序運行,具體可以通過項目->屬性-> C/C++ -> Precompiled Headers -> Precompiled Header一項中選擇Not Using Precompiled Headers 實現。
系統環境和項目的配置:
本文的配置完全依照 IBM ILOG CPLEX Optimization Studio Getting Started with CPLEX 以及安裝完CPLEX後,位於默認安裝目錄C:\ProgramFiles\IBM\ILOG\CPLEX_Enterprise_Server129\CPLEX_Studio\cplex的c_cpp.html文件
- 電腦的系統環境變量配置參考IBM ILOG CPLEX Optimization Studio Getting Started with CPLEX 中Setting up CPLEX on Windows一節中的設置:
具體操作如下:右擊我的電腦->屬性->高級系統設置->環境變量,編輯(添加)Path變量如下:
- 項目的配置參考前面提及的c_cpp.html中Building your own project which links with CPLEX一節的第4點:
根據上圖所示,項目具體配置如下:
-
將調試環境改爲 release 和 x64:
-
右擊項目、選擇屬性、然後選擇C/C++一項:
1). 在General(常規)一項中,選擇Additional Include Directories,添加如下:
2). 在Preprocessor(預處理器)中,選擇Preprocessor Definitions, 編輯如下:
3). 選擇Code Generation(代碼生成),然後選擇Runtime Library(運行庫), 設置如下 :
-
右擊項目、選擇屬性、然後選擇Link一項,然後進行如下操作:
1).選擇 General一項,在 Additional Library Directories中添加如下庫目錄:
2). 選擇Input,然後選擇Additional Dependencies,設置如下:
完成上述項目配置後,注意按下確定按鈕。注意:上述配置中的目錄都是你CPLEX的安裝目錄。最後在菜單欄Build選項中選擇Configuration Manager也需要選擇Release和x64,如圖所示:
至此,所有配置完成,運行項目,結果如下:
原文:https://blog.csdn.net/tengweitw/article/details/103113392
作者:nineheadedbird