是否可以使用Mingw和Nvidia SDK编译OpenCL?
我知道它没有得到官方支持,但这没有意义.库不是作为静态链接库提供的吗?我的意思是一旦用可能的任何编译器编译,并成功链接,什么应该是问题?
我设法编译并成功将我的代码链接到Nvidia SDK提供的OpenCL库,但是可执行文件抛出了Segmentation Fault,clGetPlatformIDs这是我的代码中的第一个OpenCL调用.
这是我的编译命令
x86_64-w64-mingw32-g++ -std=c++11 File.cpp \
-L"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\lib\x64" \
-I"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v5.0\include" \
-gcoff -lOpenCL -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 \
-lshell32 -lole32 -loleaut32 \
-luuid -lodbc32 -lodbccp32 -luser32 -lgdi32 -lmingwex -m64 \
-DWIN32 -D_DEBUG -D_CONSOLE
Run Code Online (Sandbox Code Playgroud)
请注意,这些库来自示例OpenCL代码的.sln文件.
我尝试了这些库的各种组合,似乎没有任何工作.
还有一种方法可以使用Mingw进行编译并使用其他东西进行链接吗?我不确定其他东西是什么.
我有一个用C++编写的OpenGL库,它是使用C++/CLI适配器从C#应用程序中使用的.我的问题是如果应用程序用于具有Nvidia Optimus技术的笔记本电脑上,应用程序将不会使用硬件加速并失败.
我试图使用Nvidias文档中的信息http://developer.download.nvidia.com/devzone/devcenter/gamegraphics/files/OptimusRenderingPolicies.pdf 关于将libs链接到我的C++ - dll并从我的OpenGL库中导出NvOptimusEnablement但那失败了.我想我必须对.exe做一些事情而不是与.exe链接的.dll
对我们来说,使用配置文件不是一个好选择,因为我们需要确保使用nvidia硬件.
C#应用程序是否有某种方式可以强制Optimus使用Nvidia芯片组而不是集成的Intel芯片组?
我正在用一些新的基准测试结果更新我的问题(我还重新提出了更具体的问题并更新了代码)...
我使用共享内存遵循CUDA C编程指南,在CUDA C中实现了用于矩阵向量乘法的内核.让我首先介绍一些我在Jetson TK1(GPU:Tegra K1,计算能力3.2)上做的基准测试结果以及与cuBLAS的比较:


在这里,我猜cuBLAS做了一些魔术,因为它的执行似乎不受列数的影响A,这反过来暗示了沿着列的某种并行化A.
现在,这是我的内核的源代码和一个调用它的主机函数(文件:mv.cuh):
#include <cuda_runtime.h>
#define BLOCK_SIZE 16
/* Set to __restric__ */
#define RESTRICT
/**
* Performs matrix-vector multiplication on the device.
*
* @param dA Address of matrix `A` on the device
* @param dx Address of vector `x` on the device
* @param dev_ptr_y Address of result y = A*x
* @param nRows Number of rows of `A`
* @param nx Size of `x` (number of …Run Code Online (Sandbox Code Playgroud) 我试过了nvidia-docker --version,但它似乎只是显示了docker的版本.
经过对官方文件的一些调查后,我找不到任何有关此事的信息.
如何查看nvidia-docker版本?
哪个是在CUDA中使用常量的最佳方法?
一种方法是在常量内存中定义常量,例如:
// CUDA global constants
__constant__ int M;
int main(void)
{
...
cudaMemcpyToSymbol("M", &M, sizeof(M));
...
}
Run Code Online (Sandbox Code Playgroud)
一种替代方法是使用C预处理器:
#define M = ...
Run Code Online (Sandbox Code Playgroud)
我认为使用C预处理器定义常量要快得多.那么在CUDA设备上使用常量内存的好处是什么?
在参考文献的位置方面,L2缓存如何在具有Kepler架构的GPU中工作?例如,如果一个线程访问全局内存中的地址,假设该地址的值不在L2缓存中,那么缓存的值是多少?是暂时的吗?或者该附近的其他附近值是否也被带到L2缓存(空间)?
下图来自NVIDIA白皮书.

我注意到nvidia支持GPU和Docker,但我相信这只适用于Linux.有没有人让它在Windows 10上工作?
特别是,我希望能够访问机器学习应用程序.
这是在Windows 10计算机上没有连接到Nvidia卡的显示器.我已经包含nvida-smi的输出显示> 5.04G可用.
这是张量流代码,要求它分配比我之前看到的略多:(我希望它尽可能接近内存分数= 1.0)
config = tf.ConfigProto()
#config.gpu_options.allow_growth=True
config.gpu_options.per_process_gpu_memory_fraction=0.84
config.log_device_placement=True
sess = tf.Session(config=config)
Run Code Online (Sandbox Code Playgroud)
就在jupyter笔记本中运行上面这行之前,我运行了nvida-smi:
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 376.51 Driver Version: 376.51 |
|-------------------------------+----------------------+----------------------+
| GPU Name TCC/WDDM | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce GTX 106... WDDM | 0000:01:00.0 Off | N/A |
| 0% 27C P8 5W / 120W | 43MiB / 6144MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU …Run Code Online (Sandbox Code Playgroud)