【漫漫科研路\C&C++】Win10 + VS2017 + CUDA10.1 + CPLEX12.9 配置

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的項目,如下圖所示:
    創建CUDA項目
  • 項目中自帶一個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文件


  • 項目的配置參考前面提及的c_cpp.htmlBuilding your own project which links with CPLEX一節的第4點:
    在這裏插入圖片描述
    根據上圖所示,項目具體配置如下
  1. 將調試環境改爲 release 和 x64:
    在這裏插入圖片描述

  2. 右擊項目、選擇屬性、然後選擇C/C++一項:

    1). 在General(常規)一項中,選擇Additional Include Directories,添加如下:
    在這裏插入圖片描述
    2). 在Preprocessor(預處理器)中,選擇Preprocessor Definitions, 編輯如下:
    在這裏插入圖片描述
    3). 選擇Code Generation(代碼生成),然後選擇Runtime Library(運行庫), 設置如下 :
    在這裏插入圖片描述

  3. 右擊項目、選擇屬性、然後選擇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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章