aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOpportunityLiu <opportunity@live.in>2019-06-02 15:26:26 +0800
committerOpportunityLiu <opportunity@live.in>2019-06-02 15:26:26 +0800
commit8cb46236f41ac5476f2fe38353156db4c8195325 (patch)
treedbfdcebcbad16003659403b66b96236f50f3f7a3
parent57095aa985ac1526240563ae1845e360c81db708 (diff)
downloadxmake-docs-8cb46236f41ac5476f2fe38353156db4c8195325.tar.gz
xmake-docs-8cb46236f41ac5476f2fe38353156db4c8195325.zip
add docs for find_cudadevices; improve docs for cuda templates
Related: xmake-io/xmake#430, xmake-io/xmake#431
-rw-r--r--README.md20
-rw-r--r--manual.md18
-rw-r--r--zh/README.md21
-rw-r--r--zh/manual.md18
4 files changed, 55 insertions, 22 deletions
diff --git a/README.md b/README.md
index 490bf95c..7e806945 100644
--- a/README.md
+++ b/README.md
@@ -222,6 +222,7 @@ Support languages:
* c/c++
* objc/c++
+* cuda
* asm
* swift
* dlang
@@ -422,20 +423,16 @@ $ xmake
```
```lua
+-- add helper function add_cugencode
+includes('add_cugencode.lua')
+-- define target
target("cuda_console")
set_kind("binary")
add_files("src/*.cu")
-
- -- generate SASS code for each SM architecture
- for _, sm in ipairs({"30", "35", "37", "50", "52", "60", "61", "70"}) do
- add_cuflags("-gencode arch=compute_" .. sm .. ",code=sm_" .. sm)
- add_ldflags("-gencode arch=compute_" .. sm .. ",code=sm_" .. sm)
- end
-
- -- generate PTX code from the highest SM architecture to guarantee forward-compatibility
- sm = "70"
- add_cuflags("-gencode arch=compute_" .. sm .. ",code=compute_" .. sm)
- add_ldflags("-gencode arch=compute_" .. sm .. ",code=compute_" .. sm)
+ -- generate SASS code for SM architecture of current host
+ add_cugencode("native")
+ -- generate PTX code for the virtual architecture to guarantee compatibility
+ add_cugencode("compute_30")
```
xmake will detect Cuda SDK automatically and we can also set the SDK directory manually.
@@ -740,6 +737,7 @@ $ xmake
| [--rc-ld](#-rc-ld) | Set `rust` linker |
| [--rc-sh](#-rc-sh) | Set `rust` shared library linker |
| [--rc-ar](#-rc-ar) | Set `rust` static library archiver |
+| [--cu-cxx](#-cu-cxx) | Set `cuda` host compiler |
| [--cu-ld](#-cu-ld) | Set `cuda` linker |
| [--cu-sh](#-cu-sh) | Set `cuda` shared library linker |
| [--cu-ar](#-cu-ar) | Set `cuda` static library archiver |
diff --git a/manual.md b/manual.md
index 4605534d..68e05eb0 100644
--- a/manual.md
+++ b/manual.md
@@ -7549,6 +7549,7 @@ The interface of this module is spread across multiple module directories, try t
| [detect.find_package](#detect-find_package) | Find package files, including library files and search paths | >= 2.1.5 |
| [detect.find_tool](#detect-find_tool) | Find Tool | >= 2.1.5 |
| [detect.find_toolname](#detect-find_toolname) | Find Tool Name | >= 2.1.5 |
+| [detect.find_cudadevices](#detect-find_cudadevices) | Find CUDA devices of the host | >= 2.2.7 |
| [detect.features](#detect-features) | Get all the features of the specified tool | >= 2.1.5 |
| [detect.has_features](#detect-has_features) | Determine if the specified feature is supported | >= 2.1.5 |
| [detect.has_flags](#detect-has_flags) | Determine if the specified parameter options are supported | >= 2.1.5 |
@@ -8113,6 +8114,23 @@ example:
Compared with program, toolname can uniquely mark a tool, and it is also convenient to find and load the corresponding script `find_xxx.lua`.
+###### detect.find_cudadevices
+
+- Find CUDA devices of the host
+
+Enumerate CUDA devices through the CUDA Runtime API and query theirs properties.
+
+```lua
+import("lib.detect.find_cudadevices")
+
+local devices = find_cudadevices({ skip_compute_mode_prohibited = true })
+local devices = find_cudadevices({ min_sm_arch = 35, order_by_flops = true })
+```
+
+The result returned is: `{ { ['$id'] = 0, name = "GeForce GTX 960M", major = 5, minor = 0, ... }, ... }`
+
+The included properties will vary depending on the current CUDA version. Refer to [CUDA Toolkit Documentation](https://docs.nvidia.com/cuda/cuda-runtime-api/structcudaDeviceProp.html#structcudaDeviceProp) and its historical version.
+
###### detect.features
- Get all the features of the specified tool
diff --git a/zh/README.md b/zh/README.md
index af6ba511..db25f4bb 100644
--- a/zh/README.md
+++ b/zh/README.md
@@ -250,6 +250,7 @@ target("hello")
* c/c++
* objc/c++
+* cuda
* asm
* swift
* dlang
@@ -452,22 +453,19 @@ $ xmake
```
```lua
+-- add helper function add_cugencode
+includes('add_cugencode.lua')
+-- define target
target("cuda_console")
set_kind("binary")
add_files("src/*.cu")
-
- -- generate SASS code for each SM architecture
- for _, sm in ipairs({"30", "35", "37", "50", "52", "60", "61", "70"}) do
- add_cuflags("-gencode arch=compute_" .. sm .. ",code=sm_" .. sm)
- add_ldflags("-gencode arch=compute_" .. sm .. ",code=sm_" .. sm)
- end
-
- -- generate PTX code from the highest SM architecture to guarantee forward-compatibility
- sm = "70"
- add_cuflags("-gencode arch=compute_" .. sm .. ",code=compute_" .. sm)
- add_ldflags("-gencode arch=compute_" .. sm .. ",code=compute_" .. sm)
+ -- generate SASS code for SM architecture of current host
+ add_cugencode("native")
+ -- generate PTX code for the virtual architecture to guarantee compatibility
+ add_cugencode("compute_30")
```
+
默认会自动探测cuda环境,当然也可以指定Cuda SDK环境目录:
```console
@@ -772,6 +770,7 @@ $ xmake
| [--rc-ld](#-rc-ld) | 设置`rust`链接器 |
| [--rc-sh](#-rc-sh) | 设置`rust`共享库链接器 |
| [--rc-ar](#-rc-ar) | 设置`rust`静态库归档器 |
+| [--cu-cxx](#-cu-cxx) | 设置`cuda` host编译器 |
| [--cu-ld](#-cu-ld) | 设置`cuda`链接器 |
| [--cu-sh](#-cu-sh) | 设置`cuda`共享库链接器 |
| [--cu-ar](#-cu-ar) | 设置`cuda`静态库归档器 |
diff --git a/zh/manual.md b/zh/manual.md
index d1cbb270..4fc58bcf 100644
--- a/zh/manual.md
+++ b/zh/manual.md
@@ -7632,6 +7632,7 @@ environment.leave("toolchains")
| [detect.find_package](#detect-find_package) | 查找包文件,包含库文件和搜索路径 | >= 2.1.5 |
| [detect.find_tool](#detect-find_tool) | 查找工具 | >= 2.1.5 |
| [detect.find_toolname](#detect-find_toolname) | 查找工具名 | >= 2.1.5 |
+| [detect.find_cudadevices](#detect-find_cudadevices) | 查找本机的 CUDA 设备 | >= 2.2.7 |
| [detect.features](#detect-features) | 获取指定工具的所有特性 | >= 2.1.5 |
| [detect.has_features](#detect-has_features) | 判断指定特性是否支持 | >= 2.1.5 |
| [detect.has_flags](#detect-has_flags) | 判断指定参数选项是否支持 | >= 2.1.5 |
@@ -8162,6 +8163,23 @@ end
toolname相比program,更能唯一标示某个工具,也方便查找和加载对应的脚本`find_xxx.lua`。
+###### detect.find_cudadevices
+
+- 查找本机的 CUDA 设备
+
+通过 CUDA Runtime API 枚举本机的 CUDA 设备,并查询其属性。
+
+```lua
+import("lib.detect.find_cudadevices")
+
+local devices = find_cudadevices({ skip_compute_mode_prohibited = true })
+local devices = find_cudadevices({ min_sm_arch = 35, order_by_flops = true })
+```
+
+返回的结果为:`{ { ['$id'] = 0, name = "GeForce GTX 960M", major = 5, minor = 0, ... }, ... }`
+
+包含的属性依据当前 CUDA 版本会有所不同,可以参考 [CUDA 官方文档](https://docs.nvidia.com/cuda/cuda-runtime-api/structcudaDeviceProp.html#structcudaDeviceProp)及其历史版本。
+
###### detect.features
- 获取指定工具的所有特性